追踪Windows API调用

3

我目前正在开发一个.NET/Python工具,用于监视系统上的某些事件,例如写入特定的注册表键或创建带有特殊名称的文件。

经过评估,由于我不必关心WinXP支持,因此我使用Windows事件跟踪来获取所有文件和注册表活动的实时流,这很好用(通过从NT内核记录器中消耗事件)。

现在,我需要扩展我的工具以监视对某些Windows API函数的所有调用,例如WriteProcessMemoryNtUnmapViewOfSectionVirtualAllocEx。我找到了许多工具,可以追踪单个进程的所有API调用,但是挂钩所有进程不是一个好主意,对吧?

现在我想知道是否有可能使用ETW来做这件事。 内核提供了任何通知我API调用的提供程序吗? 如果没有,我还能做什么?

总结:如果我想捕获API调用,我是否必须挂钩每个单独的进程?

1个回答

3
一般来说,拦截系统API调用有两种方法:用户模式或内核模式拦截。对于用户模式API拦截,您需要挂钩每个进程以准确捕获/重定向到所需的API函数的每个调用。内核模式拦截避免了挂钩每个进程的需要,但也需要高级低级知识(和交叉签名代码签名证书以在内核模式下运行代码)。
有许多库可提供API挂钩功能,但我所知道的所有库主要都在用户模式下工作,即需要将系统范围的DLL注入到进程中。

有没有暴露用户级API的内核模式驱动程序? - leoluk
我知道MadCodeHook和EasyHook都包含内核模式驱动程序,并提供用户级API。这两个中的任何一个都可能满足您的需求。 - Joe Jordan
我使用EasyHook使其正常工作,这正是我正在寻找的。谢谢。 - leoluk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接