Мониторинг реестра, включая доступ к реестру в режиме ядра? - PullRequest
7 голосов
/ 29 января 2011

Я помню, что для своего последнего университетского проекта я написал монитор реестра C #, однако, когда я сравнил его с приложением Microsoft ProcessMonitor (я не могу вспомнить его точное название, но была компания, купленная MSoft), я не захватывал как много вызовов реестра.

Было ли это потому, что я использовал оболочку C # и, таким образом, он только перехватывал обращения к реестру в пользовательском режиме?

Я использовал эту обертку: http://www.codeproject.com/KB/DLL/EasyHook64.aspx

Чтобы перехватить доступ к реестру режима ядра, я должен написать на C ++?

Ответы [ 2 ]

9 голосов
/ 29 января 2011

Process Monitor использует драйвер ядра или ETW (см. Ниже) для захвата событий реестра.Я знаю, что Process Monitor использует ETW для некоторых своих данных (например, информацию о сети).

Механизм перехвата или обхода API, такой как EasyHook, обычно работает на уровне API Win32 (например, RegSetValue или RegCreateKeyEx вaDVAPI32.dll).Из-за этого у него есть упомянутое вами ограничение: регистрируются только обращения к пользовательскому режиму.Кроме того, перехват API обычно выполняется для каждого отдельного процесса, поэтому вам нужно внедрить себя в каждый процесс, для которого вы хотите собирать данные.Вам также придется следить за созданием процесса, если вы действительно хотите захватить все обращения в системе.

Отслеживание событий для Windows (ETW) было бы простым (условно говоря) способомзахватить все обращения к реестру.Основная идея ETW заключается в том, что разработчики ОС, среды выполнения, библиотек и даже повседневных приложений могут добавлять в свой код специальные инструменты для регистрации данных об интересных событиях и сценариях.Эта трассировка не требует больших затрат и может быть легко собрана.ETW существует уже некоторое время, но он действительно завоевал популярность во всем ядре, начиная с Vista.Почти все основные подсистемы ядра теперь оснащены ETW.В настоящее время он также является основой для журнала событий Windows.

ETW имеет значительную долю багажа и не имеет достаточной документации в некоторых областях, но если вам интересно, вы можете проверить следующее:

Чтобы перехватить доступ к реестру режима ядра, мне нужно было бы написать на C ++?

Нет, используя библиотеку TraceEvent , упомянутую выше, вы можете использовать C # для захвата и анализа обращений к реестру в режиме ядра и пользователя по всей системе.

2 голосов
/ 12 февраля 2011

Чтобы получить доступ к реестру в режиме ядра, нужно написать драйвер на C ++, другого способа сделать это не существует Process Monitor - это драйвер, поэтому он может регистрировать как пользовательский, так и доступ к ядру.

Вы можете скачать старые версии Regmon и Filemon здесь:

http://www.decuslib.com/decus/vmslt00a/nt/filemon.htm

http://www.decuslib.com/decus/vmslt00a/nt/regmon.htm

...