Борьба с отладчиком 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. Может быть, информация будет полезна тебе независимо от того, собрался ты писать защиту или ломать ее. |