Отладка приложений с помощью Process Monitor
Отладка приложений с помощью Process Monitor
Если вы разработчик программного обеспечения под Windows, вам наверняка знакома утилита Process Monitor от Марка Руссиновича. С ее помощью можно легко отследить, к каким файлам или ключам реестра обращается приложение, просмотреть параметры ввода и вывода, работу с процессами и многое другое. Но мало кто знает, что Process Monitor можно также использовать в качестве отладочного инструмента, который позволяет разработчикам создавать события вывода отладчика и добавлять их в поток событий. Например, можно выводить текстовые сообщения прямо в трассировку при вызове и завершении функций, чтобы сопоставить их с другими перехватываемыми событиями.
Любые процессы, даже работающие с низкими привилегиями, могут передать через драйвер Process Monitor юникодную строку длиной до 2048 знаков.
Настройка фильтра
В настройках фильтров надо добавить условие "Operation", связку "is" и значение "Debug Output Profiling". Детализация фильтров по другим параметрам - на ваше усмотрение.
Включение Profiling Events
Для просмотра событий вывода отладчика надо активировать переключатель "Show Profiling Events" ("Показать события трассировки") на панели инструментов. Теперь Process Monitor готов к приему отладочных сообщений из нашей программы.
Теперь переходим непосредственно к кодингу. Пример взаимодействия с Process Monitor приведен в книге Марка Руссиновича и Аарона Маргозиса "Утилиты Sysinternals. Справочник администратора" (2012 год). Оригинал написан на C, я портировал код на FASM. Чтобы использовать такую отладку в своих программах, я собрал код в такую независимую функцию.
Code (Assembler) : Убрать нумерацию
- ;-------------------------------------------------------------
- ; Вывод диагностических сообщений из приложения
- ; с помощью Process Monitor
- ;-------------------------------------------------------------
- ; Параметры:
- ; wMessage - указатель на строку отладочного сообщения
- ;-------------------------------------------------------------
- proc pm_debug wMessage:DWORD
- locals
- cbSize dd ?
- endl
- FILE_DEVICE_PROCMON_LOG = 0x00009535
- FILE_WRITE_ACCESS = 0x0002
- FUNCTION = 0x81
- METHOD_BUFFERED = 0
- IOCTL_EXTERNAL_LOG_DEBUGOUT = (FILE_DEVICE_PROCMON_LOG shl 16) +\
- (FILE_WRITE_ACCESS shl 14) + (FUNCTION shl 2) + METHOD_BUFFERED
- pusha
- ; Открыть драйвер Process Monitor
- invoke CreateFile,.szProcmonDevice,GENERIC_READ+GENERIC_WRITE,\
- FILE_SHARE_READ+FILE_SHARE_WRITE+FILE_SHARE_DELETE,\
- NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
- cmp eax,INVALID_HANDLE_VALUE
- je @f
- mov ebx,eax
- ; Длина сообщения
- invoke lstrlen,[wMessage]
- shl eax,1
- lea esi,[cbSize]
- ; Отправить сообщение драйверу Process Monitor
- invoke DeviceIoControl,ebx,IOCTL_EXTERNAL_LOG_DEBUGOUT,\
- [wMessage],eax,NULL,0,esi,NULL
- ; Закрыть хэндл драйвера
- invoke CloseHandle,ebx
- @@:
- ; Дополнительно отправить строку сообщения в отладчик
- invoke OutputDebugString,[wMessage]
- popa
- ret
- .szProcmonDevice du '\\.\Global\ProcmonDebugLogger',0
- endp
В приложении пример программы с исходным текстом, которая получает текстовую строку и передает ее в Process Monitor и отладчик.
Просмотров: 4046 | Комментариев: 2
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(01.01.2017 в 10:59):
Отслеживание файлов и реестра часто помогает при отлове всяких триальных меток. А для сбора вызовов апи есть специальные инструменты и процмонитор к ним не относится.
brute
(01.01.2017 в 09:26):
Process Monitor,наверное, крутая вещь (с драйвером уровня ядра)!! Только вот приклад его остался не раскрыт. Справочник администратора прочитал, в нем ничего(мало) не описано про фильты/события - это юзеры уже должны сами знать. Понятно, что он заменяет filemoon+regmoon..
"Process Monitor..позволяет разработчикам".. А для реверса (чужих программ) как его использовать? Может он, например, работать в качестве pin-инструмента или api-логера, отслеживать копирование и сравнение строк, выделение памяти, собрать лог сисколов:) и т.п.? Поможет ли при исследовании этого?:
http://kitrap08.blogspot.ru/20...crackme.html
п.с. имхо, полезной была бы ссылка на "исходные материалы", исползованные для статьи. Так как некоторым приятнее разбираться в сях, нежели в фасм.. https://github.com/Wintellect/...aster/Source
"Process Monitor..позволяет разработчикам".. А для реверса (чужих программ) как его использовать? Может он, например, работать в качестве pin-инструмента или api-логера, отслеживать копирование и сравнение строк, выделение памяти, собрать лог сисколов:) и т.п.? Поможет ли при исследовании этого?:
http://kitrap08.blogspot.ru/20...crackme.html
п.с. имхо, полезной была бы ссылка на "исходные материалы", исползованные для статьи. Так как некоторым приятнее разбираться в сях, нежели в фасм.. https://github.com/Wintellect/...aster/Source
Добавить комментарий
Заполните форму для добавления комментария