logo
PASOIB

2.1.3. Методы, основанные на невозможности полного эмулирования отладчиком среды загрузки программы

Достаточно часто разработчики отладчиков также допускают ошибки или специально оставляют дырки в своих продуктах. Чаще всего, это вызовы API функций, которые могут быть доступны и отлаживаемой программе.

Одной из таких дырок «страдает» наиболее распространенный отладчик защищенного режима SoftIce.

Пример определения SoftIce из отлаживаемой программы.

……

Mov bx,202h

Mov ax,1684h

Xor di,di

Int 21h;

Если функция не определена, то di останется неизменным

Or di,di

Jnz SoftIceDectected

У SoftIce данная функция занята

……

Одной из уязвимостей отладчика Turbo Debuger является то, что он перехватывает прерывание int 00 (Деление на 0), выставляет свой адрес обработки, и передает управление на соответствующий код ядра отладчика. В данном случае, защита в программе может быть реализована следующим образом.

……

Start:

Mov ax, offset Continue

Mov dx,cs

Xor bx,bx

Mov es,bx

Cli

Xchg ax,es:[bx]

Xchg dx,es:[bx+2]

Sti

Div bx

Done:

mov ax,4C00h

Int 21h

Continue:

Cli

Xchg ax, es:[bx]

Xchg dx, es[bx+2]

Sti

Mov ah,9

Mov dx, offsetMsg

Int 21h

Jmp Done

……

Многие отладчики, также обнуляют некоторые регистры, которые могут нести определенный смысл. Например, при нормальном запуске (из под операционной системы MS-DOS) AX и BX отражают правильность аргументов в командной строке. DS=DX, SI=IP, DI=SP. Равенство соответствующих регистров друг другу можно проверить.

Отладчик SoftIce содержит также, одну ошибку, позволяющий его обнаружить. Эта ошибка заключается в неправильной установке регистра SP, указывающего на верхушку стека. При запуске отлаживаемой программы, SoftIce уставнавливает SP на 2 меньше, чем нужно. Ниже приведен пример, позволяющий, обнаружить SoftIce на основе данной ошибки (под SoftIce он не работает).

……

Pop bx

Pop eax

Push eax

Push bx

Ret

……

Ниже приведены дополнительные особенности, позволяющие выявить в памяти некоторые отладчики.

1. Отладчики Turbo Debugger, CodeView.

Используют стек отлаживаемой программы.

Используют int 1 и int 3 для трассировки.

Перехват прерываний int 0,1,3 и FP инструкций.

Некорректная работа с видеобуфером.

Некорректное выставление начальных значений регистров.

Неправильное дизассемблирование инструкций вида JMP $+1.

2. Отладчик SoftIce – обнаруживается по присутствию VxD устройства WinIce. Точку входа в SoftIce можно получить при вызове функции int 2F с параметрами: AX=1648h, BX=0202h (WinIce VxD ID), ES:DI=0. Результат возвращается в ES:DI.

3. Отладчик DegLucker

Переключение в нестандартный видеорежим.

Невозможность перехвата портов ввода/вывода.

Запирание клавиатуры через i/o портов 60h/64h.

Предоставляет API через int 15h функции 0FFxxh. Трассирует программу через DRx (аппаратные точки останова).

Кроме этого, в программных продуктах могут быть использованы следующие средства, позволяющие затруднить их отладку.

1. Использование прерываний int 1 и int 3 для собственных нужд.

2. Неоднократная смена стека программы.

3. Переход на свои подпрограммы из обработчиков прерываний.

4. Передача информации через буфер клавиатуры.

5. Расшифровка программы через стек (хранение в нем пароля).

Однако следует отметить, что рассмотренные методы не являются универсальными. Это всего лишь результат особенностей архитектуры процессора и инструментов отладки. Данные особенности ограничены, а их принципы исчислимы. Трики можно обойти, если злоумышленник знает о них. Если же злоумышленник не знаком с некоторым триком, то какие-то критические моменты, вызванные срабатыванием трика, могут его насторожить, и при повторной прогонке этого участка кода, взломщик может обойти это место без особого труда.

Преимуществами защиты от отладки с помощью перечисленных методов является то, что данные методы, трики между собой не связаны, их можно очень легко применять.

Недостатками данных методов является то, что они предназначены для защиты только от начинающих взломщиков, профессионалы их обойдут.

Трики, как правило, включаются в программу по правилу «чем больше тем лучше» и от их исключения, логика работы программы не меняется. В некоторых случаях, совокупный размер кодов триков сравним с размером программы.