2016-03-21 28 views
0

我用C++来解决以下任务:我怎样才能获得通过特定的过程中使用的所有API的列表(Windows 7)中

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

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

该方法看起来很危险并且效果不好。

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

谢谢。

回答

3

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

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

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

另请注意,内核驱动程序并不是真正适合查看的地方。如果你想这样做,你想截取程序使用的DLL级别。

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

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

如果你想要一个现有的工具来做(大约),请考虑depends.exe。它已经存在了很长一段时间,并且工作得很好。

相关问题