
Windows XP Keygen
Генератор VLK-ключей для Windows XP / Windows Server 2003. Этот инструмент позволяет генерировать валидные ключи Windows XP на основе исходного ключа продукта, который может быть случайным.
Исходный ключ продукта (Raw Product Key, RPK) задаётся в виде 9 цифр XXX-YYYYYY и необходим только для генерации ключа Windows XP.

Перейдите на вкладку Releases и загрузите оттуда последнюю версию.
Этот проект не мёртв — я сделаю всё возможное, чтобы довести его до ума.
В общем, единственное, что отделяет нас от генерации валидных ключей Windows XP для КАЖДОЙ ВЕРСИИ и КАЖДОЙ СБОРКИ, — это отсутствие соответствующих закрытых ключей, полученных из их открытых аналогов внутри pidgen.dll. В интернете нет широко доступного кода для функции дискретного логарифмирования на эллиптической кривой, есть только расплывчатая информация о том, как это сделать.
Со временем проблема была частично решена.
Ресурс BINK не был никак закодирован, данные просто последовательно записывались в ресурс. sk00ter также полностью объяснил формат BINK на форумах MDL. Используя предыдущие знания сообщества по этой теме, я написал BINK Reader на Python 3. Файл находится в открытом доступе в этом репозитории, нажмите здесь, чтобы посмотреть исходный код.
Решение задачи дискретного логарифма — самая неизученная область исследований по состоянию на 28 мая 2023 года. Однако мой друг nephacks всё же нашёл тот неуловимый инструмент для решения этой сложной проблемы в самых тёмных уголках интернета. Он называется ECDLP (Elliptic Curve Discrete Logarithm Problem) Solver от Mr. HAANDI. Поскольку найти его в сети было крайне сложно, я перезалил его на свой сайт. Вы можете скачать инструмент здесь.
Файл ReadMe, который идёт с версией 0.2a солвера, сам по себе достаточно хорош, так что любой, у кого есть мозги, сможет настроить этот инструмент. Однако он не является открытым исходным кодом, поэтому интегрировать его в мой keygen оказалось невозможным.
В идеальном сценарии keygen запрашивал бы у вас ресурс BINK, извлечённый из pidgen.dll, а затем разворачивал бы его в следующие сегменты:
pubX; pubY)genX; genY)a; b)pЗная эти сегменты, keygen подбирал бы порядок генератора genOrder с помощью алгоритма Шуфа, а затем закрытый ключ privateKey, используя вычисленный genOrder для применения наиболее оптимального алгоритма Полларда (Pollard's Rho). Нет сомнений, что при наличии рабочего алгоритма мы сможем взломать любой закрытый ключ за 20 минут на современных вычислительных мощностях.
Как только keygen завершает подбор правильного закрытого ключа, задача сводится к фактической генерации ключа, что этот keygen и делает. Чтобы дать вам лучшее представление, я могу показать поток работы идеального keygen. Зачёркнуто то, что реализовано в моём keygen:
genOrder, privateKey)Нам нужно использовать случайный исходный ключ продукта как основу для генерации идентификатора продукта вида AAAAA-BBB-CCCCCCS-DDEEE.
| Цифры | Значение |
|---|---|
| AAAAA | Константа семейства ОС |
| BBB | Идентификатор канала |
| CCCCCC | Порядковый номер |
| S | Контрольная цифра |
| DD | Индекс открытого ключа |
| EEE | Случайное трёхзначное число |
Константа семейства ОС AAAAA отличается для каждой серии Windows XP. Например, для SP3 она равна 76487.
Разделы BBB и CCCCCC по сути кодируют исходный ключ продукта. Например, если первый раздел равен XXX, а второй — YYYYYY, исходный ключ продукта будет закодирован как XXX-YYYYYY.
Контрольная цифра S выбирается так, чтобы сумма всех цифр C с добавлением этой цифры была числом, кратным 7.
Индекс открытого ключа DD позволяет узнать, какой открытый ключ был использован для успешной проверки подлинности нашего ключа продукта.
Например, для ключей Professional это 22, а для ключей VLK — 23.
Случайное число EEE используется для генерации другого идентификатора установки каждый раз.
Сам ключ продукта (не путать с RPK) имеет вид FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK и кодируется в Base-24 с
алфавитом BCDFGHJKMPQRTVWXY2346789, чтобы исключить любые легко путаемые символы, такие как I и 1 или O и 0.
Согласно формуле ёмкости алфавита, ключ может содержать максимум 114 бит информации. $$N = \log_2(24^{25}) \approx 114$$
Исходя из этого расчёта, мы разворачиваем 114-битный ключ продукта в 4 упорядоченных сегмента:
| Сегмент | Ёмкость | Данные |
|---|---|---|
| Upgrade | 1 бит | Флаг версии обновления |
| Serial | 30 бит | Исходный ключ продукта (RPK) |
| Hash | 28 бит | Хэш RPK |
| Signature | 55 бит | Подпись на эллиптической кривой для хэша RPK |
Для простоты мы объединим сегменты Upgrade и Serial в один сегмент под названием Data. По такой логике мы сможем извлечь RPK, сдвигая Data вправо, и упаковать его обратно, сдвигая биты влево, потому что у большинства априори валидных ключей продукта, которые я проверял, бит Upgrade был установлен в 1.
Microsoft переделала формат ключа продукта в Windows Server 2003, добавив серверный ключ аутентификации бэкенда, что было действительно безопасным подходом к проверке лицензий, поскольку никто не мог даже предположить, какой алгоритм проверки они использовали на своём частном сервере. Помимо добавления онлайн-механизма проверки, они также увеличили общую арифметику с 384 до 512 бит, а скаляр подписи — до 62 бит информации.
| Сегмент | Ёмкость | Данные |
|---|---|---|
| Upgrade | 1 бит | Флаг версии обновления |
| Channel ID | 10 бит | Часть BBB из RPK |
| Hash | 31 бит | Хэш RPK |
| Signature | 62 бита | Подпись на эллиптической кривой для хэша RPK |
| Auth Key | 10 бит | Значение серверной аутентификации |
Однако, если бы мы генерировали ключ без учёта онлайн-активации, мы всё равно могли бы создавать валидные ключи, которые позволили бы пройти установку операционной системы. И именно это делает код — он генерирует случайный 10-битный ключ аутентификации. Сегодня это вообще не имеет значения, так как серверы активации отключены, а Server 2003 считается abandonware, точно так же, как весь этот проект не следует считать пиратством.
Эллиптическая криптография (ECC) — это тип систем с открытым ключом. Этот класс систем опирается на сложные "односторонние" математические задачи — легко вычислить в одну сторону и практически невозможно решить в "другую". Иногда их называют "лазейками" (trapdoor) — легко попасть, сложно выбраться.[5]
ECC основана на решении уравнений вида $$y^2 = x^3 + ax + b$$