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. Расшифровка программы через стек (хранение в нем пароля).
Однако следует отметить, что рассмотренные методы не являются универсальными. Это всего лишь результат особенностей архитектуры процессора и инструментов отладки. Данные особенности ограничены, а их принципы исчислимы. Трики можно обойти, если злоумышленник знает о них. Если же злоумышленник не знаком с некоторым триком, то какие-то критические моменты, вызванные срабатыванием трика, могут его насторожить, и при повторной прогонке этого участка кода, взломщик может обойти это место без особого труда.
Преимуществами защиты от отладки с помощью перечисленных методов является то, что данные методы, трики между собой не связаны, их можно очень легко применять.
Недостатками данных методов является то, что они предназначены для защиты только от начинающих взломщиков, профессионалы их обойдут.
Трики, как правило, включаются в программу по правилу «чем больше тем лучше» и от их исключения, логика работы программы не меняется. В некоторых случаях, совокупный размер кодов триков сравним с размером программы.
- Модульная архитектура технических средств защиты по от несанкционированного использования
- Функционирование подсистем и модулей системы защиты по от несанкционированного использования
- Электронные ключи hasp
- Глава 1. Методы и средства обратного проектирования.
- 1.1. Понятие обратного проектирования
- 1.2. Основные приемы, используемые злоумышленником при отладке и дизассемблировании программного обеспечения
- 1.2.1. Специфика атак на модули проверки корректности ключевой информации
- 1.2.2. Специфика атак на модули проверки истечения временного срока работы программы или ограничения по количеству ее запусков
- 1.2.3. Отлов злоумышленником вызова WinApi функций при взломе по
- 1.3. Мониторинг событий
- Глава 2. Методы противодействия обратному проектированию
- 2.1. Методы противодействия отладчикам
- 2.1.1. Защита от отладчиков реального режима
- 2.1.2. Защита от отладчиков защищенного режима
- 2.1.3. Методы, основанные на невозможности полного эмулирования отладчиком среды загрузки программы
- 2.2. Методы противодействия дизассемблированию программного обеспечения
- 2.3. Защита, основанная на человеческом факторе злоумышленника
- Глава 3. Общие методы защиты программ от отладки и дизассемблирования
- 3.1. Использование недокументированных команд и недокументированных возможностей процессора
- 3.2. Шифрование кода программы
- Глава 4. Эмуляторы процессоров. Использование эмуляторов для взлома и защиты программного обеспечения.
- Глава 5. Защита исходных текстов программного обеспечения
- Глава 6. Идентификация и аутентификация субъектов
- 6.1. Идентификация и аутентификация пользователей с использованием технических устройств
- 6.2. Идентификация и аутентификация с использованием индивидуальных биометрических характеристик пользователя
- 7. Защита от разрушающих программных воздействий
- 7.1. Понятие разрушающего программного воздействия
- 7.2 Модели взаимодействия прикладной программы и рпв
- 7.3 Компьютерные вирусы как класс рпв
- 7.4. Защита от рпв. Изолированная программная среда
- Глава 8. Руководящие документы России
- Приложение
- 6.1. Отладка программ в отладчике SoftIce
- 6.2. Дизассемблирование программ с помощью интерактивного дизассемблера Ida Pro
- 6.3. Редактор кода hiew
- Лабораторные работы