.net - 跟踪 Windows API 调用

标签 .net python winapi trace etw

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

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

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

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

总结:如果我想捕获 API 调用,是否必须 Hook 每个进程?

最佳答案

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

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

关于.net - 跟踪 Windows API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652908/

相关文章:

c# - 在 .Net 应用程序中以集中或干净的方式检查所有操作的基于角色的权限

.NET 数字格式 - 2 位数字分隔符

c# - 如何通过重复 get 和 setter 来缩短属性

python - odeint 中的参数数组

c - Win32 API - 尝试读取文件时,它被截断了——为什么?

c# - 如何将 System.Windows.Media.Imaging.BitmapImage 转换为 System.Drawing.Image?

python - Python中字符串连接的时间复杂度

Python循环通过csv文件中的url返回\ufeffhttps ://

c++ - GetFreeDiskSpaceEx 如何返回(看似)错误的磁盘空间量?

windows - ObRegisterCallbacks : MSDN documentation/sample code discrepency