2.1.1. Защита от отладчиков реального режима
Работа данных отладчиков построена на использовании двух аппаратных прерываний: int 1, с помощью которого в отладчике выполняется пошаговое исполнение программы и int 3, предназначенное для вставок точек останова в код отлаживаемой программы. При трассировке программы отладчиком задействуется регистр флагов, а именно флаг трассировки TF.
Трик 1
Данная ловушка основана на том, что вследствие аппаратной особенности реализации процессора INTEL, после исполнения команды pop ss первое прерывание не может быть вызвано, и отладчик «не замечает» и пропускает следующую за данной командой инструкцию. Механизм защиты в данном случае может выглядеть следующим образом.
…… |
|
Push ss; |
|
Pop ss; | Защита |
Pushf; | Кладем в стек значение флагового регистра. Данную команду отладчик не замечает и не исполняет |
Pop ax; | Восстанавливаем ax из стека. В случае наличия отладчика в памяти, мы извлечем не флаговый регистр |
Test ax,100h; | Проверка флага на трассировку. Подразумевается, что если мы под отладчиком, то проверка не пройдет |
Jnz DebuggerDetected; | Переход на процедуру завершения работы |
…… |
|
Трик 2
Перехват в программе прерывания 1 и использование его для ссылки на механизм защиты или на совершенно другую область. Работа данного механизма может заключаться в том, что при попытке отладки программы, она будет либо завешиваться, либо будет стартовать модуль защиты, который, например, будет выводить на экран сообщение о невозможности продолжения дальнейшей работы.
Механизм защиты может выглядеть в данном случае следующим образом.
…… |
|
Xor dx,dx; | Обнуляем регистр dx |
Mov ds,dx; | Обнуляем регистр ds |
Mov ax, 2501h; |
|
Int 21h; | Функция 25, подфункция 1. Вектор обработчика первого прерывания устанавливается на адрес 0000:0000 |
…… |
|
Существуют также механизмы противодействия установке точек останова в отладчике.
Точка останова используются отладчиком следующим образом.
В код программы вставляется вместо данной точки код 0xCC, а значение памяти, которое находилось по его адресу, запоминается отладчиком.
Когда программа встречает команду с кодом 0xCC, она вызывает исключительную ситуацию 0x3h. При этом в стеке запоминается регистр флагов, указатель текущего кодового сегмента (CS), указатель команд IP, запрещаются прерывания (очищается флаг FI) и сбрасывается флаг трассировки.
После выполнение действий п.2, программа поступает в монопольное распоряжение процессора.
Обычно, при входе в отладчик, он сохраняет текущие значения всех регистров программы, а потом обращается к ним через стек, либо присваивает своим локальным переменным.
Таким образом, установка точки останова требует непосредственной модификации кода программы (0xCC), вынуждая отладчик изменить соответствующий байт программы. Для отлаживаемой программы не составит труда обнаружить факт изменения своего кода и прекратить исполнение программы.
Используя данный факт, для защиты от установки точек останова можно воспользоваться следующими методами.
1. Зашифровать код программы на некотором ключе, зависящем от контрольной суммы исполняемого кода. При изменении кода программы, расшифровка будет неверна и исполнение программы будет нарушено.
2. Установить из программы вершину стека в нуль. Так как стек ОС растет сверху вниз (к нижним адресам памяти), то когда процессор встретит точку прерывания, установленную отладчиком, то попытается в первую очередь сохранить регистр флагов в стеке, однако сделать этого не сможет, так как стек уже исчерпан. В данном случае ОС завершит некорректно работающее приложение с ошибкой.
3. Зашифровать код программы на ключе, который занести в стек, читая его по команде pop посимвольно. В данном случае, при вмешательстве отладчика код программы будет расшифрован неверно.
Трик 3 Аппаратное запрещение прерываний
Данная ловушка основана на том, что запрещение прерываний от клавиатуры приводит к зависанию отладчиков реального режима. Если войти в режим отладки, то невозможно будет набрать ни одну команду отладчика, в том числе и выйти из него. Запретить прерывания от клавиатуры в реальном режиме MS-DOS можно следующими способами.
Способ 1
……
In al, 21h
Or al, 00000010b
Out 21h,al
Способ 2
In al, 61
Or al, 10000000b
Out 61h, al
Способ 3
Mov al, 0Adh
Out 64h,al
Трик 4. Перепрограммирование видеоадаптера
Многие отладчики реального режима перестают корректно работать, если запретить видеовывод через прерывание int 10h.
- Модульная архитектура технических средств защиты по от несанкционированного использования
- Функционирование подсистем и модулей системы защиты по от несанкционированного использования
- Электронные ключи 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
- Лабораторные работы