24

有人可以给我一个高级解释他们如何能够监控每一个注册表访问吗?

http://technet.microsoft.com/en-us/sysinternals/bb896645

足够详细,以便我可以围绕各种子主题搜索并尝试编写自己的子主题?我知道他们使用了某种 dll 注入/API 挂钩,但我不确定他们是如何达到所有内核模式活动的。

4

1 回答 1

21

它在启动时加载一个虚拟驱动程序,该驱动程序在低级别进行监视。所以它不必在其他进程中注入任何东西。

http://www.decuslib.com/decus/vmslt00a/nt/filemon.htm上有一个关于 ProcMon 的前身之一 FileMon 如何工作的简短说明。

Filemon 的工作原理

对于 Windows 9x 驱动程序,Filemon 的核心是虚拟设备驱动程序 Filevxd.vxd。它是动态加载的,并在初始化时通过 VxD 服务 IFSMGR_InstallFileSystemApiHook 安装文件系统过滤器,以将自身插入到所有文件系统请求的调用链中。在 Windows NT 上,Filemon 的核心是文件系统驱动程序驱动程序,它创建过滤设备对象并将其附加到目标文件系统设备对象,以便 Filemon 将看到所有指向驱动器的 IRP 和 FastIO 请求。

当 Filemon 看到打开、创建或关闭调用时,它会更新一个内部哈希表,该哈希表用作内部文件句柄和文件路径名之间的映射。每当它看到基于句柄的调用时,它就会在哈希表中查找句柄以获得显示的全名。如果基于句柄的访问引用了在 Filemon 启动之前打开的文件,则 Filemon 将无法在其哈希表中找到映射,而只会显示句柄的值。

有关访问的信息被转储到一个 ASCII 缓冲区中,该缓冲区定期复制到 GUI 以便它在其列表框中打印。

同样,Regmon的另一个前身也是类似的:

Regmon 的工作原理

Windows 9x 上 Regmon 的核心是虚拟设备驱动程序 Regvxd.vxd。它是动态加载的,在初始化时它使用 VxD 服务挂钩(有关更多信息,请参阅我们 1996 年 5 月 Dobb 博士的期刊文章关于 VxD 服务挂钩)将自己插入到 Windows 95 内核中 16 个注册表访问函数的调用链中(虚拟机管理器)。所有注册表活动,无论是来自 16 位程序、Win32 应用程序还是设备驱动程序,都针对这些例程,因此 Regmon 会捕获机器上发生的所有注册表活动。

在 Windows NT 上,Regmon 加载一个设备驱动程序,该驱动程序使用我们为 NT 开发的称为系统调用挂钩的技术。当用户模式组件进行特权系统调用时,控制权被转移到 NTOSKRNL.EXE(Windows NT 操作系统的核心)中的软件中断处理程序。这个处理程序接受一个系统调用号,它在机器寄存器中传递,并索引到系统服务表中以查找将处理请求的 NT 函数的地址。通过用指向挂钩函数的指针替换此表中的条目,可以拦截和替换、增加或监视 NT 系统服务。Regmon 显然只与 Registry 相关的服务挂钩,它只是这种能力的一个例子。

当 Regmon 看到 open、create 或 close 调用时,它会更新一个内部哈希表,该表用作密钥句柄和注册表路径名之间的映射。每当它看到基于句柄的调用时,它就会在哈希表中查找句柄以获得显示的全名。如果基于句柄的访问引用在 Regmon 启动之前打开的键,Regmon 将无法在其哈希表中找到映射,而只会显示键的值。

有关访问的信息被转储到一个 ASCII 缓冲区中,该缓冲区定期复制到 GUI 以便它在其列表框中打印。

如果你喜欢阅读代码,这里是 FileMon 和 RegMon 的源代码:http ://www.wasm.ru/baixado.php?mode=tool&id=283 (来自http://forum.sysinternals.com/topic8038_page1.html

于 2011-01-28T23:28:18.413 回答