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

时间:2016-03-21 18:19:12

标签: c++ api windows-7 interception

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

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

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

这种方法看起来很危险而且无效。

如果有更简单的方法来处理这项任务?如果有办法获得流程的API的完整列表,而不仅仅是那些在一段时间内调用的API?

谢谢。

1 个答案:

答案 0 :(得分:3)

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

我可以编写一个程序(例如)以字符串的形式从用户那里获取交互式输入,然后使用GetProcAddress通过该名称查找函数的地址,并调用该函数。 / p>

请注意,虽然使用交互式输入来读取函数名称是相当不寻常的,但从一些外部文件中读取它们是相当普遍的。

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

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

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

如果您希望现有工具(大致)执行此操作,请考虑depends.exe。它已经存在了很长一段时间,效果很好。