"ED!SON (пер. Mr.Boco). Как ломать программы Windows" - читать интересную книгу автора



3.1.3 В отладчике
=================
Wow! Работает! Теперь вы в SoftICE, в самом начале функции GetDlgItemTextA.
Чтобы попасть туда, откуда она была вызвана, нажмите F11. Теперь Вы внутри
модуля SGLSET.EXE. Если Вы не уверены - посмотрите на строчку между окном
кода и окном командной строки, она должна выглядеть так:

----------SGLSET!.text+1B13----------

Сейчас Вы уже можете запретить реакцию на вызов функции:

:bd 0

Если Вам вдруг захочется снова разрешить ее, наберите:

:be 0

Первая строка в окне кода выглядит так:

CALL [USER32!GetDlgItemTextA]

Чтобы посмотреть строчки над ней, нажимайте Ctrl+Up ("стрелка вверх") до
тех пор, пока не увидите нижеприведенный кусок кода. Если Вы ничего не
понимаете в Ассемблере, я добавил комментарии которые могут Вам помочь.

RET ; Конец функции
PUSH EBP ; Начало другой функции
MOV EBP, ESP ; ...
SUB ESP, 0000009C ; ...
PUSH ESI ; ...
> LEA EAX, [EBP-34] ; EAX = EBP-34
PUSH EDI ; ...
MOVE ESI, ECX ; ...
PUSH 32 ; Макс. длина строки
> PUSH EAX ; Адрес текстового буфера
PUSH 000003F4 ; Идентификатор управления
PUSH DWORD PTR [ESI+1C] ; Идентификатор окна диалога
CALL [USER32!GetDlgItemTextA] ; Получить текст

Команды PUSH означают сохранение значений для последующего использования.
Я пометил важные строчки символом '>'. Глядя на этот код, мы видим, что
адрес текстового буфера хранился в регистре EAX и что EAX был EBP-34h.
Поэтому нам стоит взглянуть на EBP-34h:

:d ebp-34

Вы должны были увидеть текст, который вы ввели в диалоговом окне. Теперь мы
должны найти место, где Ваш номер сравнивается с реальным серийным номером.