c++ - 如何获取特定进程使用的所有 API 的列表(Windows 7)

标签 c++ api windows-7 interception

我使用 C++ 来解决以下任务:

我想获取特定进程使用的所有 API 函数的列表。它可以是任何 Windows 7 进程 - 32 或 64,包括系统进程。

到目前为止,我看到的唯一解决方案是创建一个内核驱动程序来拦截所有可能的 API,监听它们一段时间并检查特定进程是否调用了它们。它不能保证该过程的完整 API 列表,但至少会给我其中的一些。

这种方法看起来很危险,而且效果不佳。

是否有更简单的方法来处理该任务?是否有办法获取进程 API 的完整列表,而不仅仅是在一段时间内调用的 API?

谢谢。

最佳答案

不,这是不可能的,至少在任何有意义或一般意义上是不可能的。

我可以编写一个程序(例如)以字符串的形式从用户处获取交互式输入,然后使用 GetProcAddress 查找具有该名称的函数的地址,并调用该函数功能。

请注意,尽管使用交互式输入来读取函数名称并不常见,但从某些外部文件中读取它们却更为常见。

另请注意,内核驱动程序也不是正确的查找位置。如果要执行此操作,则需要在程序使用的 DLL 级别进行拦截。

一种可能性是为程序静态链接到的每个 DLL 创建一个“影子”DLL。然后,如果它调用 LoadLibrary/GetProcAddress,您可以动态拦截这些调用以确定它在其中调用了哪些函数,等等。

这仍然不会得到绝对结果,因为它可以(如上所述)在运行时获取数据以查找一次执行中未在另一次执行中使用的函数。

如果您希望现有工具(大致)做到这一点,请考虑 depends.exe .它已经存在了很长一段时间,并且运行良好。

关于c++ - 如何获取特定进程使用的所有 API 的列表(Windows 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36138751/

相关文章:

c++ - C++ 11中的运算符模数变化?

javascript - api 回调的输出显示第一个对象的数据

r - 使用 R 在 Windows 7 中安装 Pandoc

windows - Windows 管理员和 Windows 系统用户有什么区别

python - 无法访问 Eve REST API

c++ - Windows 7 中的命名管道

c++ - BoUML 工具已停止在类 View 上显示滚动条

c++ - 函数体调用 C++ 末尾的奇怪循环

c++ - val != std::numeric_limits<double>::infinity() 或 !isinf(val) 或 isfinite(val)

python - 使用 Python 请求发布到 CloudApp API (AWS)