注册表监控,包括内核模式注册表访问?

时间:2011-01-28 22:38:24

标签: c# c++ api-hook

我记得在我最后一年的大学项目中,我编写了一个C#注册表监视器,然而,当我将它与Microsoft ProcessMonitor应用程序进行比较时(我记不清它的确切名称,但是它是由MSoft收购的公司),我没有抓到许多注册表电话。

这是因为我使用的是C#包装器,因此它只会捕获用户模式注册表访问吗?

我使用了这个包装器:http://www.codeproject.com/KB/DLL/EasyHook64.aspx

要捕获内核模式注册表访问,我必须用C ++编写吗?

2 个答案:

答案 0 :(得分:9)

Process Monitor使用内核驱动程序或ETW(见下文)来捕获注册表事件。我知道Process Monitor使用ETW来处理它的一些数据(比如网络信息)。

像EasyHook这样的API挂钩或绕行机制通常在Win32 API级别运行(例如,ADVAPI32.dll中的RegSetValueRegCreateKeyEx。因此,它具有您提到的限制:仅捕获用户模式注册表访问。此外,API挂钩通常是基于每个进程完成的,因此您必须将自己注入到要收集数据的每个进程中。如果您想真正捕获整个系统的所有访问,您还必须监视进程创建。

Event Tracing for Windows(ETW)是一种简单的方法(相对而言)来捕获所有注册表访问。 ETW背后的基本思想是操作系统,运行时,库,甚至日常应用程序开发人员都可以在其代码中添加特定的工具来记录有关有趣事件和方案的数据。这种跟踪开销很低,可以很容易地收集。 ETW已经存在了一段时间,但从Vista开始,它已经在整个内核中获得了很大的吸引力。几乎所有主要的内核子系统现在都配备了ETW。它现在也是Windows事件日志的基础。

ETW公平分配行李,在某些地区缺乏大量文件,但如果您有兴趣,可以查看以下内容:

  

捕获内核模式注册表   访问我必须用C ++编写吗?

不,使用上面提到的TraceEvent库,您可以使用C#捕获和分析整个系统的内核和用户模式注册表访问。

答案 1 :(得分:2)

要捕获内核模式注册表访问,您必须使用C ++编写驱动程序,没有任何其他方法可以执行此操作。 Process Monitor是一个驱动程序,这就是它可以捕获用户和内核访问的原因。

您可以在此处下载旧版本的Regmon和Filemon:

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

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