6.1. Отладка программ в отладчике SoftIce
Отладчик SoftICE является наиболее мощным из существующих отладчиков общего назначения, с помощью которого можно отлаживать практически любые типы кодов, включая исполняемые файлы, драйверы устройств, DLL, OCX, а также статические и динамические VxD.
SoftICE может функционировать под операционными системами WINDOWS 95 и WINDOWS NT и состоит из отладчика уровня ядра и утилиты Symbol Loader, позволяющую загружать отладочную информацию. Данный отладчик обладает следующими привлекательными возможностями.
1. Отладка на уровне исходных кодов 32-битных приложений (Win32), драйверов устройств Windows NT (как пользовательского уровня, так и уровня ядра), драйверов Windows95, VxD, 16-битных Windows программ и DOS программ.
2. Отладка практически любых типов кодов, включая обработчики прерываний и ядро операционных систем Windows NT и Windows 95.
3. Установка прерываний на обращение к памяти как по чтению, так и по записи, на чтение/запись в порты ввода/вывода и на аппаратные прерывания.
4. Установка прерываний на сообщения Windows.
5. Задание условий возникновения прерываний и последовательности действий при их возникновении.
6. Показывает промежуток времени, прошедший до возникновения прерывания, используя счетчик процессора Pentium.
7. Отладка ядра операционной системы на одной машине.
8. Выдача различной внутренней служебной информации операционной системы.
9. Использование модема для подключения SoftICE к удаленному компьютеру. Это позволяет изучить проблемы в работе удаленного компьютера, например, причины краха системы.
10. Создание пользовательских макрокоманд.
SoftICE функционирует в нулевом кольце защиты и загружается в память до загрузки операционной системы WINDOWS путем запуска программы WINICE.EXE.
Из операционной системы Windows, в отладчик SoftICE выход осуществляется, как правило, при нажатии комбинации клавиш Ctrl+D.
Рабочий экран отладчика SoftICE представлено на рис. 6.1.
Рис. 6.1. Рабочее окно отладчика SoftICE
Экран SoftICE – основной инструмент при отладке приложения. Он подразделяется на 7 окон и строку подсказки, позволяющие контролировать различные стороны процесса отладки. В таблице 6.1. перечислены все окна в порядке убывания их значимости.
Окно SoftICE | Описание |
Окно команд | Ввод команд и выдача сообщений |
Окно кода | Вывод машинных инструкций и/или исходных кодов |
Окно локальных переменных | Вывод содержимого текущего кадра стека |
Окно слежения | Вывод значений переменных, указанных командой WATCH |
Окно регистров | Вывод и изменение содержимого регистров и флагов. Если в ходе выполнения команды были изменены какие-либо регистры, то SoftICE подсвечивает их другим цветом. |
Окно данных | Отображение и изменение содержимого участка памяти |
Окно стека сопроцессора | Вывод содержимого стека (регистров) сопроцессора или MMX-регистров |
Строка подсказки | Краткая информация о командах SoftICE |
По умолчанию SoftICE выводит на экран строку подсказки и окна команд, кода и локальных переменных. В зависимости от задач можно открывать и закрывать другие необходимые окна. Для открывания и закрывания окон, а также для переключения из окна в окно используются следующие команды.
Команда открытия/закрытия | Команда переключения в окно | Окно |
WC | Alt+C | Окно кода |
WD | Alt+D | Окно данных |
WF | Невозможно | Окно стека сопроцессора |
WL | Alt+L | Окно локальных переменных |
WR | Alt+R | Окно регистров |
WW | Alt+W | Окно слежения |
Команды отладчику SoftICE можно вводить только тогда, когда курсор находится в окне команд либо кода.
Синтаксис команд
Команды SoftICE имеют следующие общие правила построения:
1. Все команды представляют собой нечувствительные в регистру строки длиной от 1 до 6 символов.
2. Адрес в SoftICE может быть представлен парой селектор:смещение или сегмент:смещение, либо одним смещением.
3. В используемых выражениях могут использоваться:
Символы группировки – круглые скобки ‘(‘, ‘)’.
Числа в шестнадцатиричном или десятичном формате.
Адреса.
Номера строк.
Строковые литералы.
Идентификаторы.
Операторы.
Встроенные функции.
Регистры.
В окне регистров детально представлено, также, значение регистра флагов.
Флаг | Описание | Флаг | Описание |
o | Флаг переполнения | z | Флаг нуля |
d | Флаг направления | a | Флаг дополнительного переноса |
i | Флаг разрешения прерывания | p | Флаг четности |
s | Флаг знака | с | Флаг переноса |
Строчный неподсвеченный символ означает, что флаг не установлен и имеет значение “0”. Выделенный заглавный символ показывает, что флаг имеет значение “1”. Например, o d I s Z a p c.
Переключение значения флага, когда курсор находится в одном из них осуществляется клавишей INSERT.
Использование прерываний в SoftICE
Одновременно в SoftICE можно установить до 256 прерываний. SoftICE поддерживает следующие типы контрольных точек.
1. Прерывания на инструкции, располагающиеся по конкретным адресам в памяти. Данные типы прерываний устанавливаются командой BPX (либо щелчком мыши на команде). SoftICE заменяет существующие инструкции командами INT 3.
2. Прерывания на обращение к памяти. SoftICE использует отладочные регистры для прерывания работы, когда читается (или исполняется) определенный байт, слово или двойное слово в памяти, или по этому адресу производится запись. Данный тип прерываний основан на использовании отладочных регистров DRx и чрезвычайно полезен для выяснения вопроса, когда и где происходит изменение программных переменных, а также для установки контрольных точек в исполняемом коде, размещенном в памяти «только для чтения». Для установки такого типа прерываний используется команда BPM.
3. Контрольные точки на прерываниях. SoftICE перехватывает прерывания, модифицируя таблицу дескрипторов прерываний. Для таких контрольных точек используется команда BPINT.
4. Прерывания ввода/вывода. SoftICE использует расширения отладочных регистров процессоров Pentium и Pentium Pro, чтобы отслеживать инструкции IN и OUT по заданному номеру порта. Этот тип прерываний устанавливается командой BPIO.
5. Прерывания на сообщения Windows. SoftICE отслеживает поступление в окно определенного сообщения (или сообщений из заданного диапазона). Для установки такой точки прерывания используется команда BMSG.
Любое из данных прерываний может быть задано со следующими дополнительными параметрами.
Условное выражение [IF выражение]. Для возникновения прерывания выражение должно иметь в результате ненулевое значение TRUE.
Действие при прерывании [DO “команда1; команда2; …”]. При возникновении прерывания будет автоматически выполнена указанная последовательность команд.
Форматы команд
Команда BPX
BPX [адрес] [IF выражение] [DO “команда1; команда2; …”]
Здесь, адрес указывает адрес установки прерывания. В качестве него может быть указан непосредственный адрес, либо имя вызываемой функции.
Например, BPX MessageBoxA,
Команда BPM
BPM [B|W|D] адрес [R|W|RW|X] [отладочный регистр] [IF выражение] [DO “команда1; команда2; …”]
BPM, BPMB – прерывание по обращение к заданному байту, BPMW – к слову, BPMD – к двойному слову.
R, W, RW – прерывание по чтению, записи, или по чтению и записи.
X – прерывание по исполнению указанного адреса (в отличие от команды BPX не производится модификация кода).
Отладочный регистр – указывает, какой регистр должен задействоваться при реализации команды (как правило, определяется автоматически).
Например, команда BPMD MyGlobalVariable W IF MyGlobalVariable==5 устанавливает прерывание по записи значения “5” в переменную размером двойное слово с именем MyGlobalVariable.
Команда BPINT
BPINT номер-прерывания [IF выражение] [DO “команда1; команда2; …”]
Например, BPINT 2E IF EAX==1E.
Команда BPIO
BPIO номер-порта [R|W|RW]
[IF выражение] [DO “команда1; команда2; …”]
R,W,RW – прерывание по чтению из порта (IN) записи в порт (OUT) или по любой из них.
Команда BMSG
BMSG дескриптор-окна [L] [1-сообщение-диапазона [последнее-сообщение-диапазона]] [IF выражение] [DO “команда1; команда2; …”]
L означает, чтобы сообщение было просто отображено в окне команд без активизации SoftICE.
Диапазоны сообщений показывают, какие сообщения необходимо фиксировать.
Например, BMSG 1001E WM_NCPAINT
Для удаления контрольных точек используется команда BC, например, BC MessageBoxA. Для удаления всех контрольных точек можно воспользоваться командой BC *.
Для того чтобы выключить контрольную точку без удаления необходимо воспользоваться командой BD, например BD MessageBoxA. Для включения отключенной контрольной точки существует команда BE.
Отображение информации в окне данных
Каждая строка окна данных отображает 16 байт области памяти в текущем формате в виде байт, слов, двойных слов или коротких или длинных вещественных значений.
Для изменения адреса отображаемой области данных необходимо указать адрес в команде D. Можно казать как непосредственный адрес, так и сослаться на регистр.
Например,
:D es:1000 – выводит содержимое памяти, начиная с адреса ES:1000h
:D ESI – выводит содержимое памяти, начиная с адреса, указанного в регистре ESI.
Команда D может использоваться одновременно и для указания формата отображения.
DB – формат побайтового отображения, DW – формат отображения в виде слов, DD – в виде двойных слов.
Например, DW es:1000
Пошаговое исполнение кода
Выполнять код в пошаговом режиме можно используя функциональную клавишу F8. По клавише F12 программа выполняется до тех пор, пока не встретится инструкция RET, ее можно эффективно использовать для выхода из подпрограмм.
- Модульная архитектура технических средств защиты по от несанкционированного использования
- Функционирование подсистем и модулей системы защиты по от несанкционированного использования
- Электронные ключи 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
- Лабораторные работы