Готовим кейген 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 |