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

Борьба с отладчиком

Mario555

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


Но запись нулей - это еще не самое интересное. Иногда применяется самотрассировка: с помощью CONTEXT.DRx протектор расставляет в своем коде HW-бряки, и если какой-то из них не сработает, то выполнение пойдет неверным путем и программа упадет. Такая самотрассировка применена, например, в ACProtect.

Running line

Структуру CONTEXT в протекторах используют не только для управления DRx-регистрами. Еще одним примером антитрассировочного трюка с ее использованием является так называемая running line-трассировка. Заключается она в следующем: сначала флаг T (trace) устанавливается равным единице следующим кодом:

PUSHFD

POP EAX

PUSH EAX

OR AH,1

PUSH EAX

POPFD ; T=1

NOP

При установленном флаге трассировки T=1 выполняется одна следующая команда, после которой флаг T сбрасывается в ноль и возникает исключение Single step event. В приведенном коде это происходит после команды NOP, за которой следуют специфически зашифрованные команды. К примеру, в каждой из них поксорен первый байт (поэтому они выглядят как куча мусора). На возникшем исключении Single step event управление передается обработчику, в котором первый байт команды расксоривается, первый байт предыдущей команды ксорится и модифицируется значение регистра флагов Eflags в структуре CONTEXT (выставляется T=1). Соответственно, после выполнения следующей (только что расшифрованной) команды происходит то же самое и т.д. Разбирать такой живой код под отладчиком очень неудобно. Применяется running line в XtreamLok (включен в SoftWrap).

The end

Вот я и подошел к концу. Надеюсь, эта статья помогла тебе разобраться, как работают самые простые, но популярные антиотладочные приемы в user mode. Может быть, информация будет полезна тебе независимо от того, собрался ты писать защиту или ломать ее.

Назад на стр. 057-084-6  Содержание