C# SysInternal';什么是监控工作?

C# SysInternal';什么是监控工作?,c#,c++,c,operating-system,api-hook,C#,C++,C,Operating System,Api Hook,有人能给我一个高层次的解释,他们是如何能够监测每一个注册表访问 足够详细以至于我可以在谷歌上搜索不同的子主题并尝试写我自己的子主题?我知道他们使用了某种dll注入/API挂钩,但我不确定他们是如何达到所有内核模式活动的。它在启动时加载一个虚拟驱动程序,在低级别上进行监控。因此,它不必在其他进程中注入任何内容 关于ProcMon的前身之一FileMon的工作原理,有一个简短的解释 Filemon的工作原理 对于Windows 9x驱动程序,Filemon的核心是虚拟机 设备驱动程序,文件vxd.

有人能给我一个高层次的解释,他们是如何能够监测每一个注册表访问


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

它在启动时加载一个虚拟驱动程序,在低级别上进行监控。因此,它不必在其他进程中注入任何内容

关于ProcMon的前身之一FileMon的工作原理,有一个简短的解释

Filemon的工作原理

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

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

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

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

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,它显然只钩住与注册表相关的 服务,仅仅是这种功能的一个实例

当Regmon看到打开、创建或关闭调用时,它会更新内部 用作键句柄和注册表之间映射的哈希表 路径名。每当它看到基于句柄的调用时,它都会查找 哈希表中用于获取要显示的全名的句柄。如果 基于句柄的访问引用在Regmon启动之前打开的密钥, Regmon将无法在它的哈希表中找到映射,并且将 而是显示键的值

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


如果你喜欢阅读代码,这里是FileMon和RegMon的源代码:(from)

基本上mark russinovich可以做任何他想做的事情,他就像上帝一样!!这没什么大不了的。如果你去linux世界,你会发现很多功能强大的工具,可以做得更多
gdb
lsof
strace
cat | echo/proc/{你需要知道的每件事都非常多}
。。。猜猜你能读到什么source@mathk你将如何在linux中编写windows注册表监视器?@David Heffernan:linux上没有注册表这样的东西,所以你的问题没有真正意义。除此之外,您还可以使用D-Bus:来完成您想要完成的工作,或者根据具体情况使用/proc/fschange。@mathk:是的,Linux的工作方式不同,这意味着它更容易完成某些任务,而且更开放。你还有别的观点吗?(提示:“嗯,Linux做得更好”并不是所有关于Windows的问题的正确答案——即使你是正确的,它对OP几乎没有用处)至于注册表——听说过gconf吗?是的,从技术上讲,它是GNOME的一部分,但它看起来很像Windows注册表的一个端口(我不认为这是件好事)。您可以从Internet Archive上的wasm.ru获得它: