我可以知道在运行时从哪个 dll 调用了哪个函数吗?

逆向工程 dll 职能
2021-07-05 12:32:27

我是逆向工程的新手,我想找出 Source2 引擎控制台中的哪个命令调用哪个函数(以及哪个 DLL)。为此,我想知道我怎么知道:

  1. 在运行时从哪个 DLL 调用哪些函数。
  2. 是否有调试器可以让我知道在两个时间戳之间执行了哪些代码?

提前致谢!

2个回答

看起来您正在寻找流程监控工具。这些工具使用Hooking(和类似技术)等技术来生成由受监控进程引起的 API 或事件的运行时列表。

首先,我想推荐Microsoft 的 Sysinternals 套件附带的一组工具具体来说,Process Monitor是一种监视文件、网络、注册表和进程操作事件的工具。它具有多种过滤功能,并且通常非常好且广为人知。sysinternals 套件包括许多其他相关工具,如果您对逆向工程感兴趣,您绝对应该对它感到满意。

其次,我个人是Rohitab 的 API Monitor 的忠实粉丝它有多个 API 挂钩引擎,并收集每个 API 的完整信息。它具有广泛的过滤功能,但如果选择许多 API 进行监控,一开始可能会有点不知所措。这是开始研究软件的好地方!

编辑

尽管这两个工具都非常有用,但它们无法记录内部函数,例如主要可执行文件或附带的 dll 中的函数。或者该工具之前不熟悉的任何功能。这是因为为了让 API 挂钩工作,您通常需要:

  1. 该函数应该可以从可执行文件中导出,并且
  2. API hooking 代码应该熟悉函数接受的参数。

如果您在记录内部调用之后,您似乎确实需要一个调试器来完成此任务。大多数优秀的逆向工程调试器(例如 ollydbg 和 x64dbg)都具有跟踪和记录所有函数调用的功能。这可能是一个好的开始。

这不是完全匹配,但不久前我写了这个https://github.com/marshalcraft/CheapoDllDependencyTool/blob/master/CheapoDllDependencyTool/bin/Debug/CheapoDllDependencyTool.exe

它在我的 GitHub 上,将列出提供可执行文件或 dll 的第一代依赖 DLL。这是非常基本的,不记得我是否列出了函数。

我敢打赌,必须有比我的更好的实现,但是当您想了解使用哪些 api 来做某事时,这对于查看 Web 浏览器是否依赖 ws2 WinSock 或其他东西的工作最少。