如何分析记录不完整的 DLL API?

逆向工程 调试 C++ dll
2021-06-13 19:50:23

我正在研究具有PSI5接口的传感器,并且我正在使用PSI Simulyzer盒来模拟测试期间的环境。这个盒子带有一个软件(某种数字示波器)来进行测量,但也提供了 API 头文件和库。我的目的是使用这个 API 来自动化非回归测试测量。

这个 API 的文档很差 - 它基本上是从头文件生成的 doxygen。我试图猜测缺少的细节,但有些东西在我的软件中不起作用。也就是说,我似乎无法在同步和异步模式之间切换,而原始软件有一个工作正常的下拉菜单。

我决定通过在几个(大约 20 个)DLL 函数上放置断点来分析原始软件,这些函数似乎与 Visual Studio 调试器中的配置有关,并注意调用了哪些函数以及使用哪些参数。到目前为止我没有成功 - 当我用相同的参数调用相同的函数时,通信模式不会改变。

以下是我认为导致我的方法失败的原因:

  1. 我没有为所有函数设置断点(大约有 100 个)
  2. 我从一开始就没有分析这些电话。也许我缺少某种预配置序列。
  3. 一些函数采用指针参数(例如int16_t *config),我不知道我需要提供多少字节。也许它们指向内部有更多指针的结构,我无法猜测。

我知道如何克服问题 1 和 2,但是手动进行这种扩展分析太费时了。有没有办法自动为 DLL 的所有函数设置断点,并在调用这些函数时记录参数?也许有一个调试器比 Visual Studio 更适合这个任务?

1个回答

我的第一个建议是联系供应商并向他们询问您的问题。您为产品及其 SDK 付费,因此如果后者不可用,他们应该为您提供支持。

至于监视 DLL 函数调用,我建议使用API Monitor及其外部 DLL 过滤器功能。它不会为您解决所有问题,因为您仍然需要弄清楚每个 DLL 函数需要多少个参数(您可以使用 IDA 提取该信息),但我认为它可以帮助您完成 90% 的工作.

在此处输入图片说明