Как создать keygen?
От: DIMEDROLL Украина  
Дата: 13.08.07 11:19
Оценка:
Можно ли имея несколько ключей в виде:
H9CG-JZWY-JBCB-S3DN-X9VN
KGMF-5MCJ-M67J-7PC3-W9PA

создать генератор ( keygen ), который бы мог генерировать ключи которые бы читались той программой которая их принимает?
Re: Как создать keygen?
От: Xander Zerge Россия www.zerge.com
Дата: 13.08.07 11:42
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Можно ли имея несколько ключей в виде:

DIM>H9CG-JZWY-JBCB-S3DN-X9VN
DIM>KGMF-5MCJ-M67J-7PC3-W9PA

DIM>создать генератор ( keygen ), который бы мог генерировать ключи которые бы читались той программой которая их принимает?


Вопрос на вынос мозга. Может наоборот, чтоб принимались программой, которая их читает?

Теоретически — да. Практически — вряд ли, если крипто в программе правильное, конечно же.

Представьте свою задачку так — есть тыща имён. Известны те, которые программа принимает — Пётр, Екатерина, Александр, Николай.
Можно ли сделать генератор, который из той тыщи ещё несколько имён выберет, которые будут приняты?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[2]: Как создать keygen?
От: DIMEDROLL Украина  
Дата: 13.08.07 11:49
Оценка:
XZ>Вопрос на вынос мозга. Может наоборот, чтоб принимались программой, которая их читает?

XZ>Теоретически — да. Практически — вряд ли, если крипто в программе правильное, конечно же.


XZ>Представьте свою задачку так — есть тыща имён. Известны те, которые программа принимает — Пётр, Екатерина, Александр, Николай.

XZ>Можно ли сделать генератор, который из той тыщи ещё несколько имён выберет, которые будут приняты?

Как же их делают то? Дисассемблируют екзешники? А если екзешника нету, как тогда?)
Re[3]: Как создать keygen?
От: hmmr  
Дата: 13.08.07 12:18
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Как же их делают то? Дисассемблируют екзешники? А если екзешника нету, как тогда?)


Чтобы сделать генератор будет вполне достаточно определить на основе каких параметров и каким алгоритмом(ами) обрабатывается информация для получения ключа. Про то как найти необходимые данные для генерации ключей уже другое дело... Можно подсмотреть логику, проверить не используются ли стандартные криптографические алгоритмы и пр. Если используются ассиметричные алгоритмы шифрования (rsa, эллиптические кривые, етк), то дело обстоит на порядок сложнее.
Re[3]: Как создать keygen?
От: Xander Zerge Россия www.zerge.com
Дата: 13.08.07 12:19
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Как же их делают то? Дисассемблируют екзешники? А если екзешника нету, как тогда?)


Кто делает? Кул-хацкеры, что ли? Кейген можно сделать, воспользовавшись слабостью защиты. При элементарно грамотном использовании криптографии с асимметричными ключами, типа RSA, для создания кейгена необходимо знать закрытую часть ключа, которой в программном коде попросту нет — она только у разработчика и его агентов, которым доверено генерировать ключи. В том и прелесть вся схемы — для подписывания серийного номера (собранного с железа, например) используется ключ разработчика, а для проверки подписи на машине пользователя используется другой, зашитый в программу. Оба ключа связаны, но найти закрытый ключ по открытому практически невозможно, только перебором.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[2]: Как создать keygen?
От: ASX  
Дата: 13.08.07 12:59
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Вопрос на вынос мозга.


Чего на вынос. Юный кулцхацкер спрашивает
Re: Как создать keygen?
От: AntZ  
Дата: 13.08.07 14:07
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Можно ли имея несколько ключей в виде:

DIM>H9CG-JZWY-JBCB-S3DN-X9VN
DIM>KGMF-5MCJ-M67J-7PC3-W9PA

DIM>создать генератор ( keygen ), который бы мог генерировать ключи которые бы читались той программой которая их принимает?


Можно, если генератор писал, извиняюсь за выражение, "лох". Я могу дать Вам алгоритм генерации ключей и миллион ключей сгеренерированных этим алгоритмом — восстановите параметры алгоритма

Например md5( md5(UserID ^ MAGIC_UINT32_1) ^ MAGIC_UINT32_2 )

Ключ генерится на базе UserID и параметризуется двумя 32-битными константами. Я могу миллион ключей нагенерить, Вы все равно не решите задачу Preimage для MD5 — найти такой x, md5 от которого равен заданному значению — не сможете найти MAGIC_UINT32_1 и MAGIC_UINT32_2 ни в жизнь. Перебор будет 2^64, что равно половине количества зерна на шахматной доске, если на первый квадрат потожить одно зернышко, на второй два, на третий четыре и т.д.

Алгоритм может быть выдран только путем взлома программы.
Re[2]: Как создать keygen?
От: Xander Zerge Россия www.zerge.com
Дата: 13.08.07 14:25
Оценка:
Здравствуйте, AntZ, Вы писали:

AZ>Например md5( md5(UserID ^ MAGIC_UINT32_1) ^ MAGIC_UINT32_2 )


AZ>Алгоритм может быть выдран только путем взлома программы.

Вот такая защита и называется лоховской, когда путём взлома программы делается кейген. Ей же надо ещё проверять правильность подписи, а значит, держать в коде эти мейджики.

А вот если условие проверки выглядит как " decode( encode( UserID, KEY_PRIV ), KEY_PUB ) == UserID ", то программе надо знать только KEY_PUB, чтобы удостовериться, что сгенерённый ключ соответствует UserID. А KEY_PRIV, используемый для генерации ключа по UserID, должен находиться только у продавца. Дело техники — алгоритмы подготовки пар ключей KEY_PRIV/KEY_PUB, кодирования и декодирования, сила которых в том, чтобы зная KEY_PUB, подобрать к нему соответствующий KEY_PRIV можно было только перебором, который побеждается разрядностью.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[3]: Как создать keygen?
От: retalik www.airbandits.com/
Дата: 13.08.07 15:10
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Дело техники — алгоритмы подготовки пар ключей KEY_PRIV/KEY_PUB, кодирования и декодирования, сила которых в том, чтобы зная KEY_PUB, подобрать к нему соответствующий KEY_PRIV можно было только перебором, который побеждается разрядностью.


Ты это теоретизируешь или готов поделиться ссылкой на библиотеку, которая может шифровать закрытым ключом, а расшифровывать открытым?
Успехов,
Виталий.
Re[4]: Как создать keygen?
От: Cyberax Марс  
Дата: 13.08.07 15:14
Оценка:
Здравствуйте, retalik, Вы писали:

XZ>>Дело техники — алгоритмы подготовки пар ключей KEY_PRIV/KEY_PUB, кодирования и декодирования, сила которых в том, чтобы зная KEY_PUB, подобрать к нему соответствующий KEY_PRIV можно было только перебором, который побеждается разрядностью.

R>Ты это теоретизируешь или готов поделиться ссылкой на библиотеку, которая может шифровать закрытым ключом, а расшифровывать открытым?
Эээ... А какие тут проблемы? Достаточно взять любую библиотеку, умеющую подписывать строки с помощью RSA-сертификатов.
Sapienti sat!
Re[4]: Как создать keygen?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.08.07 15:19
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Кто делает? Кул-хацкеры, что ли? Кейген можно сделать, воспользовавшись слабостью защиты. При элементарно грамотном использовании криптографии с асимметричными ключами, типа RSA, для создания кейгена необходимо знать закрытую часть ключа, которой в программном коде попросту нет — она только у разработчика и его агентов, которым доверено генерировать ключи. В том и прелесть вся схемы — для подписывания серийного номера (собранного с железа, например) используется ключ разработчика, а для проверки подписи на машине пользователя используется другой, зашитый в программу. Оба ключа связаны, но найти закрытый ключ по открытому практически невозможно, только перебором.


На самом деле ключи такой длины как у windows например(похожие приведены в примере) подбираются со скоростью 1 ключ в 5 минут.
(Они очень короткие для ассиметричной криптографии)
Но это не освобождает от необходимости понимать алгоритм либо отрезать проверяющую часть из exe и уметь ее быстро вызывать.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re: Как создать keygen?
От: MikePetrichenko Беларусь www.btframework.com
Дата: 13.08.07 16:14
Оценка:
Здравствуйте, DIMEDROLL, Вы писали:

DIM>Можно ли имея несколько ключей в виде:

DIM>H9CG-JZWY-JBCB-S3DN-X9VN
DIM>KGMF-5MCJ-M67J-7PC3-W9PA

DIM>создать генератор ( keygen ), который бы мог генерировать ключи которые бы читались той программой которая их принимает?


Хм... Вы меня простите, но следующий топик на RSDN, по логике вещей, должен теперь быть: "Как создать кряк?". Потом сделать закрытый фрум.. ну и понеслась..

Мдя уж.
Bluetooth, IrDA, WiFi and Serial Ports SDK for .NET, ActiveX, C++ and VCL
Spektrum Telemetry Log File Viewer
Re[4]: Как создать keygen?
От: YuriKobets Россия http://www.truelaunchbar.com — замена панели быстрого запуска
Дата: 13.08.07 16:22
Оценка:
Здравствуйте, retalik, Вы писали:

XZ>>Дело техники — алгоритмы подготовки пар ключей KEY_PRIV/KEY_PUB, кодирования и декодирования, сила которых в том, чтобы зная KEY_PUB, подобрать к нему соответствующий KEY_PRIV можно было только перебором, который побеждается разрядностью.


R>Ты это теоретизируешь или готов поделиться ссылкой на библиотеку, которая может шифровать закрытым ключом, а расшифровывать открытым?


Кстати, я вспомнил ссылки на нечно похожее: раз и два

сам я не разбирался но выглядит убедительно.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[4]: Как создать keygen?
От: Xander Zerge Россия www.zerge.com
Дата: 13.08.07 16:42
Оценка:
Здравствуйте, retalik, Вы писали:

XZ>>Дело техники — алгоритмы подготовки пар ключей KEY_PRIV/KEY_PUB, кодирования и декодирования, сила которых в том, чтобы зная KEY_PUB, подобрать к нему соответствующий KEY_PRIV можно было только перебором, который побеждается разрядностью.


R>Ты это теоретизируешь или готов поделиться ссылкой на библиотеку, которая может шифровать закрытым ключом, а расшифровывать открытым?


А какие проблемы? Цифровая подпись так и работает. Вычисляется хэш документа, шифруется закрытым ключом автора, для проверки подлинности документа получателем, снова вычисляется его хэш и сравнивается с хэшем, расшифрованным из подписи открытым авторским ключом. Любая крипто-библиотека с ассиметричными алгоритмами подойдёт для такого.

Так же и в защите программного продукта. Документ — это лицензионная информация: имя пользователя, компания, hardware fingerprint (хрен знает как перевести), если используется привязка к железу, ещё что-то про срок действия, какая-то другая дополнительная инфа. Что-то представлено в виде хэша, наверное, имя-компания-железо, например. Вот это всё и кодируется закрытым ключом разработчика, а открытым ключом декодируется уже у клиента. И если хэши пользователя-железа не совпадают с тем, что получилось, то гудбай.
Вот задача сделать кейген и сводится к простому — найти тот самый закрытый ключ.

--
Как самый настоящий шареварщик, я потратил месяц жизни, пиша (или пися? но так ещё хуже) свою собственную реализацию RSA и защиты ПО. Потом плюнул, и купил готовый навесной протектор.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[2]: Как создать keygen?
От: Xander Zerge Россия www.zerge.com
Дата: 13.08.07 16:49
Оценка:
Здравствуйте, MikePetrichenko, Вы писали:

DIM>>Можно ли имея несколько ключей...

DIM>>создать генератор ( keygen ), который бы мог генерировать ключи которые бы читались той программой которая их принимает?

MP>Хм... Вы меня простите, но следующий топик на RSDN, по логике вещей, должен теперь быть: "Как создать кряк?". Потом сделать закрытый фрум.. ну и понеслась..


Да ладно. Может, человек интересуется, насколько опасно продать тыщу лицензий в виде тыщи ключей злобной китайской триаде, подневольный компутерные умельцы которой напишут кейген и будут продавать продукт от своего имени.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Серёжа Новиков,
программист
Re[3]: Как создать keygen?
От: MikePetrichenko Беларусь www.btframework.com
Дата: 13.08.07 17:01
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Да ладно. Может, человек интересуется, насколько опасно продать тыщу лицензий в виде тыщи ключей злобной китайской триаде, подневольный компутерные умельцы которой напишут кейген и будут продавать продукт от своего имени.


"Все может быть
Все может статься
Машина может поломаться
Девченка может разлюбить
Но бросить пить — не может быть!" (С)
Bluetooth, IrDA, WiFi and Serial Ports SDK for .NET, ActiveX, C++ and VCL
Spektrum Telemetry Log File Viewer
Re[3]: Как создать keygen?
От: 0xDEADBEEF Ниоткуда  
Дата: 13.08.07 17:33
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>А вот если условие проверки выглядит как " decode( encode( UserID, KEY_PRIV ), KEY_PUB ) == UserID ", то программе надо знать только KEY_PUB, чтобы удостовериться, что сгенерённый ключ соответствует UserID.


Все это очень хорошо, но...
Ключи должны быть длинными — как минимум 64 байт (т.е. p*q не менее 512 бит), чтобы избавиться от угрозы факторинга. Как следствие, серийники тоже будут весить те же 64 байта, это если в бинарном виде. А если в текстовом, то еще больше — в зависимости от способа кодирования.
Ты не забывай, что сложность вскрытия RSA растет как минимум полиномиально (NP), то при уменьшении длины ключа она так же полиномиально и падает.

Вот, кстати, крякерская статейка ( http://www.cracklab.ru/art/?action=view&amp;id=154 ), о создании кейгена под эту технику. Как видим, авторы софта прокололись в 2х местах:
— использовали готовую библиотеку, что позволило крякеру легко опознать алгоритм RSA.
— взяли слишком короткий ключ, чтобы получить такой же короткий серийник.
__________
16.There is no cause so right that one cannot find a fool following it.
Re[4]: Как создать keygen?
От: Pyromancer  
Дата: 13.08.07 19:38
Оценка:
Здравствуйте, 0xDEADBEEF, Вы писали:

DEA>Здравствуйте, Xander Zerge, Вы писали:


XZ>>А вот если условие проверки выглядит как " decode( encode( UserID, KEY_PRIV ), KEY_PUB ) == UserID ", то программе надо знать только KEY_PUB, чтобы удостовериться, что сгенерённый ключ соответствует UserID.


DEA>Все это очень хорошо, но...

DEA>Ключи должны быть длинными — как минимум 64 байт (т.е. p*q не менее 512 бит), чтобы избавиться от угрозы факторинга. Как следствие, серийники тоже будут весить те же 64 байта, это если в бинарном виде. А если в текстовом, то еще больше — в зависимости от способа кодирования.
DEA>Ты не забывай, что сложность вскрытия RSA растет как минимум полиномиально (NP), то при уменьшении длины ключа она так же полиномиально и падает.

DEA>Вот, кстати, крякерская статейка ( http://www.cracklab.ru/art/?action=view&amp;id=154 ), о создании кейгена под эту технику. Как видим, авторы софта прокололись в 2х местах:

DEA>- использовали готовую библиотеку, что позволило крякеру легко опознать алгоритм RSA.
DEA>- взяли слишком короткий ключ, чтобы получить такой же короткий серийник.

Если всё так явно дизассемблируется как там то совершенно пофигу какой алгоритм — заменить пару байт и будет кушать любой серийник. Эх, прошли те времена когда одним NOPом или JMP можно было сломать защиту большинства программ
Re[5]: Как создать keygen?
От: retalik www.airbandits.com/
Дата: 13.08.07 20:22
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>А какие проблемы? Цифровая подпись так и работает. Вычисляется хэш документа, шифруется закрытым ключом автора, для проверки подлинности документа получателем, снова вычисляется его хэш и сравнивается с хэшем, расшифрованным из подписи открытым авторским ключом.

Это я в курсе

XZ>Любая крипто-библиотека с ассиметричными алгоритмами подойдёт для такого.

Так и знал, что ссылок не получу...

Hint: Windows CryptoAPI и crypto++ не подойдут.
Hint 2: OpenSSL подошла, но на основе RSA уж больно длинные ключи получаются.
Успехов,
Виталий.
Re[6]: Как создать keygen?
От: Sharowarsheg  
Дата: 13.08.07 20:54
Оценка:
Здравствуйте, retalik, Вы писали:

XZ>>Любая крипто-библиотека с ассиметричными алгоритмами подойдёт для такого.

R>Так и знал, что ссылок не получу...

R>Hint: Windows CryptoAPI и crypto++ не подойдут.


А почему CryptoAPI не подошла?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.