我记得在我大学最后一年的项目中,我编写了一个 C# 注册表监视器,但是,当我将它与 Microsoft ProcessMonitor 应用程序进行比较时(我不记得它的确切名称,但它是一家被 MSoft 收购的公司),我没有捕获尽可能多的注册表调用.
这是因为我使用的是 C# 包装器,因此它只会捕获用户模式的注册表访问吗?
我使用了这个包装器:http: //www.codeproject.com/KB/DLL/EasyHook64.aspx
要捕获内核模式注册表访问,我必须用 C++ 编写吗?
我记得在我大学最后一年的项目中,我编写了一个 C# 注册表监视器,但是,当我将它与 Microsoft ProcessMonitor 应用程序进行比较时(我不记得它的确切名称,但它是一家被 MSoft 收购的公司),我没有捕获尽可能多的注册表调用.
这是因为我使用的是 C# 包装器,因此它只会捕获用户模式的注册表访问吗?
我使用了这个包装器:http: //www.codeproject.com/KB/DLL/EasyHook64.aspx
要捕获内核模式注册表访问,我必须用 C++ 编写吗?
Process Monitor使用内核驱动程序或 ETW(见下文)来捕获注册表事件。我确实知道 Process Monitor 将 ETW 用于其某些数据(如网络信息)。
像 EasyHook 这样的 API 挂钩或迂回机制通常在 Win32 API 级别(例如RegSetValue,或RegCreateKeyEx在 ADVAPI32.dll 中)运行。因此,它具有您提到的限制:仅捕获用户模式注册表访问。此外,API 挂钩通常是在每个进程的基础上完成的,因此您必须将自己注入到要收集数据的每个进程中。如果您想真正捕获整个系统的所有访问,您还必须监视进程创建。
Windows 事件跟踪(ETW) 将是一种(相对而言)捕获所有注册表访问的简单方法。ETW 背后的基本思想是操作系统、运行时、库,甚至日常应用程序开发人员都可以在他们的代码中添加特定的工具来记录有关有趣事件和场景的数据。这种跟踪的开销很低,并且可以很容易地收集。ETW 已经存在了一段时间,但从 Vista 开始,它确实在整个内核中获得了关注。现在几乎所有主要的内核子系统都配备了 ETW。它现在也是 Windows 事件日志的基础。
ETW 有相当多的包袱,在某些领域缺乏大量文档,但如果您有兴趣,可以查看以下内容:
要捕获内核模式注册表访问,我必须用 C++ 编写吗?
不,使用上面提到的TraceEvent库,您可以使用 C# 来捕获和分析整个系统的内核和用户模式注册表访问。
要捕获内核模式注册表访问,您必须用 C++ 编写驱动程序,没有其他方法可以做到这一点。Process Monitor 是一个驱动程序,这就是它可以捕获用户和内核访问的原因。
您可以在此处下载旧版本的 Regmon 和 Filemon: