3

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

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

现在,我必须扩展我的工具来监控对某些 Windows API 函数(如WriteProcessMemoryNtUnmapViewOfSectionVirtualAllocEx. 我发现许多工具可以让我跟踪来自单个进程的所有 API 调用,但是挂钩所有进程并不是一个好主意,是吗?

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

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

4

1 回答 1

3

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

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

于 2011-04-13T18:29:48.913 回答