Blog. Just Blog

Отладка приложений с помощью Process Monitor

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Отладка приложений с помощью Process Monitor
Отладка приложений с помощью Process Monitor

Если вы разработчик программного обеспечения под Windows, вам наверняка знакома утилита Process Monitor от Марка Руссиновича. С ее помощью можно легко отследить, к каким файлам или ключам реестра обращается приложение, просмотреть параметры ввода и вывода, работу с процессами и многое другое. Но мало кто знает, что Process Monitor можно также использовать в качестве отладочного инструмента, который позволяет разработчикам создавать события вывода отладчика и добавлять их в поток событий. Например, можно выводить текстовые сообщения прямо в трассировку при вызове и завершении функций, чтобы сопоставить их с другими перехватываемыми событиями.

Любые процессы, даже работающие с низкими привилегиями, могут передать через драйвер Process Monitor юникодную строку длиной до 2048 знаков.

Настройка фильтра
Настройка фильтра

В настройках фильтров надо добавить условие "Operation", связку "is" и значение "Debug Output Profiling". Детализация фильтров по другим параметрам - на ваше усмотрение.

Включение Profiling Events
Включение Profiling Events

Для просмотра событий вывода отладчика надо активировать переключатель "Show Profiling Events" ("Показать события трассировки") на панели инструментов. Теперь Process Monitor готов к приему отладочных сообщений из нашей программы.

Теперь переходим непосредственно к кодингу. Пример взаимодействия с Process Monitor приведен в книге Марка Руссиновича и Аарона Маргозиса "Утилиты Sysinternals. Справочник администратора" (2012 год). Оригинал написан на C, я портировал код на FASM. Чтобы использовать такую отладку в своих программах, я собрал код в такую независимую функцию.
  1. ;-------------------------------------------------------------
  2. ; Вывод диагностических сообщений из приложения
  3. ; с помощью Process Monitor
  4. ;-------------------------------------------------------------
  5. ; Параметры:
  6. ;    wMessage - указатель на строку отладочного сообщения
  7. ;-------------------------------------------------------------
  8. proc pm_debug wMessage:DWORD
  9.         locals
  10.                 cbSize dd ?
  11.         endl
  12.  
  13.         FILE_DEVICE_PROCMON_LOG = 0x00009535
  14.         FILE_WRITE_ACCESS       = 0x0002
  15.         FUNCTION                = 0x81
  16.         METHOD_BUFFERED         = 0
  17.  
  18.         IOCTL_EXTERNAL_LOG_DEBUGOUT = (FILE_DEVICE_PROCMON_LOG shl 16) +\
  19.           (FILE_WRITE_ACCESS shl 14) + (FUNCTION shl 2) + METHOD_BUFFERED
  20.  
  21.         pusha
  22.  
  23.         ; Открыть драйвер Process Monitor
  24.         invoke  CreateFile,.szProcmonDevice,GENERIC_READ+GENERIC_WRITE,\
  25.                 FILE_SHARE_READ+FILE_SHARE_WRITE+FILE_SHARE_DELETE,\
  26.                 NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
  27.  
  28.         cmp     eax,INVALID_HANDLE_VALUE
  29.         je      @f
  30.  
  31.         mov     ebx,eax
  32.  
  33.         ; Длина сообщения
  34.         invoke  lstrlen,[wMessage]
  35.         shl     eax,1
  36.         lea     esi,[cbSize]
  37.         ; Отправить сообщение драйверу Process Monitor
  38.         invoke  DeviceIoControl,ebx,IOCTL_EXTERNAL_LOG_DEBUGOUT,\
  39.                 [wMessage],eax,NULL,0,esi,NULL
  40.  
  41.         ; Закрыть хэндл драйвера
  42.         invoke  CloseHandle,ebx
  43. @@:
  44.         ; Дополнительно отправить строку сообщения в отладчик
  45.         invoke  OutputDebugString,[wMessage]
  46.  
  47.         popa
  48.         ret
  49.  
  50. .szProcmonDevice du '\\.\Global\ProcmonDebugLogger',0
  51.  
  52. endp
Для большей универсальности я дополнил функцию выводом отладочных сообщений через OutputDebugString. Это на тот случай, если придется запускать программу под OllyDbg.

В приложении пример программы с исходным текстом, которая получает текстовую строку и передает ее в Process Monitor и отладчик.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

Process.Monitor.Debugging.Demo.zip (2,795 bytes)


Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 1359 | Комментариев: 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

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 2 (0.0047 сек.) / Память: 4.5 Mb
Наверх