Logo SNC Что-то навроде cправки по RegMon-у
 
О себе
Словами
Фото!
 
 Программирование 
 Visual Basic
 Download
 Trial Ware?
 
Примеры триала
 Kleptomania 2.4
 PE Explorer 1.95
 CPU Idle 6.0
 Anjelica 4.x
 PE Compact 1.84
 Adv. Direct Remailer
 WEBaby Screen Savers
 ClipMate 5.x
 Steganos Security Suite
 ACProtect
 
Plus
 Справка по RegMon
 Справка по FileMon
 
 
 
 
 
 

Яндекс цитирования

Рейтинг@Mail.ru

  Несмотря на некоторую внешнюю простоту программ-мониторов FileMon и RegMon, их возможности просто незаменимы в случаях, когда нужно отследить за действиями некоей программы. Смущает и даже отпугивает то, что они поставляются фактически без справки и какого-либо детального описания методик настройки, да и просто интерпретации отображаемых результатов. Возможно виной тому уверенность авторов в предназначении их детищ лишь программистам для отладки и поиска багов в их приложениях.

  Желая немного заполнить этот вакуум и уменьшить собственные проблемы по постоянному растолковыванию на ходу, что да как нужно делать, пишу вот эту заметку.

  Начну с описания RegMon-а, как наиболее популярного и востребованного инструмента. Написанное будет соответствовать версии 7.0 программы (недавно авторы объявили, что эта версия станет последней, а далее последует выпуск какого-то нового продукта, объединяющего в себе функции RegMon и FileMon). Если Вы еще не обзавелись утилитой, возьмите ее прямо сейчас.

  Ни в коем случае не устанавливайте программу в папку, в полном имени которой содержатся нелатинские символы! Будут проблемы...

  Будем считать, что Вам уже известно (в общих чертах) назначение Реестра Windows (сохранение операционной системой и приложениями необходимой информации о настройках и т.п.) и то, что он имеет древовидную иерархическую структуру (при просмотре в редакторе Реестра Regedit-e очень напоминающую файловую структуру дисков), и даже то, что для использования Реестра все программы должны использовать определенный набор функций, реализуемый принадлежащей операционной системе библиотекой ADVAPI32.dll). Остается только добавить, что именно вызов этих функций и перехватывается RegMon-ом и в наглядном и доступном виде отображается в окне программы.

  Важное замечание. Надо сказать, что большая часть из того, что написано на этой странице соответствует истине только в случае использования RegMon на системах Win9x/ME. Дело в том, что когда RegMon делает свою работу на системах на базе NT, то он при этом залазит значительно глубже в недра системы и, соответственно, информация, которую он при этом выдает пользователю, гораздо более глубинная и более подробная. Тем не менее, я надеюсь что данное мною описание работы RegMon-а на Win9x/ME поможет Вам самостоятельно разобраться и со спецификой, существующей в других операционных системах.

    Итак, в окне для каждого перехваченного обращения к Реестру в табличных столбцах последовательно показаны:
  1. # - номер текущей записи (для порядку и чтобы ориентироваться в этой куче...информации). Пропуски номеров означают, что из-за переполнения буфера RegMon не справляется с потоком. Выход - фильтровать сообщения.
  2. Time - время перехвата (можно выбрать или текущее время или время в секундах (восемь разрядов после запятой) отсчитываемое от запуска программы или последней очистки окна)
  3. Process - иконка программы, имя и 32-битный идетификатор того процесса, из которого происходит вызов функции обращения к Реестру. Для случая, когда мы следим за каким-то EXE-файлом, обычно имя его процесса будет отображаться не более чем 8-ю первыми буквами имени этого файла. В любом случае, что бы не забивать отчет ненужными Вам сведениями, следует отфильтровать все процессы, кроме исследуемого. Об этом несколько подробнее будет дальше.
  4. Request - фактически это имя функции, которую запросил текущий процесс для проведения некоторых действий с Реестром.
  5. Path - путь к ключу или значению, на который воздействовала функция. Путь принято отсчитывать не от корневого ключа Реестра, а от того ключа, который был предварительно открыт для некоторой операции до этого момента. Тогда путь этот будет выглядеть так: "0xC29A9FD0\{21B22460-3AEA-1069-A2DC-002B30309D}\InProcServer32". 0xC29A9FD0 - это так называемый hKey, манипулятор ключа Реестра - некое 32-битное число. Не хочется лезть в дебри, но поверьте мне на слово: Windows очень любит все нумеровать и когда некая функция создает ключ Реестра или открывает уже существующий, ему немедленно присваивается некий уникальный на данный момент номер, и дальнейшее обращение к ключу и его подключам и значениям идет только с использованием этого номера. Этот номер останется действительным до момента закрытия ключа с помощью функции CloseKey. Ключи вида HKCR\CLSID\{21B22460-3AEA-1069-A2DC-08002B30309D} выглядит как исключение из описанного выше правила, но на самом деле это просто упрощение авторов RegMon-a. Дело в том что корневые ключи являются постоянно открытыми после запуска Windows и их hKey-и имеют уже предопределенные значения, поэтому авторы решили для краткости заменить их аббревиатурными названиями этих ключей. Ух...запарился я писать. Тем не менее дальше:
  6. Result - результат, который возвратила функция. Функции API устроены таким образом, что после завершения работы передают в вызывавшую их программу результат своей работы. Можно рассматривать функции API, как подобие армейских команд, типа "Рядовой Хацкер, к разборке автомата присту - пить!", тогда в этой аналогии результатом можно считать бодрый ответ солдата: "Рядовой Хацкер задание выполнил!" (хотя возможны и варианты, вроде: "Товарищ прапорщик, дык вы ж вчерась последний автомат пропили..." и т.п.). Аналогично результат вызова API-функции может содержать не только успешную информацию, но и, например, номер произошедшей ошибки. RegMon показывает этот номер в виде имени константы, соответствующей этой ошибке. Наиболее частые результаты в RegMon-e: SUCCESS, NOTFOUND, NOMORE и, я думаю, они достаточно понятны.
  7. Other - информация о других используемых или возвращаемых функцией данных. Продолжая армейскую аналогию, это может соответствовать уточнению "Разборка проведена за 40 секунд" или "Товарищ прапорщик, жуть какая-то: в стволе застряла серебряная пуля!". Что именно покажет RegMon сильно зависит от конкретной функции и от решения авторов программы о важности этой информации. Например, CreateKey при успешном завершении всегда сообщает о том hKey, который присвоен созданному/открытому ключу, а функция CloseKey вообще не содержит дополнительной информации.


  Ну вот, теперь Вы уже знаете, что нам показывает программа в отчете-таблице. Сейчас немного о командах меню и соответствующих им кнопочкам панели инструментов.


Панель инструментов

    File
  • Open - Можно открыть из файла и поисследовать ранее сохраненный отчет
  • Save - Вы можете сохранить содержимое окна в файл отчета (текст, разделенный табуляторами). Вы можете просматривать отчет, открыв его, например в Excell. На панели инструментов - кнопочка в виде дискетки
  • Save As... - можете выбрать другое расположение и имя для файла отчета
  • Process Properties... - можно посмотреть на некоторые свойства выделенного в таблице процесса (негусто там их:)
  • Capture Events - включает/выключает режим перехвата обращений к Реестру. На панели инструментов это кнопка-лупа
  • Exit - дело сделано, уходим
    Edit
  • Copy - скопировать в буфер только выделенные части таблицы (строки копируются целиком)
  • Delete - удалить из таблицы выделенные записи

      Далее идут несколько команд для фильтрации, причем по вашему желанию измененные фильтры могут быть применены и к уже отмониторенным операциям

  • Iclude Process - добавляет выделенный процесс в группу отслеживаемых
  • Exlude Process - добавляет выделенный процесс в группу игнорируемых
  • Include Path - добавляет путь из выделенной строки в список отслеживаемых
  • Exlude Path - добавляет путь из выделенной строки в список игнорируемых
  • Find... - поиск строки, содержащей указанный Вами текст (производится по всем столбцам). Если есть в списке выделенная строка, то поиск начнется c нее, если нет, то c начала списка. Кнопка - в виде бинокля
  • Regedit Jump... - быстрый переход в Regedit к ключу или значению, соответствующему графе Path (кстати, срабатывает не всегда). Если ключ или значение не существует, то переход будет осуществлен по возможности максимально близко к запрошенному месту. Удобно вызывать также двойным щелчком мыши или нажатием на кнопку в виде зеленого доломанного кубика, надо полагать символа стабильности системы :)
  • Clear Display - удаляет все записи из таблицы. Если записей уже очень много рекомендую не использовать эту команду, а закрыть программу и открыть ее снова. Этим вы сэкономите уйму времени и иногда предотвратите зависание RegMon-a. Команде соответствует кнопочка, изображающая ластик, уже почти стерший полсписка (и тут он не слишком быстр:)
    Options
  • Font... - выбор шрифта для окна
  • Highlight Colors... - выбор двух цветов FG-цвета текста и BG-цвета фона для подсвечиваемых записей
  • Filter/Highlight... - определение фильтров для отображения и подсветки (подробности позже). Значок - воронка, через которую что-то льется
  • History Depth... - возможность ограничить максимальное число перехватываемых обращений к Реестру (0 - без ограничений). Значок - усеченный список.
  • Always On Top - окно программы поместить поверх всех окон
  • Auto Scroll - включить/отключить автопрокрутку содержимого окна, так чтобы всегда можно было видеть последнюю запись. Значок - список со стрелочкой, направленной в конец списка.
  • Clock Time - если включено, то для перехваченного события фиксируется текущее время (по системным часам компьютера). Значок переключается от часов до секундомера соответственно выбранному режиму
  • Show Milliseconds - дополнительно в цифре времени показывать и миллисекунды (только для режима фиксации системного времени)
  • Log Boot - эта команда присутствует в меню только при работе на Windows NT/2K/XP. Если Вы отметите этот пункт меню,то при следующей загрузке операционной системы вся активность по отношению к Реестру будет автоматически отслеживаться и записываться в файл REGMON.LOG в корневой директории системного диска. При этом в отчет попадут даже самые ранние обращения к Реестру всех системных драйверов и сервисов. Учитывая, что записывается практически все и вся, неплохо бы убедиться, что на диске достаточно места для размещения лог-файла очень большого размера (несколько десятков мегабайт!) Остановить запись в лог-файл можно только запустив его нормально, с графическим интерфейсом, при этом описываемый пункт меню уже не будет отмечен. Запись в лог прекращается также при выгрузке операционной системы.
    Help
  • Help... - вызов очень краткой справки на английском языке
  • About... - скромное напоминание о том, кто это все для нас соорудил. И спасибо им за это!

А теперь (я еще не надоел Вам?) коротко об основных функциях, которые можно увидеть в окне отчета:

CreateKey

Создает ключ для дальнейших действий с ним. Если ключ уже существует, то только открывает его

DeleteKey

Удаляет указанный ключ со всем его содержимым из Реестра. На компьютерах с основанными на NT операционными системами, удаление ключа, содержащего подключи невозможно, поэтому можно наблюдать каскадное удаление, начинающееся с подключей самого низшего уровня

DeleteValue

Удаляет указанное значение из Реестра

EnumKey

Перечисляет подключи указанного открытого ключа Реестра (по одному за каждый вызов). Other содержит имя очередного подключа

EnumValue

Перечисляет значения указанного открытого ключа Реестра (по одному за каждый вызов). Заканчиваются все перечисления обычно при получении результата NOMORE

OpenKey

Открывает ключ для дальнейших действий с ним

QueryValue

Возвращает значение по умолчанию (Default) данного ключа (тип - только строка). Other содержит прочитанную строку

QueryValueEx

Возвращает данные и тип указанного значения ключа. Other содержит прочитанные данные

QueryMultVal

Возвращает данные и тип для одного или более значений ключа (используется очень редко)

SetValue

Устанавливает значение по умолчанию (и только строковое!) для указанного ключа

SetValueEx

Сохраняет некоторые данные (тип - любой допустимый) в указанном значении ключа. Other содержит записываемые данные

QueryKey

Получает информации о ключе Реестра: кол-во подключей, кол-во значений в ключе и др. Хоть REGMON и выдает дополнительную информацию об этой функции в колонку Other, но по неизвестным мне причинам всегда указывает некоторое бессмысленное количество ключей и подключей :(

CloseKey

Закрывает ранее открытый ключ Реестра и записывает его данные в Реестр

FlushKey

Производит физическую запись всех данных ключа в файлы Реестра (используется редко, та