跟踪Windows API调用
我现在正在开发一个工具,用于监控系统上的某些事件,比如写入特定的注册表项或者创建特定名称的文件。
我考虑了很多方案,因为我不需要支持Windows XP,所以我选择使用Windows事件追踪(Event Tracing for Windows),这样可以实时获取所有文件和注册表的活动,这个方法效果很好(通过从NT内核日志中获取事件)。
现在,我需要扩展我的工具,去监控一些Windows API函数的调用,比如WriteProcessMemory
、NtUnmapViewOfSection
和VirtualAllocEx
。我找到了一些工具,可以追踪单个进程的所有API调用,但对所有进程进行监控似乎不是个好主意,对吧?
我在想,是否可以利用ETW来实现这个功能。内核有没有提供什么工具,可以让我收到API调用的通知?如果没有,我还有什么其他办法呢?
总结:如果我想捕捉API调用,难道必须对每个进程都进行监控吗?
1 个回答
3
一般来说,拦截系统API调用有两种方法:用户模式拦截和内核模式拦截。用户模式拦截的意思是,你需要对每个进程进行“钩子”操作,这样才能准确捕捉到每次对你想要的API函数的调用并进行重定向。而内核模式拦截则可以避免对每个进程都进行钩子操作,但这需要你有更高级的底层知识(还需要一个跨签名的代码签名证书,才能在内核模式下运行你的代码)。
市面上有很多库可以提供API钩子的功能,但我知道的那些主要都是在用户模式下工作的,也就是说,它们需要将DLL注入到系统中的每个进程里。