Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Кейген своими руками

GL#0M (gl00m-crk@yandex.ru)

Спецвыпуск: Хакер, номер #057, стр. 057-044-5


00409BCF . 50 pusheax ; 3 параметр (eax = 8)

00409BD0 . 8D4424 3Clea eax, dword ptr [esp+3Ch]; eax = указатель на буфер результата

00409BD4 . 50 pusheax ; 2 параметр

00409BD5 . 51 pushecx ; 1 параметр

00409BD6 . 8BCF mov ecx, edi; ecx = указатель на развернутый ключ

00409BD8 . E8 937FFFFFcallBlowfish_DecryptMode

На вход подается указатель на введенный нами лицензионный код (преобразованный функцией HexFromHexStr в бинарный вид). Явный Decrypt =). Хотя, конечно, не помешает убедиться... (Все по аналогии с Blowfish_SetKey.)

Кстати, ты мог бы подумать, почему я назвал функцию Blowfish_DecryptMode, а не Blowfish_Decrypt. Да, действительно, немного странно, но на то есть причины. Дело в том, что Blowfish_DecryptMode - это функция, содержащая несколько разных режимов Blowfish_Decrypt. За выбор отвечает четвертый параметр функции Blowfish_DecryptMode, у нас он равен 0, что соответствует стандартному режиму. В этом тоже пришлось разобраться =).

Ну вот мы и подошли к завершающей стадии.

00409BF4 . 8B4424 14mov eax, dword ptr [esp+14h]; User Name

00409BF8 . 8B4C24 18mov ecx, dword ptr [esp+18h]; Расшифрованные данные

00409BFC . 50 pusheax

00409BFD . 51 pushecx

00409BFE . E8 DD620000calllstrcmpi

00409C03 . 83C4 08add esp, 8h

00409C06 . 85C0 testeax, eax

00409C08 . 57 pushedi

00409C09 . 75 20jnz short _WrongSerial

Здесь мы видим сравнение введенного User Name с расшифрованными данными, то есть, для того чтобы регистрация прошла успешно, нужно чтобы они были равны. И что теперь? Догадался? Правильно! Нужно зашифровать наше имя. Полученный результат будет считаться действительным лицензионным кодом.

Для этого нам необходима функция Blowfish_Encrypt. Где ее взять? Вариантов море...

Вот некоторые из них:

1. написать самостоятельно - это полезнее ;);

2. взять прямо из кода нашей цели.

В этом нам поможет IDA, а точнее ее функция сохранения дизассемблерного листинга в asm-файл. Для этого нужно выделить нужный нам участок и нажать комбинацию клавиш <Alt>+<F10>.

3. Взять из кода Blowfish_Decrypt и видоизменить ее так, чтобы получился Blowfish_Encrypt.

Это несложно - нужно только применить смекалку. Ответ кроется в теории этого алгоритма ;).

4. Взять готовую реализацию на каком-либо языке.

Я выбрал второй вариант. Пришлось даже исправить баг Blowfish??crypt, из-за которого правильно шифровались данные только до девяти байт =). В общем, смотри исходники!

Все! Надеюсь, этот опус хоть как-то может помочь в освоении интересной темы Reverse Engineering.

Назад на стр. 057-044-4  Содержание