Хакерские трюки или как поставить бряк на jmp eax


Первые шаги или установка точки останова на одну команду - часть 2


Если вместо <CTRL-F11> нажать <CTRL-F7> ("animate into"), то скорость трассировки упадет в десятки раз, но зато OllyDbg будет обновлять окно CPU на каждом шагу, подсвечивая текущую выполняемую команду курсором (см. рис. 4). Выглядит очень красиво (особенно интересно наблюдать за циклами), но для практической работы оно непригодно. Прервать трассировку (как анимационную, так и обычную) можно в любой момент клавишей <ESC>, при этом отладчик остановится на последней выполненной инструкции.

 

Рисунок 4 анимированная трассировка в OllyDbg (в правом нижнем углу строки статуса горит "animating")

Если же вести трассировку до победоносного конца, то спустя некоторое время (определяемое в первую очередь мощностью вашего ЦП), отладчик остановится на инструкции PUSHFD (см. рис. 5). Это и есть "сердце" защитного механизма, который нам предстоит проанализировать и обезвредить.

 

Рисунок 5 остановка отладчика по срабатыванию точки останова на команду PUSHFD

Антиотладочный код предельно прост и укладывается всего в четыре строки (см. листинг 1):

 

0040100E |. 9C                    PUSHFD

0040100F |. 58                    POP EAX

00401010 |. 25 00010000    AND EAX,100

00401015 |. 75 03          JNZ SHORT TF.0040101A

Листинг 1 антиотладочный код, основанный на чтении регистра флагов

Защита заталкивает в стек регистр флагов командой PUSHFD и тут же выталкивает его в EAX, проверяя бит трассировки логической операцией AND EAX 100h. Только никакого бита трассировки в стеке ни хрена не окажется — OllyDbg автоматически удалит его, но чтобы программа работала и под другими отладчиками, необходимо заменить JNZ на NOP/NOP или AND EAX, 100h на AND EAX, 0h.

Если немного потрассировать программу, мы выйдем из антиотладочной процедуры и попадем в довольно типичный для высокоуровневых программ машинный код, проверяющий значение, возращенное функций, с помощью пары инструкций TEST EAX,EAX/Jx (см. листинг 2):




- Начало -  - Назад -  - Вперед -



Книжный магазин