ЖУРНАЛ ХАКЕР

SoftIce для начинающих

Программа, которая может все

Xakep, номер #035, стр. 035-053-3


Самыми часто используемыми Win API функциями являются:

MessageBoxIndirect - работа с окном сообщений. Используется в 16-битных приложениях.

MessageBox - работа с окном сообщений. Используется в 16-битных приложениях.

MessageBoxA - то же самое, но 32-битное приложение.

MessageBoxIndirectA - то же самое, что и MessageBoxIndirect, но 32-битное приложение.

GetWindowText - обычная строка ввода типа Windows Edit. Используется в 16-битных приложениях.

GetWindowTextA - то же самое, но 32-битное приложение. Строки используются однобайтовые.

GetDlgItemText - примерно то же, что и предыдущая функция, отличия в деталях. Используется в 16-битных приложениях.

GetDlgItemTextA - то же самое, но 32-битное приложение. Строки используются однобайтовые.

Следует заметить, что GetWindowTextA и MessageBoxA очень часто используются при проверке серийного номера. Перед взломом рекомендую посмотреть свойства ломаемой программы и выяснить ее разрядность (щелкни на ее ярлыке правой кнопкой мыши, появится окно Свойств, там в левом верхнем углу обычно написано "16" или "32 бит", это и есть разрядность приложения).

Практика

Вроде теорию я тебе всю изложил. Теперь практика: классический пример. Возможно, пример немного трудноват, но даже если ты запомнишь хотя бы малую часть, то сможешь почувствовать себя настоящим хирургом-маньяком, ищущим себе все новые и новые жертвы. Итак прога-пациент называется TaskLock. Будем ловить на GetWindowTextA (команда ":bpx getwindowtexta"). Ты можешь проверить, установилась ли точка останова командой ":bl". В результате увидишь что-нибудь типа: "00) BPX USER32!GetWindowTextA C=01". Далее жми F5. Продолжим. Попробуй ввести какое-нибудь значение в окне регистрации и нажми OK. Ты получишь дурацкое сообщение о том, что код был неправильным. Значит, это была не функция GetWindowTextA. Попробуем GetDlgItemTextA. Удали старый брейкпоинт ":bc 0" (0 - это номер брейкпоинта в списке брейкпоинтов) и установи новый ":bpx getdlgitemtexta". Вводи номер заново. Теперь ты в SoftICE, в самом начале функции GetDlgItemTextA. Чтобы попасть туда, откуда она была вызвана, нажми F11. Теперь ты внутри модуля SGLSET.EXE. Сейчас ты уже можешь запретить реакцию на вызов функции ":bd 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 ; ...

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