Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Техника отладки

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #057, стр. 057-020-6


В нашем случае ответ отладчика выглядит так:

ЛИСТИНГ

:STACK

0012E138 77E155B5 oorwiz!.text+0001AC5E

0012E168 77E15A3B USER32!DefWindowProcW+0105

0012E188 77E1FB52 USER32!SendMessageW+0043

0012E214 77E1E6C3 USER32!WINNLSGetIMEHotkey+0E15

0012E254 77E1E561 USER32!EditWndProc+0075

0012E278 77E198DF USER32!ScrollWindow+0096

0012E29C 77E13EB0 USER32!ShowCursor+0057

0012E2BC 77E16469 USER32!SetTimer+0435

0012E2E0 77E164E5 USER32!SetRect+0065

0012E300 00F7A1B6 USER32!CallWindowProcW+0019

0012E320 00F7A403 oorwiz!.text+000191B6

0012E33C 00F7BC02 oorwiz!.text+00019403 ; _AfxPostInitDialog

0012E39C 00F7BC92 oorwiz!.text+0001AC02 ; AfxWndProc

0012E3BC 77E13EB0 oorwiz!.text+0001AC92 ;

0012E3DC 77E1591B USER32!SetTimer+0435

Десять первых вызовов относятся к библиотеке USER32.DLL и не представляют для нас никакого интереса (SoftIce неправильно определил принадлежность вызова 12E138h, приписав его к oorwiz, но oorwiz не может располагаться по адресам 77E155B5 – эта зона принадлежит USER32). А вот одиннадцатый вызов 12E320, ведущий к адресу F7A403, весьма интересен. Заглянув сюда дизассемблером, мы обнаружим следующий код:

ЛИСТИНГ

.text:1001A3E6 call dword ptr [eax+10Ch]

.text:1001A3EC test eax, eax

.text:1001A3EE jnz short loc_1001A406

.text:1001A3F0 push [ebp+arg_8]

.text:1001A3F3 mov eax, [esi]

.text:1001A3F5 push [ebp+arg_4]

.text:1001A3F8 mov ecx, esi

.text:1001A3FA push [ebp+arg_0]

.text:1001A3FD call dword ptr [eax+110h]

.text:1001A403 mov [ebp+var_4], eax ; адрес возврата

.text:1001A406

.text:1001A406 loc_1001A406: ; CODE XREF: CWnd::WindowProc()

.text:1001A406 mov eax, [ebp+var_4]

.text:1001A409 pop esi

.text:1001A40A leave

.text:1001A40B retn 0Ch

Вызов функции call dword ptr [eax+110h] - тот самый, к которому ведет адрес возврата. Именно он выводит противный регистрационный диалог. Прокручивая экран дизассемблера вверх, легко найти условный переход, расположенный по адресу 101AEE, который прыгает за диалог возврата. Изменив jnz на jmp short, мы навсегда уберем диалог с экрана. Конечно, такая мера еще не зарегистрирует программу, но это уже кое-что!

Отладка динамических библиотек

Loader32 (символьный загрузчик SoftIce) как будто позволяет загружать динамические библиотеки, но отлаживать их в автономном режиме не дает, что, собственного говоря, и не удивительно: всякая такая библиотека - просто набор функций, вызываемых из основного процесса. Возьмем библиотеку oorwiz.dll, экспортирующую тройку функций с заманчивыми именами: RegWiz_InitReadOnly, RegWiz_InitTrial, RegWiz_InitLicMgr. Как отладить их?

Назад на стр. 057-020-5  Содержание  Вперед на стр. 057-020-7