Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
XPKeygen — Windows XP 키젠 | Kitploit
도구/GitHubGitHub/endermanch/xpkeygen
Reverse EngineeringCryptographyBinary Analysis
GitHubendermanch/xpkeygen

XPKeygen

Windows XP 키젠

저장소 보기
1.1k68152개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

XPKeygen

Windows XP / Windows Server 2003 VLK 키 생성기입니다. 이 도구는 무작위일 수 있는 _Raw Product Key(원시 제품 키)_를 기반으로 _유효한 Windows XP 키_를 생성할 수 있게 해 줍니다. RPK(Raw Product Key) 는 9자리 숫자 XXX-YYYYYY 형태로 제공되며 Windows XP 키를 생성하는 데에만 필요합니다.

XP Keygen

Download

Releases 탭으로 이동하여 최신 버전을 다운로드하세요.

Plans

이 프로젝트는 죽지 않았습니다. 반드시 완성시키기 위해 최선을 다하겠습니다.

문제

일반적으로 모든 에디션과 모든 빌드에 대해 유효한 Windows XP 키를 생성하는 것을 막는 유일한 장애물은 pidgen.dll 안에 있는 공개 키로부터 생성된 해당 개인 키가 없다는 것입니다. 타원 곡선 이산 로그 함수에 대한 코드는 온라인에 널리 공개된 것이 없고, 이를 수행하는 방법에 대한 모호한 정보만 존재합니다.

시간이 지나면서 이 문제는 부분적으로 해결되었습니다.

BINK 리소스는 어떤 식으로도 인코딩되지 않았으며 데이터는 리소스에 순차적으로 기록되어 있을 뿐입니다. sk00ter는 MDL 포럼에서 BINK 형식에 대해서도 완전히 설명했습니다. 이 주제에 대한 기존 커뮤니티 지식을 활용하여 Python 3로 BINK Reader를 작성했습니다. 이 파일은 이 저장소에 공개되어 있으며, 소스 코드를 보려면 여기를 클릭하세요.

이산 로그 해법은 2023년 5월 28일 현재 가장 연구가 덜 된 분야입니다. 하지만 제 친구 nephacks는 인터넷의 가장 깊은 구석에서 그 어려운 문제를 해결할 그 희귀한 도구를 찾아냈습니다. 그 도구는 Mr. HAANDI가 만든 ECDLP(타원 곡선 이산 로그 문제) Solver라고 합니다. 온라인에서 찾기가 매우 어려웠기 때문에 제 웹사이트에 다시 업로드했습니다. 도구는 여기에서 다운로드할 수 있습니다.

솔버 버전 0.2a에 포함된 ReadMe 파일만으로도 충분히 설명이 되어 있어서, 머리만 있다면 누구나 그 도구를 설정할 수 있습니다. 하지만 오픈소스가 아니기 때문에 제 키젠에 통합하는 것은 불가능한 것으로 판명되었습니다.

이상적인 시나리오에서 키젠은 pidgen.dll에서 추출한 BINK 리소스를 요청하고, 이를 다음 세그먼트로 분해할 것입니다:

  • 공개 키 (pubX; pubY)
  • 생성기 (genX; genY)
  • 기준점 (a; b)
  • 점 개수 p

이 세그먼트들을 알면 키젠은 Schoof 알고리즘을 사용하여 생성기 순서 genOrder를 브루트포스한 다음, 계산된 genOrder를 활용하여 가장 최적의 Pollard's Rho 알고리즘을 사용해 개인 키 privateKey를 브루트포스할 것입니다. 작동하는 알고리즘만 있다면 현대의 계산 성능으로 20분 안에 어떤 개인 키든 크랙할 수 있다는 것은 의심의 여지가 없습니다.

키젠이 올바른 개인 키를 브루트포스하는 작업을 마치면, 남은 작업은 실제로 키를 생성하는 일로 귀결됩니다. 바로 이 키젠이 수행하는 작업입니다. 더 나은 이해를 위해 이상적인 키젠의 흐름을 보여드리겠습니다. 취소선이 그어진 항목은 제 키젠이 구현하는 부분입니다:

  • BINK 리소스 추출
  • 타원 곡선 이산 로그 해법 브루트포스 (genOrder, privateKey)
  • 제품 키 처리 메커니즘
  • Windows XP 키 생성
  • Windows XP 키 검증
  • Windows Server 2003 키 생성

작동 원리

AAAAA-BBB-CCCCCCS-DDEEE 형식의 제품 ID를 생성하려면 무작위 Raw Product Key를 기준으로 사용해야 합니다.

제품 ID

DigitsMeaning
AAAAAOS 제품군 상수
BBB채널 ID
CCCCCC시퀀스 번호
S검증 숫자
DD공개 키 인덱스
EEE무작위 3자리 숫자

OS 제품군 상수 AAAAA는 Windows XP 시리즈마다 다릅니다. 예를 들어 SP3의 경우 76487입니다.

BBB 및 CCCCCC 섹션은 본질적으로 Raw Product Key를 인코딩합니다. 예를 들어 첫 번째 섹션이 XXX이고 두 번째 섹션이 YYYYYY이면 Raw Product Key는 XXX-YYYYYY로 인코딩됩니다.

검증 숫자 S는 모든 C 숫자의 합에 이 값을 더했을 때 7로 나누어떨어지도록 선택됩니다.

공개 키 인덱스 DD는 제품 키의 진위를 성공적으로 검증하는 데 사용된 공개 키가 무엇인지 알려줍니다. 예를 들어 Professional 키는 22, VLK 키는 23입니다.

무작위 숫자 EEE는 매번 다른 설치 ID를 생성하는 데 사용됩니다.

제품 키

제품 키 자체(RPK와 혼동하지 마세요)는 FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK 형식이며, I와 1, O와 0처럼 혼동하기 쉬운 문자를 제외하기 위해 알파벳 BCDFGHJKMPQRTVWXY2346789를 사용하는 Base-24로 인코딩됩니다.

알파벳 용량 공식에 따르면 키는 최대 114비트의 정보를 담을 수 있습니다. $$N = \log_2(24^{25}) \approx 114$$

이 계산을 바탕으로 114비트 제품 키를 4개의 순서 있는 세그먼트로 분해합니다:

SegmentCapacityData
Upgrade1비트업그레이드 버전 플래그
Serial30비트Raw Product Key (RPK)
Hash28비트RPK 해시
Signature55비트RPK 해시에 대한 타원 곡선 서명

단순화를 위해 Upgrade와 Serial 세그먼트를 Data라는 단일 세그먼트로 결합합니다. 이 논리에 따라 Data를 오른쪽으로 시프트하여 RPK를 추출하고, 비트를 왼쪽으로 시프트하여 다시 패킹할 수 있습니다. 제가 확인한 대부분의 유효한 제품 키는 Upgrade 비트가 1로 설정되어 있기 때문입니다.

Microsoft는 Windows Server 2003부터 백엔드 서버 인증 키를 포함하도록 제품 키 형식을 다시 설계했습니다. 이는 실제로 안전한 라이선스 검증 방식이었습니다. 사설 서버에서 어떤 검증 알고리즘을 사용했는지 누구도 추측할 수 없었기 때문입니다. 온라인 검증 메커니즘을 추가하는 것 외에도 전체 연산을 384비트에서 512비트로 높이고 서명 스칼라를 62비트 정보로 확장했습니다.

SegmentCapacityData
Upgrade1비트업그레이드 버전 플래그
Channel ID10비트RPK의 BBB 부분
Hash31비트RPK 해시
Signature62비트RPK 해시에 대한 타원 곡선 서명
Auth Key10비트백엔드 인증 값

하지만 온라인 정품 인증을 고려하지 않고 키를 생성하더라도 운영 체제 설치 과정을 통과할 수 있는 유효한 키를 생성할 수 있습니다. 그리고 코드가 정확히 그렇게 합니다. 무작위 10비트 인증 키를 생성하는 것입니다. 오늘날에는 활성화 서버가 내려갔고 Server 2003이 애브던웨어(abandonware)로 간주되므로 전혀 문제가 되지 않습니다. 이 프로젝트 전체가 불법 복제로 간주되어서도 안 되는 것과 같은 이유입니다.

타원 곡선

타원 곡선 암호(ECC, Elliptic Curve Cryptography)는 공개 키 암호 시스템의 한 유형입니다. 이 계열의 시스템은 풀기 어려운 '단방향' 수학 문제에 의존합니다. 한 방향으로는 계산하기 쉽지만 '반대' 방향으로는 풀기 어렵습니다. 이를 '트랩도어' 함수라고도 합니다. 빠지기는 쉽지만 빠져나오기는 어렵습니다.[5]

ECC는 다음 형태의 방정식을 푸는 데 의존합니다. $$y^2 = x^3 + ax + b$$

일반적으로 암호화에 사용되는 타원 곡선에는 F2m 및 Fp 의 두 가지 특수한 경우가 있습니다. 둘은 약간만 다릅니다. 두 곡선 모두 유한체 위에서 정의되며, Fp는 3보다 큰 소수 매개변수를 사용하고, F2m은 $p = 2m$을 가정합니다. Microsoft는 알고리즘에서 후자를 사용했습니다.

유한체 Fp 위의 타원 곡선은 다음으로 구성됩니다:

  • $0 \le x, y < p$를 만족하는 정수 좌표 ${x, y}$의 집합;
  • $y^2 = x^3 + ax + b \mod p$ 점들의 집합.

F17 위의 타원 곡선은 다음과 같습니다:

F17 Elliptic Curve

곡선은 위 이미지의 파란색 점들로 구성됩니다. 실제로 암호화에 사용되는 '타원 곡선'은 '정사각 행렬의 점 집합'입니다.

위 곡선은 '교육용'입니다. 키 길이가 매우 짧습니다(4-5비트). 실제 상황에서 개발자들은 일반적으로 256비트 이상의 곡선을 사용합니다.

BINK 리소스

공개 키 암호 시스템이기 때문에 Microsoft는 입력된 제품 키를 검증하기 위해 Windows XP 릴리스와 함께 공개 키를 공유해야 했습니다. 공개 키는 BINK 리소스 형태로 pidgen.dll 안에 저장되어 있습니다. 첫 번째 BINK 데이터 세트는 리테일 키를 검증하기 위한 것이고, 두 번째는 각각 OEM 키용입니다.

Windows 98 및 Windows XP용 BINK 리소스의 구조는 다음과 같습니다:

OffsetValue
0x0000BINK ID
0x0004BINKEY 구조체의 크기(바이트) (실제로는 항상 0x16C)
0x0008헤더 길이 (실제로는 항상 7)
0x000C체크섬
0x0010숫자 인코딩 날짜 - BINKEY 버전 (실제로는 항상 19980206)
0x0014ECC 곡선 차수 크기 (실제로는 항상 12)
0x0018해시 길이 (실제로는 항상 28)
0x001C서명 길이 (실제로는 항상 55)
0x0020유한체 차수 p
0x005C곡선 매개변수 a
0x0098곡선 매개변수 b
0x00D4기준점 x좌표 Gx
0x0110기준점 y좌표 Gy
0x014C공개 키 x좌표 Kx
0x0188공개 키 y좌표 Ky

각 세그먼트는 서로 다른 색상으로 표시되며, BINK 헤더 값은 동일합니다.

BINK

Windows Server 2003 및 Windows XP x64는 이를 다르게 구현합니다:

도구 다운로드