Справка по RegMon-у

Автор: content Четверг, Апрель 10th, 2008 Нет комментариев

Рубрика: Software

Краткая cправка по RegMon-у

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

Итак в окне для каждого перехваченного обращения к реестру в столбцах таблицы последовательно показаны: # — номер текущей записи (для порядку и чтобы ориентироваться в этой куче. ..информации). Пропуски номеров означают, что из-за переполнения буфера RegMon не справляется с потоком. Выход — фильтровать сообщения. Time — время перехвата (можно выбрать или текущее время или время в секундах (восемь разрядов после запятой) отсчитываемое от запуска программы или последней очистки окна) Process — иконка программы, имя и 32-битный идетификатор того процесса, из которого происходит вызов функции обращения к реестру. Для случая, когда мы следим за каким-то EXE-файлом, обычно имя его процесса будет отображаться не более чем 8-ю первыми буквами имени этого файла. В любом случае, что бы не забивать отчет ненужными Вам сведениями, следует отфильтровать все процессы, кроме исследуемого. Об этом несколько подробнее будет дальше. Request — фактически это имя функции, которую запросил текущий процесс для проведения некоторых действий с реестром. Path — путь к ключу или значению, на который воздействовала функция. Путь принято отсчитывать не от корневого ключа реестра, а от того ключа, который был предварительно открыт для некоторой операции до этого момента. Тогда путь этот будет выглядеть так: «0xC29A9FD0\{21B22460-3AEA-1069-A2DC-002B30309D}\InProcServer3 2″. 0xC29A9FD0 — это так называемый hKey, манипулятор ключа реестра — некое 32-битное число. Не хочется лезть в дебри, но поверьте мне на слово: Windows очень любит все нумеровать и когда некая функция создает ключ реестра или открывает уже существующий, ему немедленно присваивается некий уникальный на данный момент номер, и дальнейшее обращение к ключу и его подключам и значениям идет только с использованием этого номера. Этот номер останется действительным до момента закрытия ключа с помощью функции CloseKey. Ключи вида HKCR\CLSID\{21B22460-3AEA-1069-A2DC-08002B30309D} выглядит как исключение из описанного выше правила, но на самом деле это просто упрощение авторов RegMon-a. Дело в том что корневые ключи являются постоянно открытыми после запуска Windows и их hKey-и имеют уже предопределенные значения, поэтому авторы решили для краткости заменить их аббревиатурными названиями этих ключей. Ух…запарился я писать. Тем не менее дальше: Result — результат, который возвратила функция. Функции API устроены таким образом, что после завершения работы передают в вызывавшую их программу результат своей работы. Можно рассматривать функции API, как подобие армейских команд, типа «Рядовой Хацкер, к разборке автомата присту — пить!», тогда в этой аналогии результатом можно считать бодрый ответ солдата: «Рядовой Хацкер задание выполнил!» (хотя возможны и варианты, вроде: «Товарищ прапорщик, дык вы ж вчерась последний автомат пропили…» и т.п.). Аналогично результат вызова API-функции может содержать не только успешную информацию, но и, например, номер произошедшей ошибки. RegMon показывает этот номер в виде имени константы, соответствующей этой ошибке. Наиболее частые результаты в RegMon-e: SUCCESS, NOTFOUND, NOMORE и, я думаю, они достаточно понятны. 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 — дополнительно в цифре времени показывать и миллисекунды (только для режима фиксации системного времени) 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 Производит физическую запись всех данных ключа в файлы реестра (используется редко, так как сильно замедляет работу с реестром) Вряд ли Вам захочется видеть сразу всё, что имеет хоть какое-нибудь отношение к реестру. И здесь нам очень пригодится фильтр монитора. Откроем его диалоговое окно. Первый элемент фильтра это Include, то есть фильтр того, что мы хотели бы включить в отчет. Важно знать, что фильтрация происходит не по отдельным колонкам, а по строкам таблицы отчета целиком за исключением только номера записи и времени перехвата. Например, внесение в это поле названия функции приведет к перехвату именно этой функции, а ввод имени процесса позволит следить именно только за этим процессом. Допустимо использование символа подстановки * для определения произвольного фрагмента строки (например, фильтр HKLM*Microsoft дает возможность следить за любыми упоминаниями Microsoft в ветви реестра HKLM). Можно вводить любое число фильтров, разделяя их между собой точками с запятой. Регистр при фильтрации не учитывается.

Второй элемент фильтра это Exclude:, то есть фильтр того, что мы не хотели бы видеть в отчете. Таким способом можно исключить из отчета какие-нибудь очень активные по отношению к реестру программы, захламляющие наш отчет или отключить некую ветвь реестра, если нам не неинтересна активность в ней и тд. Синтаксис аналогичен фильтру Include.

Третий элемент, Highlight, это вообщем-то и не фильтр вовсе. Он не влияет на то, будет или нет отображаться вызов некоторой функции, а влияет лишь на то, будет ли он подсвечен (вы уже выбрали цвета подсветки?). Подсветка позволяет среди большого количества строк найти то, что Вас сейчас интересует. Синтаксис аналогичен фильтру Include. Этот фильтр можно менять на лету и изменения будут применены для уже отображенных ранее записей.

Удобно, что программа запоминает историю ввода фильтров, и Вы позже сможете вновь воспользоваться ими. Кстати, при перезапуске программа восстанавливает последний набор фильтров. Имейте это ввиду! Кроме строковых фильтров в диалоге есть несколько переключателей, которые могут производить фильтрацию по несколько другим критериям. Так например можно отслеживать только открытие ключей реестра — надо включить только Log Opens. Можно отключить фиксацию операций чтения из реестра (выключить Log Reads) и следить только за тем, что в него записывается (включить Log Writes). Переключатели позволяют Вам также выбирать для наблюдения только успешно завершившиеся вызовы функций (включить Log Successes) или, наоборот, только ошибочные (включить только Log Errors) . Я часто использую последний вариант фильтра для поиска несуществующих записей в реестре, к которым исследуемая программа пытается обратиться, но не находит их, см. пример здесь). А последний переключатель (Log Other) предлагает отключить мониторинг ДРУГИХ действий с реестром, надо полагать тех, что нельзя отнести ни к операциям чтения, ни к операциям записи. Возможно в эту группу попадают очень часто происходящие ошибочные обращения к дисковым файлам так, как будто это ветви реестра. Дык и ну их, убогих. Только не удивляйтесь, если одни и те же строки будут попадать в отчет при абсолютно разных позициях переключателей. Например, и для того, чтобы прочесть что-нибудь из реестра и для того, чтобы туда чего записать, все равно надо ключ реестра открыть, а потом закрыть. Вот и получаются такие накладочки, но фильтры все едино полезные. Можно применить новый фильтр даже не закрывая диалоговое окно, просто нажав на кнопку Apply. А чтобы сбросить все фильтры в значение по умолчанию, предусмотрена кнопка Defaults в диалоговом окне фильтра. Если Вы все усвоили, можно приступать к делу. Напоследок одно из возможных применений RegMon-a: настроив фильтры на слежку за какой-либо конкретной программой, можно, обратив внимания на ключи и значения реестра, что она пытается прочесть и не находит, отыскать скрытые настройки программы. Для начала попробуйте сделать это с обычным Блокнотом Windows. Но это так, игрушки. RegMon imho можно использовать и для более серьезных дел…

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты