COM dll 中的补丁方法

逆向工程 视窗 反编译 dll 修补 电脑
2021-06-13 17:39:36

我有一个类和一个接口的 COM DLL。
当我用 COMView 打开它时,我会看到类/接口中的所有方法。

我想修改此 COM 中一种方法的行为,但我不知道如何修改。我在调试器中调试它失败,因为它使用多个线程并且我找不到 DLL 的代码。

有没有办法在不使用调试器的情况下修补函数?

1个回答

调试 COM 确实有点问题,但是您不一定需要调试它来检索您感兴趣的函数的地址。此外,还有一些技巧可以在调试时找到与 COM 相关的函数。

获得函数的地址后,只需使用任何修补工具打开该 COM dll 并根据需要修补程序集。只需谷歌搜索一个你觉得舒服的二进制补丁工具。

我基本上可以想到三种方法来获取该函数的地址:

  1. 首先,您感兴趣的函数可能会被导出。在大多数情况下,这不是 COM 服务器运行所必需的,但偶尔会发生。如果是导出的,这显然是最容易找到的方法。
  2. 您可以编写一个使用 COM 服务器的小型可执行文件。该可执行文件应该调用您要查找的函数,通过调试它,您将找到您要查找的函数的 RVA。只需在内存中修补并保存(例如,olly 允许这样做)或将 RVA 转换为文件偏移量并静态修补。
  3. 这有点困难,但仍然可能。您可以静态查找 COM 对象的虚拟表并使用类型库解析它然后,您可以获得相同的函数偏移量。有关类型库的更多信息,请参阅此问答