![]() |
Создание кейгена для EmFTP 2.01
Создание кейгена для EmFTP 2.01
Исследуемая программа - FTP-клиент EmFTP 2.01, имеет 30 day trial и позволяет вводить к окне регистрации полученый от разработчиков регкод. PEID выдал после проверки файла EmFTP.exe такой результат: Microsoft Visual C++ 7.0 [Debug]. Это не может не радовать и дает пищу для дальнейших непродолжительных экспериментов. Сразу переходим к исследованию. Жмем Help->About EmFTP...(попутно замечаем надпись Unregistered)->How To Purchase->Enter Registration Key и видим 4 поля по 4 символа для ввода регистрационной информации. Сюда можно запихнуть лишь цифры (запомним...). Вводим набум 1111-2222-3333-4444 и получаем в ответ месаджбокс "Wrong registration key". Для отлова вызова этого сообщения грузим выполняемый файл в ольку и ставим "bp MessageBoxA" в плагине Command Bar. После повторного ввода "1111-2222-3333-4444" и нажатия на ОК прерываемся. Чтобы выяснить место, откуда функция вызывается, просмотрим стек вызовов (Alt+K). Он имеет такой вид: Код:
Address Stack Procedure Called from FrameКод:
.text:00418B84 call __RegOpenKeyКод:
.text:00418B90 call ReadRegKey_FromRegistry_And_Checkможно сделать вывод, что именно в этой функции и сосредоточен модуль проверки введенного регкода на валидность. Код:
.text:004189FE ; int __stdcall ReadRegKey_FromRegistry_And_Check(HKEY hKey)REG_BINARY и равен "57 04 AE 08 05 0D 5C 11". Код:
lea eax, [ebp+Data]если вводимый ключ состоит из 4 полей (вспоминаем, что доступны только цифры 0..9), а запись состоит из 8 байт, то логично предположить, что это 4 переменные размером в WORD, каждая отвечающая за соответственное поле ввода. Проверим: переведем "04 57" (не забываем про обратный порядок следования байт) из 16ричной системы в 10чную и получим "1111", "08 AE" - "2222", "0D 05" - "3333", "11 5C" - "4444" - точно те же данные, что мы и вводили при регистрации. Перейдем к изучению основной функции проверки введенных данных main_reg_routine. Код:
.text:00425328 main_reg_routine proc near ; CODE XREF: ReadRegKey_FromRegistry_And_Check+54pЕсли это условие правдиво, то мы движемся дальше и по адресу 00425345 происходит вызов основной функции просчета валидного серийника и окончательной его проверки с нами введенным. Код:
.text:0042522E zamut proc near ; CODE XREF: main_reg_routine+1Dp |
Вся "красота" функции заключается в математических операциях над первыми тремя введенными числами и записи просчитанного валидного для них четвертого (.text:00425306 mov [esi+6], di).
Как мы помним, по адресу 00425351 (cmp di, [esi+6] ; сравниваем 4 ворд с результатом функции) происходит окончательная их проверка. Так что для создания кейгена достаточно "понять" алгоритм проверок и преобразовать его на любой любимый язык. Но можно сделать проще, просто рипнув эту функцию и использовав ее для своих нужд (я употребил плагин для ольки AsmToClipboard -> Copy Fixed Asm To Clipboard). При этих манипуляциях не стоит забывать, что для правильной работы рипнутого кода в качестве ассемблерной вставки, например, в делфи, нужно корректно заменить используемые в функции указатели на данные на передаваемые ей в своей функции соответствующие переменные, поменять адреса меток на их символьные аналоги и самое важное - что в даной функции используется внешняя таблица констант: Код:
004252D9 |. 66:8B3C95 203E>MOV DI,WORD PTR DS:[EDX*4+463E20] ; ТУТ"004252D9 |. 66:8B3C95 203E>MOV DI,WORD PTR DS:[EDX*4+463E20] ; ТУТ" и жмем Follow in dump -> Address Constant и получаем в окне дампов начало искомой таблицы (00463E20). Код:
00463E20 26 00 00 00 5B 00 00 00 62 00 00 00 36 00 00 00 &...[...b...6...Забив в своем кейгене дамп в отдельную таблицу, получаем примерно такое: Код:
unit main; //на форме баттон и 4 спинедита |
Отлично! Но есть вопрос - что за олька?
Я пользовался только SoftICE и WinDASM для реверсинга.... "олька" лучше? ------ UPD: насчет ольки (ollyDBG) вопрос снят. |
олька - отлад4ик OllyDbg, о4ень удобен для на4инающих, да и вообще незаменим при отладке приложений пользовательского уровня. имеет ку4у дополнительных плагинов, скриптов для автораспаковки многих пакеров\протекторов - вообщем наземенимая тулза для исследований и отладки багов в своем же софте!
ка4аем последний релиз: http://wasm.ru/baixado.php?mode=tool&id=89 http://cracklab.ru/download.php?action=get&n=MzYw |
| Время: 02:26 |