跟踪Windows API调用

时间:2011-04-13 17:04:23

标签: .net python winapi tracing etw

我目前正在研究一种用于监视系统上某些事件的.NET / Python工具,例如编写特定的注册表项或创建具有特殊名称的文件。

我评估了很多可能性,因为我不必关心WinXP支持,我使用Windows事件跟踪来获取所有文件和注册表活动的实时流,这很好(通过消耗事件)来自NT内核记录器。)

现在,我必须扩展我的工具来监控对某些Windows API函数的所有调用,例如WriteProcessMemoryNtUnmapViewOfSectionVirtualAllocEx。我找到了许多工具,允许我从一个进程跟踪所有API调用,但挂钩所有进程不是一个好主意,是吗?

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

摘要:如果我想捕获API调用,是否必须挂钩每个进程?

1 个答案:

答案 0 :(得分:2)

一般来说,拦截系统API调用有两种方法;用户模式或内核模式拦截。对于用户模式API拦截,您必须挂钩每个进程以准确捕获/重定向每个调用所需的API函数。内核模式拦截避免了挂钩每个进程的需要,但也需要高级的低级知识(以及交叉签名的代码签名证书以在内核模式下运行代码)。

有许多库可以提供API挂钩功能,但我相信我所知道的所有库都主要在用户模式下工作,即需要将系统范围的DLL注入流程。