Кейген своими руками 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. |