[Previous] [Next]

Программа DebugPrint

Весьма интересная программа DebugPrint (полное название — Debug Print Monitor), была разработана фирмой PHD Computer Consultant Ltd., с программными продуктами которой подробнее можно ознакомиться на интернет сайте phdcc.com.

Совместно с программой пользовательского режима DebugPrint работает драйвер режима ядра DebugPrt.sys (разработанный в PHD CC Ltd.), который должен быть установлен заранее. Доступ к DebugPrt.sys клиентский драйвер должен получить средствами специального программного кода (использующего, в частности, редкий для драйверного кода вызов ZwCreateFile). Разработчик присоединяет к отладочной версии своего драйвера (в данной ситуации — клиентского по отношению к DebugPrt.sys) этот специальный программный код, предоставляемый в форме исходного текста на языке С, обеспечивая таким образом связь с DebugPrt.sys и вывод сообщений в его внутренние буферные области. Работа собственно программы Debug Print Monitor состоит в том, чтобы выводить в своем рабочем окне сообщения отладочного характера, переданные драйверу DebugPrt.sys клиентским драйвером.

В том случае, если при старте операционной системы драйвер-получатель сообщений (DebugPrt.sys) загружается раньше отлаживаемого драйвера, все сообщения из отлаживаемого драйвера, даже переданные в процедурах инициализации, будут сохранены драйвером-получателем. Впоследствии, все сообщения можно просмотреть при помощи Debug Print Monitor, имеющей удобный графический интерфейс и позволяющей сохранять сообщения в текстовом файле для последующего анализа.

Для разработчика драйвера использование функций передачи выглядят почти что как использование функций printf или sprintf. Однако следует изначально использовать приемы условной компиляции, чтобы использование этого отладочного трюка не навредило в окончательной версии драйвера (где такие операции являются непозволительной роскошью и при слишком обильной диагностике — могут приводить к сбою системы), а переход от отладочной (checked) версии к релизной (free) и наоборот отнимал бы минимум усилий у разработчика. При правильном применении условной компиляции разработчику достаточно выбрать среду компиляции DDK (checked/free), что уже определяет полностью версию собранного проекта (см. п. 2.1.2).

Драйвер DebugPrt.sys, необходимый для работы программы Debug Print Monitor, устанавливается при помощи мастера установки оборудования и inf файла и запускается в процессе загрузки операционной системы.

Программа DevView от Уолтера Оней

Программа DevView (полное название Device Object Viewer), созданная Уолтером Оней, автором замечательной книги "Programming The Microsoft Windows Driver Model", вышедшей уже в двух изданиях, является полным аналогом программы WinObj, правда, работающим только под Windows NT.

Программа PoolTagот OSR Inc

Программа PoolTag Monitor (PoolMon — консольная версия), поставляемая в составе пакета DDK, динамически (с интервалом в несколько секунд) отображает на экране состояние страничного и нестраничного пулов памяти режима ядра.

В рабочем окне программы (см. рисунок 2.18) отражаются события выделения и освобождения областей страничной и нестраничной памяти с использованием дескрипторов (при помощи вызова функции режима ядра ExAllocatePoolWithTag), что зачастую может облегчить поиск ошибок, связанных с некорректным использованием памяти. Выделение памяти с применением дескрипторов является необычным приемом для программистов приложений пользовательского режима, но при программировании модулей режима ядра это может оказаться лучшим решением, нежели получение области памяти просто по ее адресу, поскольку появляется возможность "персонального" мониторинга выделенных блоков памяти.

Рис.2.18
Программа PoolTag

Программа просмотра файлов

Простая программа просмотра файлов, вызываемая в старом добром Norton Commander (впрочем как и в современном TotalCommander) по нажатию клавиши F3, также может быть грозным орудием в руках опытного программиста.

На рисунке 2.19 видно (даже без использования программы Depends, упомянутой ранее), какие системные вызовы использует данный драйвер. В некоторых случаях эта незначительная информация может дать существенные сведения о принципах работы анализируемых примеров.

Рис. 2.19
Просмотр файла GiveIo.sys

Программа РЕ Explorer

Удобным в использовании средством изучения бинарных загружаемых модулей exe, dll, vxd, sys является программа РЕ Explorer фирмы Heaventools Software (рис. 2.21). 30-дневную испытательную версию можно загрузить с интернет-сайта фирмы по адресу heaventools.com.

Рис. 2.21
Окно просмотра заголовка файла Depends.exe в окне программы РЕ Explorer

Возможности этой программы обширны и не ограничиваются только лишь просмотром заголовков исполняемых модулей с общей информацией, просмотром секций и списков имен импортируемых и экспортируемых функций (это позволяют делать многие программы, в частности упомянутая программа Depends). Наличие встроенного дизассемблера позволяет определить в исследуемых модулях места вызова интересующих системных функций, в том числе — вызовов режима ядра.

При анализе импортируемых функций (импортируемых из системных динамических библиотек) программа РЕ Explorer показывает справочную информацию о протоколе вызова многих из них. По точности и подробности дизассемблирования программа РЕ Explorer приближается к дизассемблеру IDA Pro.

Своеобразной визитной карточкой РЕ Explorer является способность к просмотру и редактированию ресурсов, скомпилированных в данном бинарном модуле. Заметим, что в разделе ресурсов зачастую находится самая достоверная информация об авторе и дате создания драйвера (возможно даже — его предназначении), которая другим образом может быть получена, как правило, лишь системными средствами после установки драйвера, что далеко не всегда возможно и целесообразно.

Дизассемблер IDA

Интерактивный дизассемблер IDA фирмы DataRescue позволяет получать крупинки знания о взаимодействии драйверов с операционной системой путем изучения хорошо зарекомендовавших себя драйверов, исходный текст которых зачастую недоступен. Для исследования драйверов NT, которые собираются в бинарный модуль (файл) с расширением sys, наиболее подходят версии IDA после 4.15. Последнюю испытательную версию можно загрузить (после регистрационного запроса) с Интернет-сайта фирмы datarescue.com. На момент подготовки книги к печати это была версия 4.6.

Помимо того, что полная версия дизассемблера IDA позволяет работать с исполняемым кодом не только для процессоров Intel, весьма полезной и интересной особенностью этой программы является ее умение визуализировать структуру вызовов в графических диаграммах, как это показано на рисунке 2.22.

Рис. 2.22
Диаграмма вызовов в одном из окон дизассемблера IDA

Безусловно, рассмотреть возможности дизассемблера IDA Pro весьма сложно даже в рамках отдельной главы. Поэтому, учитывая мощь и полезность этой программы для самообразования разработчика драйверов, следует порекомендовать книгу Криса Касперских "Образ мышления — дизассемблер IDA", изд. Солон-Р, 2001, ISBN 5-93455-093-4, 480 страниц (правда, читателю следует быть готовым к тому, что в упомянутой книге рассмотрена далеко не последняя версия программы).