|

Хакер vs Шаровары
FINNAN (finnan@mail.ru)
Xakep, номер #022, стр. 022-060-4
Я нашел SN и RegName с первого раза по адресам 80C486B2 и 80C4868A соответственно. При этом обнаружился следующий момент: при каждом запуске эти адреса разные (у тебя они тоже будут другие, но смещения функций и всего кода всегда одни и те же). Это значит, что они размещаются динамически, хотя это практически нечего не меняет. Теперь вводим команду: BPM 80C486B2, т.е. ставим BP на обращение по этому адресу. Пытаемся зарегистрироваться еще раз, и тут SoftICE появляется сам. Значит, сработала BP. Смотрим на системные сообщения отладчика (внизу экрана под окном кода):
Break due to BPMB #0030:80C486B2 RW DR3 (ET=5.83 seconds)
MSR LastBranchFromIp=00009EEC
MSR LastBranchToIp=00009F1A
Это означает, что произошло чтение-запись (RW) по адресу 0030:80C486B2 через 5.83 секунды после закрытия отладчика.
Сейчас мы находимся в функции, которую вызвала другая функция, что, в свою очередь, вызвала еще какая-то и т.д., которую вызвала функция проверки SN и RegName, т.е. где-то глубоко внизу иерархии вызовов функций. Чтобы работать нормально, необходимо подняться вверх до ключевой функции. Это можно сделать с помощью F12. Жми ее 11 раз, пока не дойдешь до адреса 00489A94 (Откуда я знаю, что 11 раз и адрес именно 00489A94? Хм. Метод научного тыка пока никто не отменял.). Вот что сейчас находится в окне кода:
:0167:00489A70 MOV EAX,FS:[00000000]
:0167:00489A76 PUSH FF
:0167:00489A78 PUSH 004FF920
:0167:00489A7D PUSH EAX
:0167:00489A7E MOV FS:[00000000],ESP
:0167:00489A85 SUB ESP,44
:0167:00489A88 PUSH EBP
:0167:00489A89 PUSH ESI
:0167:00489A8A PUSH EDI
:0167:00489A8B MOV ESI,ECX
:0167:00489A8F CALL 004C6B12 - Из этой функции только что вернулись
:==>>:00489A94 TEST EAX,EAX - Текущая строка
:0167:00489A96 JZ 0048A04C
:0167:00489A9C LEA EDI,[ESI+00000094]
:0167:00489AA2 PUSH 00
:0167:00489AA4 MOV ECX,EDI
:0167:00489AA6 MOV DWORD PTR [ESP+10],7FFFFFFF
:0167:00489AAE CALL 004C8527
:0167:00489AB3 PUSH EAX
:0167:00489AB4 LEA EAX,[ESP+10]
:0167:00489AB8 PUSH EAX
:0167:00489AB9 CALL 004AB0E0 - Предположительно, эта функция проверяет SN и RegName
:0167:00489ABE ADD ESP,08
:0167:00489AC1 TEST AX,AX
:0167:00489AC4 JNZ 00489B34 - Предположительно, это условие определяет результат регистрации
:0167:00489AC6 LEA ECX,[ESP+14]
:0167:00489ACA PUSH 0000F05D
:0167:00489ACF PUSH ECX
:0167:00489AD0 CALL 00425620
Удаляй теперь старую BP и ставь новую на адрес 0167:00489A70 (можно просто даблкликнуть по этой строке). Теперь трассируем (F10) и смотрим, что получится. А получается вот что: функция [00489AB9 CALL 004AB0E0] устанавливает eax, а потом [00489AC4 JNZ 00489B34] посылает либо на функцию вывода сообщения об ошибке, либо далее. Чтобы проверить это, поставь курсор на строчку [0167:00489AC4 JNZ 00489B34] и жми F7. Теперь перемести его в правый верхний угол на 'Z': это индикатор флага нуля. Нажми Insert и Enter, чтобы перевести его в противоположное состояние. Теперь то условие работает наоборот. Можно трассировать дальше, а можно просто выйти по F5 и предоставить программу самой себе.
Назад на стр. 022-060-3 Содержание Вперед на стр. 022-060-5
|