Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #89, МАЙ 2006 г.

Готовим кейген

ARA

Хакер, номер #089, стр. 089-064-3


004946D3 CALL <DUMeter.@Controls@TControl@GetText$qqrv>

004946D8 MOV EAX,DWORD PTR SS:[EBP-50]

004946DB PUSH EAX

004946DC LEA EAX,DWORD PTR SS:[EBP-8]

004946DF PUSH EAX

004946E0 LEA EDX,DWORD PTR SS:[EBP-54]

004946E3 MOV EAX,DWORD PTR DS:[EBX+374]

004946E9 CALL <DUMeter.@Controls@TControl@GetText$qqrv>

004946EE MOV ECX,DWORD PTR SS:[EBP-54]

004946F1 XOR EDX,EDX

004946F3 MOV EAX,DWORD PTR DS:[EBX+3F0]

004946F9 CALL DUMeter.00491898

004946FE SUB EAX,-2

00494701 JE SHORT DUMeter.00494715

Возможно, что CALL DUMeter.00491898 – это и есть проверка. Чтобы долго не думать, проверим нашу догадку в отладчике – подменим возращенное в регистре ЕАХ значение 0 на 1 и запустим прогу. Регистрация прошла успешно. Теперь мы точно знаем, что наша проверка лицензии начинается с адреса 491898. Ставим на него бряк и вводим заново данные.

Если бы нам было лень копаться в дебрях проверки, пытаться восстанавливать код и писать "ключеделалку", то, возможно, достаточно было бы просто в начале найденной процедуры занести в регистр ЕАХ нужную единичку (MOV EAX,1) и вернуться обратно в (RET), ведь при любых введенных данных проверка была бы пройдена успешно, и программа была бы побеждена. Однако если уж мы взялись за самое трудное, то придется пройти весь путь до конца. Начинаем разбор кода. Опять пройдемся от адреса 00494715 до выхода из процедуры проверки, пытаясь определить, где же в ЕАХ заносится ноль. Определили:

00491947 MOV EAX,ESI

00491949 POP ESI

0049194A POP EBX

0049194B POP ECX

0049194C POP ECX

0049194D POP EBP

0049194E RETN 8

В ЕАХ ноль попадает из регистра ESI, а в ESI смотрим код по адресу: 004918D4. Что ж, мы уже совсем близко. Нам уже знакомы две проверки на нулевую строку по адресам: 49Е9С9 и 49Е9D7. Более интересна процедура чуть ниже (по адресу 0049EA87,) перед выполнением которой в регистры заносятся адреса наших данных и непонятной строки «D3» (чуть ниже то же самое, но со строкой N1), которые и возвращают ненавистный нам ноль.

Смотрим найденную процедуру.

ВСТАВИТЬ КОД

0048E879 CMP BYTE PTR DS:[EAX],61

0048E87C JL SHORT DUMeter.0048E886

0048E87E CMP BYTE PTR DS:[EAX],7A

0048E881 JG SHORT DUMeter.0048E886

0048E883 ADD BYTE PTR DS:[EAX],0E0

0048E886 INC EAX

0048E887 CMP BYTE PTR DS:[EAX],0

0048E88A JNZ SHORT DUMeter.0048E879

0048E88C MOV EAX,EBX

0048E88E CALL DUMeter.0048E5C0

0048E893 CMP EAX,18

0048E896 JE SHORT DUMeter.0048E89F

0048E898 XOR EAX,EAX

0048E89A JMP DUMeter.0048E964

0048E89F CMP BYTE PTR DS:[ESI],61

0048E8A2 JL SHORT DUMeter.0048E8AC

0048E8A4 CMP BYTE PTR DS:[ESI],7A

0048E8A7 JG SHORT DUMeter.0048E8AC

0048E8A9 ADD BYTE PTR DS:[ESI],0E0

0048E8AC CMP BYTE PTR DS:[ESI],20

0048E8AF JE SHORT DUMeter.0048E8C6

Назад на стр. 089-064-2  Содержание  Вперед на стр. 089-064-4