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

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

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

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

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

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

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

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

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

  • ETW MSDN文档
  • ETW和事件日志
  • Xperf (Windows性能工具包的一部分),用于收集和分析跟踪
  • logman.exe和tracerpt.exe用于收集和分析跟踪
  • TraceEvent ,一个用于收集和分析ETW事件的.NET库
  • 从本机代码使用NT内核记录器

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

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

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

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

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

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