Время на прочтение
2 мин
Количество просмотров 14K
Энтузиасты изучили и модернизировали для удобства использования в настоящее время алгоритм активации Windows XP. Теперь для активации ОС не нужны серверы для проверки ключей от Microsoft, которые компания отключила несколько лет назад в рамках окончания поддержки старого ПО.
Windows XP вышла в октябре 2001 года. Microsoft прекратила расширенную поддержку операционной системы в апреле 2014 года.
Разработчики продолжают надеяться, что Microsoft всё же сочтёт целесообразным выпустить официальный инструмент активации XP для будущих поколений, так как даже техподдержка компании практикует удалённую активацию Windows на ПК клиента с помощью пиратских кряков и открытого проекта Microsoft Activation Scripts (MAS).
Исследователи смогли реализовать свою версию алгоритма для генерации валидных кодов активации для Windows XP без подключения к интернету через утилиту xp_activate32.exe. По их заверению, этот инструмент активации полностью автономен и безопасен, а также не является кряком. Он основан на методе активации по номеру телефона на основе имеющегося у пользователя лицензионного ключа. Алгоритм преобразует код, сгенерированный системой, в лицензионный ключ активации. При этом активация сохраняется при очистке или переустановке системы, поскольку она привязана к характеристикам определённого компьютера.
Файл утилиты (размер 18432 байт, SHA-256 хэш 5a4bcac5a50eb5113dd6a2f88c35ebdb709c4df8a792c71ad03ea347afaced52).
Существующие в сети другие активаторы Windows XP требуют подключения к интернету, взламывают или обманывают механизм проверки активации старой ОС.
Другой открытый проект WindowsXPKg на GitHub, может генерировать ключи для Windows XP, но требует связи с внешним сервером Microsoft для проверки, который больше не работает. Примечательно, что разработчик Neo-Desktop решил развивать далее форк WindowsXPKg, включить в этот инструмент исправление для компиляции и правильной работы под Linux, а также работает над дизассемблированием утилиты xp_activate32.exe.
В марте 2023 года пользователь научил ChatGPT генерировать ключи активации для ОС Windows 95. Прямой запрос к чат-боту по поводу генерации ключа Windows 95 привёл к отказу это сделать. ИИ предложил пользователю купить новую версию Windows 10/11. Пользователь уточнил свой запрос на основе открытых данных по поводу алгоритма для генерации кода ключа и смог получить несколько правильных ключей. Хотя ChatGPT ему отвечал ранее, что не обучен выполнять такие действия и разработчики крепко-накрепко запретили ему генерировать коды, ключи и другие элементы лицензий ПО для нелегального использования.
Продолжаем наши публикации на тему серийных номеров онлайн. В предыдущих статьях я делал парсер паролйей для нод32, генератор пароля nod4, внешние формы для 1Cv7, генератор купона Google — но в этот раз я решил раскопать исходники идеи генерации пароля Виндоуз для операционной системы Windows XP SP3 и сделать генератор онлайн. Конечно, это всё работает в тестовом режиме. Я не проверял подходят или не подходят номера — у меня не было возможности. Так же я хочу скачать что это лишь схожий алгорим и я не претендую на авторские права. Как написано у них: Ключ продукта (определяет уникальный номер копии виндоуз) Значит они тоже копируют? 🙂 Тем не менее представляю вам: Серийный номер для WindowsXP SP3 — генератор онлайн php! Также, исходный код генератора купона для Google (бесплатно) Исходник кода купона могу выслать сразу. Необходимо пожертвование на развитие интернет-проекта. Наш общий Webmoney на ДОБРОВОЛЬНОЕ Развитие интернет-проекта, вас никто не заставляет силком это делать. Я слишком занят, что бы вступать в переписку с вами. Код вы можете смело размещать на вашем сайте. В письме просьба указывать — за что вы пожертвовали некую сумму и ваш обратный адрес. Также, вам необходимо скачать обновление windowsxp-kb936929-sp3-x86-rus.exe – Service Pack 3 for Windows XP (RUS, 32bit) и установить его, после установки Windows XP. И так генерируем серийные номера для виндоуз:
Windows XP — одна из наиболее широко используемых операционных систем. Выпущен в октябре 1001 года и по-прежнему доступен для компьютеров, хотя официальная поддержка уже завершена, у него есть несколько версий и обновлений в виде Пакеты обновлений (SP1, SP2, SP3) которые позволяют пользователям легко и просто взаимодействовать со своими компьютерами, хотя должны быть включены для правильной работы.
L ‘ Активация Windows XP — это обязательный процесс, при котором Microsoft гарантирует, что пользователи заплатили за официальные лицензии на его использование. Процедура, которую вы должны выполнить, выбрав «да» или «да», введя пароль и выполнив серию шагов, которые обычно требуют подключения к Интернету или телефонного звонка. Если этого не сделать, система выйдет из строя, и с этим ничего нельзя будет поделать.
В этом руководстве мы объясним, как активировать Windows XP шаг за шагом . Мы дадим вам все необходимые указания и рекомендации, чтобы вы могли сделать это во всех его версиях, а также предоставим вам ключи и объясним, как узнать, есть ли у вас лицензионная установка или нет.
Шаги по активации Windows XP бесплатно всех версий (SP1, SP2, SP3)
Шаги по активации Windows XP бесплатно во всех ее версиях просты. Объясняем все ниже:
Из безопасного режима
- Включи свой компьютер, все время удерживая нажатой клавишу F8 .
- Когда появится меню «Пуск» Windows, выберите «Безопасный режим» или » Безопасный режим . Подождите, пока запустится операционная система.
- Оказавшись внутри, убедитесь, что у вас есть активное интернет-соединение, подключитесь к Wi-Fi или проводной сети, у вас дома.
- Если вы не встретите проблемы с пилотами или диспетчерами , перейдите к следующему пункту. В противном случае вам потребуется их отремонтировать:
- Щелкните правой кнопкой мыши значок «Рабочее место» ou «Команда» и в раскрывающемся меню выберите » Свойства .
- Теперь переходим к варианту «Диспетчер устройств» и нажмите на него.
- Посмотрите, какие значки имеют восклицательный знак или вопрос рядом с ним и запишите их.
- С другого компьютера перейдите в на сайт производителя и загрузите последние версии драйверов. Вам нужно зайти в раздел загрузки и убедиться, что они совместим с Windows XP .
- Скопируйте все, что загружено, в USB-накопитель или CD / DVD .
- Введите диск на компьютере, который хотите активировать Windows.
- Вернуться в » Диспетчер устройств «, Щелкните правой кнопкой мыши значок неисправного устройства и выберите «Обновить программное обеспечение драйвера» .
- Установите флажок, чтобы выбрать каталог .
- Теперь ищите файл «.inf» что соответствует устройству на съемный диск, который вы вставили . Пусть действует.
- Перезагрузите компьютер и вернитесь в безопасный режим.
- Откройте меню Пуск, нажав на его кнопку. . Затем перейдите к варианту «Все программы».
- Теперь наведите указатель мыши на Раздел «Аксессуары» и оттуда перейдите к » Системные инструменты ».
- В этом меню нажмите «Активировать Windows» для доступа к меню проверки.
- В появившемся окне вам будет предложено ввести ключ продукта. Если у вас подлинная копия Windows XP, просто введите 25-значный код поставляется в коробке. Нажмите кнопку, чтобы двигаться вперед.
- Когда вас спросят если вы хотите активировать Windows сейчас , щелкните по первому варианту: «Да, активировать Windows сейчас в Интернете».
- После этого, у вас будет два варианта чтобы решить, хотите вы зарегистрироваться или нет. Поскольку официальной поддержки системы нет, лучше нажать «Нет, я не хочу сейчас регистрироваться, просто активируйте Windows».
- Подождите немного, закройте окно и перезапустите. Ваша система уже активирована .
«ОБНОВЛЕНИЕ Вам нужно активировать и проверить свою версию Windows XP, но вы не знаете, как это сделать?» ⭐ ВОЙДИТЕ ЗДЕСЬ ⭐ и узнайте, как это сделать шаг за шагом с помощью этого ✅ ЛЕГКОГО и БЫСТРОГО РУКОВОДСТВА »
* Если у вас нет ключа продукта и вы хотите продлить пробный период, сделайте следующее в безопасном режиме:
- Нажмите кнопку Стартовое меню и в раскрывающемся меню выберите вариант «Выполнять» .
- В появившемся окне введите «Rundll32.exe syssetup, SetupOobeBnk» без кавычек. Нажмите ‘ принимать .
- Когда процесс будет завершен, перезагрузите компьютер, и у вас будет 30 дней бесплатной лицензии .
Подтвердите XP с телефона
- Включите ваш компьютер и пусть операционная система запустится по-прежнему.
- Введите свою учетную запись пользователя или у кого есть права администратора.
- Нажмите кнопку Стартовое меню , затем нажмите » Все программы «>» Аксессуары «и «Системные инструменты».
- Теперь выберите вариант «Активировать Windows» нажав на нее. Вы получите доступ к окну активации системы.
- На первом появившемся экране вам нужно будет ввести ключ продукта Windows XP. Скопируйте 25-значный код который вы получили вместе со своей копией системы для проверки лицензии, и нажмите кнопку, чтобы продолжить.
- Теперь выберите второй вариант: «Да, я хочу позвонить представителю службы поддержки клиентов, чтобы активировать Windows».
- На появившемся экране необходимо пройти по 3 этапам для завершения процесса проверки:
- Выберите в первом раскрывающемся меню местоположение наиболее подходящего для вашего местоположения (Испания), доступно множество бесплатных номеров.
- Позвоните по указанному бесплатному номеру и произнести 54-значный код указано рядом с » шаг 3 .
- Прослушайте и запишите 35 цифр, которые вы услышите в телефоне. после ввода идентификатора на предыдущем шаге. С их помощью вы заполняете 7 полей, которые находятся в » шаг 4 ». Когда закончите, нажмите » следующая ».
- Вы уже проверили Windows XP по телефону! .
Если срок действия Windows XP истек и произошел сбой, вам необходимо выполнить ряд шагов, чтобы получить доступ к ней и активировать ее. Здесь мы все объясняем:
- Включите компьютер нажатие клавиши F8 . Это позволит получить доступ к меню загрузки системы.
- Выберите вариант «Безопасный режим» и нажмите клавиша ввода для доступа к этой версии операционной системы.
- Оказавшись внутри, на рабочем столе щелкните меню Пуск, а затем щелкните «Выполнять».
- В этом всплывающем окне введите команду «Rundll32.exe syssetup, SetupOobeBnk» . Нажмите ‘ принимать .
- Перезагрузитесь и вернитесь в безопасный режим как объяснялось ранее. Вы сбросили временную активацию.
- Теперь вернись к окну «Выполнять» как мы объясняли ранее.
- Введите команду следующий в записи пустое поле:
%systemroot%/system32/oobe/msoobe.exe /a
. Нажмите на » OK ». - Откроется окно активации. Установите флажок » Да, я хочу позвонить представителю службы поддержки клиентов, чтобы активировать Windows «И нажмите» следующая ».
- После этого забудьте все поля и нажмите кнопку внизу с текстом «Сменить ключ продукта».
- Теперь у вас будет поле «Новый пароль» перед тобой . Напишите один из этих ключей активации:
- B77QF-DP27W-4H68R-72B48-78RPD
- ТХМПВ-77D6F-94376-8HGKG-VRDRQ
- V2C47-MK7JD-3R89F-D2KXW-VPK3J
- DHXQ2-WRGCD-WGYJY-HHYDH-KKX9B
- Cliquez-сюр- «Обновлять» и вы измените пароль.
- Следующее, что вам нужно сделать, это активировать . Вы можете выполнить действия, описанные в предыдущем разделе » Подтвердить по телефону .
Как проверить, активирована ли Windows XP Professional?
Если вы хотите проверить, активирована ли Windows XP Professional, выполните следующие действия (действительно для всех версий):
- Войдите в Windows XP по-прежнему.
- Нажмите на кнопку » Démarrer »И в раскрывающемся меню нажмите «Выполнять».
- Во всплывающем окне введите следующую команду:
%systemroot%/system32/oobe/msoobe.exe /a
- В появившемся окне если ваша версия зарегистрирована и активна, это будет указано . В противном случае вам будет предложено ввести ключ продукта и активировать систему.
Если у вас есть какие-либо вопросы, оставляйте их в комментариях, мы свяжемся с вами как можно скорее, и это будет большим подспорьем для большего числа участников сообщества. Je Vous remercie!
Перейти к содержанию
На чтение 3 мин Опубликовано Обновлено
Windows XP — одна из самых популярных операционных систем, которую до сих пор используют многие пользователи. Однако, активация Windows XP может стать настоящей головной болью для некоторых пользователей. Несмотря на то, что поддержка данной операционной системы завершена, многие до сих пор предпочитают использовать ее на своих компьютерах.
Активация Windows XP по телефону — надежный способ продлить период работы системы без необходимости покупать новую лицензию. Для этого необходимо ввести особый код подтверждения, который генерируется по телефону. Однако, процесс активации может быть сложным и вызвать затруднения у пользователей.
Чтобы облегчить процесс активации Windows XP, можно воспользоваться специальным генератором кода подтверждения. Этот инструмент поможет пользователям получить уникальный код, который будет использоваться при активации системы. Генератор кода подтверждения позволяет избежать ошибок вручную вводимого кода, а также облегчает весь процесс активации.
Как активировать Windows XP по телефону
Для активации Windows XP по телефону вам понадобятся следующие шаги:
- Откройте «Меню Пуск» и выберите пункт «Активация Windows».
- В появившемся окне выберите «Да, хочу активировать Windows по телефону» и нажмите кнопку «Далее».
- Выберите страну, в которой вы находитесь, и затем выберите номер телефона активации для вашего региона.
- Запишите отображаемый на экране идентификационный номер.
- Позвоните по выбранному номеру телефона активации.
- Сообщите оператору ваш идентификационный номер.
- Оператор предоставит вам код подтверждения активации.
- Введите полученный код в соответствующее поле на экране активации Windows XP.
- Нажмите кнопку «Готово», чтобы завершить процесс активации.
После успешной активации Windows XP ваша операционная система будет полностью активирована и вы сможете использовать ее без ограничений. В случае необходимости вы всегда можете повторить процесс активации.
Генератор кода подтверждения
Для активации Windows XP по телефону вам потребуется сгенерировать код подтверждения. Для этого вам потребуется следовать простым шагам:
- Откройте пункт меню «Пуск» на рабочем столе и выберите «Активация Windows».
- Откроется окно с предложением активации по телефону. Нажмите на кнопку «Активировать по телефону».
- Следуйте инструкциям, предоставленным на экране, позвонив по указанному номеру сервисного центра.
- Во время разговора с оператором сервисного центра, вам будет предоставлен код установки.
- Введите код установки в соответствующее поле в окне активации Windows XP.
- Сгенерируйте код подтверждения, следуя инструкциям оператора. Вам будет предоставлен код подтверждения.
- Введите код подтверждения в соответствующее поле в окне активации Windows XP.
- Нажмите на кнопку «Далее» и дождитесь завершения процесса активации.
После успешной генерации и ввода кода подтверждения, Windows XP будет активирована на вашем компьютере. Процедура активации по телефону позволяет легально использовать операционную систему и получить доступ ко всем ее функциям.
XPKeygen
A Windows XP / Windows Server 2003 VLK key generator. This tool allows you to generate valid Windows XP keys based on the Raw Product Key, which can be random.
The Raw Product Key (RPK) is supplied in form of 9 digits XXX-YYYYYY
and is only necessary to generate a Windows XP Key.
Download
Head over to the Releases tab and download the latest version from there.
The problem
In general, the only thing that separates us from generating valid Windows XP keys for EVERY EDITION and EVERY BUILD is the lack of respective private keys generated from their public counterparts inside pidgen.dll
. There’s no code for the elliptic curve discrete logarithm function widely available online, there’s only vague information on how to do it.
As time went on, the problem has been partially solved.
The BINK resource was not encoded in any way and the data was just sequentially written to the resource. sk00ter also fully explained the BINK format on the MDL forums.
Utilizing prior community knowledge on the subject, I wrote a BINK Reader in Python 3. The file is public in this repository, click here to view the source code.
The discrete logarithm solution is the most unexplored area of research as of May 28th, 2023. However, my friend nephacks did find that elusive tool to solve that difficult problem in the darkest corners of the internet.
It’s called ECDLP (Elliptic Curve Discrete Logarithm Problem) Solver by Mr. HAANDI. Since it was extremely frustrating to find online, I did reupload it on my website. You can download the tool here.
The ReadMe file that comes with the version 0.2a of the solver is good enough by itself, so anyone with a brain will be able to set that tool up. However, it’s not open-source, so integrating it into my keygen is proven impossible.
In the ideal scenario, the keygen would ask you for a BINK-resource extracted from pidgen.dll
, which it would then unpack into the following segments:
- Public key (
pubX
;pubY
) - Generator (
genX
;genY
) - Base point (
a
;b
) - Point count
p
Knowing these segments, the keygen would bruteforce the geneator order genOrder
using Schoof’s algorithm followed by the private key privateKey
, leveraging the calculated genOrder
to use the most optimal Pollard’s Rho algorithm. There’s no doubt we can crack any private key in a matter of 20 minutes using modern computational power, provided we have the working algorithm.
Once the keygen finishes bruteforcing the correct private key, the task boils down to actually generating a key, which this keygen does.
To give you a better perspective, I can provide you with the flow of the ideal keygen. Crossed out is what my keygen implements:
- BINK resource extraction
- Bruteforce Elliptic Curve discrete logarithm solution (
genOrder
,privateKey
) - Product Key processing mechanism
- Windows XP key generation
- Windows XP key validation
- Windows Server 2003 key generation
Principle of operation
We need to use a random Raw Product Key as a base to generate a Product ID in a form of AAAAA-BBB-CCCCCCS-DDEEE
.
Product ID
Digits | Meaning |
---|---|
AAAAA | OS Family constant |
BBB | Channel ID |
CCCCCC | Sequence Number |
S | Check digit |
DD | Public key index |
EEE | Random 3-digit number |
The OS Family constant AAAAA
is different for each series of Windows XP. For example, it is 76487 for SP3.
The BBB
and CCCCCC
sections essentially encode the Raw Product Key. For example, if the first section is equal to XXX
and the second section is equal to YYYYYY
, the Raw Product Key will be encoded as XXX-YYYYYY
.
The check digit S
is picked so that the sum of all C
digits with it added makes a number divisible by 7.
The public key index DD
lets us know which public key was used to successfully verify the authenticity of our Product Key.
For example, it’s 22
for Professional keys and 23
for VLK keys.
A random number EEE
is used to generate a different Installation ID each time.
Product Key
The Product Key itself (not to confuse with the RPK) is in form FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK
, encoded in Base-24 with
the alphabet BCDFGHJKMPQRTVWXY2346789
to exclude any characters that can be easily confused, like I
and 1
or O
and 0
.
As per the alphabet capacity formula, the key can at most contain 114 bits of information.
$$N = \log_2(24^{25}) \approx 114$$
Based on that calculation, we unpack the 114-bit Product Key into 4 ordered segments:
Segment | Capacity | Data |
---|---|---|
Upgrade | 1 bit | Upgrade version flag |
Serial | 30 bits | Raw Product Key (RPK) |
Hash | 28 bits | RPK hash |
Signature | 55 bits | Elliptic Curve signature for the RPK hash |
For simplicity’ sake, we’ll combine Upgrade
and Serial
segments into a single segment called Data
. By that logic we’ll be able to extract the RPK by
shifting Data
right and pack it back by shifting bits left, because most a priori valid product keys I’ve checked had the Upgrade bit set to 1.
Microsoft redid their Product Key format with Windows Server 2003 to include a backend server authentication key, which was an actually secure approach to
license validation, as no one could ever make a guess on which validation algorithm they had employed on their private server. Besides adding the online
validation mechanism, they also cranked up the overall arithmetic from 384 to 512 bits, and the signature scalar to 62 bits of information.
Segment | Capacity | Data |
---|---|---|
Upgrade | 1 bit | Upgrade version flag |
Channel ID | 10 bits | The BBB part of the RPK |
Hash | 31 bits | RPK hash |
Signature | 62 bits | Elliptic Curve signature for the RPK hash |
Auth Key | 10 bits | Backend authentication value |
However, if we generated a key without the online activation in mind, we still could generate valid keys that would let us through the setup of the operating system.
And that’s exactly what the code does — it generates a random 10-bit authentication key. Nowadays it doesn’t matter at all, as activation servers are down and
Server 2003 is considered abandonware, the same way this entire project shouldn’t be considered piracy.
Elliptic Curves
Elliptic Curve Cryptography (ECC) is a type of public-key cryptographic system.
This class of systems relies on challenging «one-way» math problems — easy to compute one way and intractable to solve the «other» way.
Sometimes these are called «trapdoor» functions — easy to fall into, complicated to escape.[5]
ECC relies on solving equations of the form
$$y^2 = x^3 + ax + b$$
In general, there are 2 special cases for the Elliptic Curve leveraged in cryptography — F2m and Fp.
They differ only slightly. Both curves are defined over the finite field, Fp uses a prime parameter that’s larger than 3,
F2m assumes $p = 2m$. Microsoft used the latter in their algorithm.
An elliptic curve over the finite field Fp consists of:
- a set of integer coordinates ${x, y}$, such that $0 \le x, y < p$;
- a set of points $y^2 = x^3 + ax + b \mod p$.
An elliptic curve over F17 would look like this:
The curve consists of the blue points in above image. In practice the «elliptic curves»
used in cryptography are «sets of points in a square matrix».
The above curve is «educational». It provides very small key length (4-5 bits).
In real world situations developers typically use curves of 256-bits or more.
BINK resource
Since it is a public-key cryptographic system, Microsoft had to share the public key with their Windows XP release to check entered product keys against.
It is stored within pidgen.dll
in a form of a BINK resource. The first set of BINK data is there to validate retail keys, the second is for the
OEM keys respectively.
The structure of the BINK resource for Windows 98 and Windows XP is as follows:
Offset | Value |
---|---|
0x0000 |
BINK ID |
0x0004 |
Size of BINKEY structure in bytes (always 0x16C in practice) |
0x0008 |
Header length (always 7 in practice) |
0x000C |
Checksum |
0x0010 |
Number-encoded date — BINKEY version (always 19980206 in practice) |
0x0014 |
ECC curve order size (always 12 in practice) |
0x0018 |
Hash length (always 28 in practice) |
0x001C |
Signature length (always 55 in practice) |
0x0020 |
Finite Field Order p |
0x005C |
Curve Parameter a |
0x0098 |
Curve Parameter b |
0x00D4 |
Base Point x-coordinate Gx |
0x0110 |
Base Point y-coordinate Gy |
0x014C |
Public Key x-coordinate Kx |
0x0188 |
Public Key y-coordinate Ky |
Each segment is marked with a different color, the BINK header values are the same.
Windows Server 2003 and Windows XP x64 implement it differently:
Offset | Value |
---|---|
0x0000 |
BINK ID |
0x0004 |
Size of BINKEY structure in bytes |
0x0008 |
Header length (always 9 in practice) |
0x000C |
Checksum |
0x0010 |
Number-encoded date — BINKEY version (always 20020420 in practice) |
0x0014 |
ECC curve order size (always 16 in practice) |
0x0018 |
Hash length (always 31 in practice) |
0x001C |
Signature length (always 62 in practice) |
0x0020 |
Backend authentication value length (always 12 in practice) |
0x0024 |
Product ID length (always 20 in practice) |
0x0028 |
Finite Field Order p |
0x0068 |
Curve Parameter a |
0x00A8 |
Curve Parameter b |
0x00E8 |
Base Point x-coordinate Gx |
0x0128 |
Base Point y-coordinate Gy |
0x0168 |
Public Key x-coordinate Kx |
0x01A8 |
Public Key y-coordinate Ky |
And here are my structure prototypes made for the BINK Reader in C:
typedef struct _EC_BYTE_POINT { CHAR x[256]; // x-coordinate of the point on the elliptic curve. CHAR y[256]; // y-coordinate of the point on the elliptic curve. } EC_BYTE_POINT; typedef struct _BINKHDR { // BINK version - not stored in the resource. ULONG32 dwVersion; // Original BINK header. ULONG32 dwID; ULONG32 dwSize; ULONG32 dwHeaderLength; ULONG32 dwChecksum; ULONG32 dwDate; ULONG32 dwKeySizeInDWORDs; ULONG32 dwHashLength; ULONG32 dwSignatureLength; // Extended BINK header. (Windows Server 2003+) ULONG32 dwAuthCodeLength; ULONG32 dwProductIDLength; } BINKHDR; typedef struct _BINKDATA { CHAR p[256]; // Finite Field order p. CHAR a[256]; // Elliptic Curve parameter a. CHAR b[256]; // Elliptic Curve parameter b. EC_BYTE_POINT G; // Base point (Generator) G. EC_BYTE_POINT K; // Public key K. } BINKDATA; typedef struct _BINKEY { BINKHDR header; BINKDATA data; } BINKEY;
In case you want to explore further, the source code of pidgen.dll
and all its functions is available within this repository, in the «pidgen» folder.
Reversing the private key
If we want to generate valid product keys for Windows XP, we must compute the corresponding private key using the public key supplied with pidgen.dll
,
which means we have to reverse-solve the one-way ECC task.
Judging by the key located in BINK, the curve order is 384 bits long in Windows XP and 512 bits long in Server 2003 / XP x64 respectively.
The computation difficulty using the most efficient Pollard’s Rho algorithm with asymptotic complexity $O(\sqrt{n})$ would be at least $O(2^{168})$ for Windows XP, and $O(2^{256})$ for Windows Server 2003, but lucky for us,
Microsoft limited the value of the signature to 55 bits in Windows XP and 62 bits in Windows Server 2003 in order to reduce the amount of matching product keys, reducing the difficulty to a far more manageable $O(2^{28})$ / $O(2^{31})$.
As mentioned before, there’s only one public tool that satisfies our current needs, which is the ECDLP solver by Mr. HAANDI.
To compute the private key, we will need to supply the tool with the public ECC values located in the BINK resource, as well as the order genOrder
of the base point G(Gx; Gy)
.
The order of the base point can be computed using SageMath.
Here’s the basic algorithm I used to reverse the Windows 98 private key:
- Compute the order of the base point using SageMath. In SageMath, execute the following commands:
E = EllipticCurve(GF(p), [0, 0, 0, a, b])
, wherep
,a
andb
are decimally represented elliptic curve parameters from the BINK resource.G = E(Gx, Gy)
, whereGx
andGy
are decimally represented base point coordinates from the BINK resource.K = E(Kx, Ky)
, whereKx
andKy
are decimally represented public key coordinates from the BINK resource.n = G.order()
,n
will be the computed order of the base point. It may take some time to compute, even on the newest builds.- Factor the order using
factor(n)
. Microsoft used prime numbers for the point orders, so if it returns the number itself, it’s completely normal. - Save the resulting factors of the order somewhere.
-K
will give you the inverse of the public key in a projective plane with coordinates(x : y : z)
. Save they
coordinate somewhere, it is required to generate a correct private key.
- Compute the private key using ECDLP Solver v0.2a.
- The tool comes with a template job
job_template.txt
and a ReadMe file. It’s necessary to understand how the tool works to use it. - Insert all public elliptic curve values from the BINK resource, except the
Ky
coordinate. To generate a correct private key, you must use the inverse coordinate-Ky
you have calculated in SageMath earlier. - Insert the factors of the base point order
n
and specify the factor count. It will very likely be1
, as Microsoft mainly uses primes for their generator orders. - Run the tool
<arch> ECDLP Solver.exe <job_name>.txt
and wait until it calculates the private keyk = %d
for you.
- The tool comes with a template job
Here’s an example of the Windows XP job job_xp.txt
that yields the correct private key for the ECDLP Solver.
GF := GF(22604814143135632990679956684344311209819952803216271952472204855524756275151440456421260165232069708317717961315241); E := EllipticCurve([GF|1,0]); G := E![10910744922206512781156913169071750153028386884676208947062808346072531411270489432930252839559606812441712224597826,19170993669917204517491618000619818679152109690172641868349612889930480365274675096509477191800826190959228181870174]; K := E![14399230353963643339712940015954061581064239835926823517419716769613937039346822269422480779920783799484349086780408,17120082747148185997450361756610881166187863099877353630300913555824935802439591336620545428308962346299700128114607]; /* FactorCount:=1; 61760995553426173 */
And the ECDLP Solver output for it:
Important note:
Be wary that I could not generate a correct Windows XP x64 key using the private key I’ve reversed, even using the Ky
coordinate instead of usual -Ky
.
For some reason, I also failed to calculate the Windows Server 2003 base point order using SageMath. I gave it 12 hours to compute on my i7-12700K, but it was still stuck calculating.
Validating / generating product keys
The rest of the job is done within the code of this keygen.
Known issues
- Some keys aren’t valid, but it’s generally a less common occurrence. About 2 in 3 of the keys should work.
Fixed in v1.2. Prior versions generated a valid key with an exact chance of0x40000/0x62A32
, which resulted in exactly
0.64884
, or about 65%. My «2 in 3» estimate was inconceivably accurate. - Tested on multiple Windows XP setups. Works on Professional x86, all service packs. Other Windows editions may not work. x64 DOES NOT WORK.
- Server 2003 key generation not included yet.
Fixed in v2.2. - Some Windows XP VLK keys tend to be «worse» than others. Some of them may trigger a broken WPA with an empty Installation ID after install.
You have the best chances generating «better» keys with theBBB
section set to640
and theCCCCCC
section not zero. - Windows Server 2003 key generation is broken. I’m not sure where to even start there. The keys don’t appear to be valid anywhere,
but the algorithm is well-documented. The implementation in my case generates about 1 in 3 «valid» keys.
Fixed in v2.3*.
Literature
I will add more decent reads into the bibliography in later releases.
Understanding basics of Windows XP Activation:
- [1] Inside Windows Product Activation — Fully Licensed
- [2] MSKey 4-in-1 ReadMe
- [3] Windows序列号产生原理(椭圆曲线法)
Understanding Elliptic Curve Cryptography:
- [4] Elliptic Curve Cryptography for Beginners — Matt Rickard
- [5] Elliptic Curve Cryptography (ECC) — Practical Cryptography for Developers
- [6] A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography — Cloudflare
Public discussions:
- [7] Windows 98 Equivalent // Server 2003 Algorithm
- [8] Cracking Windows XP
Contributing / Usage
If you’re going to showcase or fork this software, please credit Endermanch, z22 and MSKey.
Feel free to modify it to your liking, as long as you keep it open-source. Licensed under GNU General Public License v3.0.
Any contributions or questions welcome.