IDA Pro 列出 COM 方法

逆向工程 艾达 dll 电脑
2021-06-30 22:08:41

我有一个 dll 文件,其中包含一些导出的函数和 COM 方法。

这是我的 DLL 导出查看器打开的 dll 信息:

在此处输入图片说明

但是当我在 ida pro 中打开 dll 文件时,我看到的只是导出的函数并且没有列出任何 COM 方法。

在此处输入图片说明

如何在ida pro中查看COM方法的起始地址列表?

2个回答

原始问题

这并不像人们希望的那么简单,原因很简单,COM 对象是内部对象,不会通过导出函数来公开它们的实现细节。

相反,COM 提供了一个接口来创建特定类的 COM 实例,使用类 UUID(通常称为CLSID)作为标识 COM 类的手段。COM 对象是通过调用此处CoCreateInstance记录的创建的

返回的对象是一个 C++ 对象,它实现了一组作为该 COM 对象的虚拟函数表公开的 API,因此不需要导出这些函数,而且您无法使用 IDA 的导出视图找到它们。

旁注:虽然与 COM 相关的逆向问题并不太稀缺,但与逆向 COM 类相关的问题要少得多。大多数与 COM 相关的问题都涉及尝试使用 COM 对软件进行逆向工程,而 OP 似乎正在尝试对 COM 类进行逆向工程。我想这在某种程度上是因为大多数 COM 类都在某种程度上被记录在案。

DLL 导出查看器结果

如此处所述,DLL 导出查看器支持从嵌入在 DLL 中的类型库资源读取COM 类型库我将在几段中描述 COM 类型库,您将看到如何在 IDAPython 中获取这些数据。

来自原始网站:

版本 1.10

  • 添加了对 64 位 DLL 文件的支持。

  • 新选项:显示 COM 类型库的方法和属性。

实际上对 COM 提供程序进行逆向工程

尽管您的问题有点误导,但仍有一些资源可以帮助您 RE COM 对象提供程序。

文档

一些资源可以在线深入了解COM(从而逆向),例如MSDN的基本COM开发指南Microsoft System Journal关于come type libraries

视窗工具

首先,对于 COM 对象的基本理解和浏览您机器上定义的 COM 对象的能力,您应该尝试使用Oleview,可作为windows Driver Kit或类似工具的一部分下载

OleView.exe 可让您列出已安装的 COM 对象、它们提供的接口(描述该 COM 对象实现的实际方法)、每个 COM 对象的类 ID 等。如果您能在这里找到您的 COM 对象,它将对您有很大帮助在后期。

班级通知插件

使用通知程序 IDA 插件,您可能能够找到您的 COM 对象的 RTTI 信息。这将帮助您找到并部分映射 COM 对象的虚拟功能表(再次通过实际指向实现方法来描述 COM 对象的可用功能)。使用 IDA 的内置 COM Helper 插件也可能有用。

使用python手动解析类型库文件(*.tlb)

尽管这大致就是 Oleview.exe(以及类似的)正在做的事情,但您可以手动解析*.tlb您找到的任何文件(通常位于 COM DLL 附近或作为资源嵌入其中)以获取您感兴趣的信息(包括实现函数的二进制文件中的偏移量)。pythoncom为此存在一个名为 python 的模块,作为 python for win32 扩展的一部分。文档在这里,模块可以在这里下载

Dieter Spaar有一个旧插件,它使用 TypeLib API 来枚举 COM 方法并找到它们的地址。代码有些旧,因此可能需要对以后的 IDA 版本进行一些调整。请注意,它依赖于类型库信息的存在,因此可能不适用于准系统(无类型库)COM 对象。

它基于Matt Pietrek 的这篇文章

编辑:还有一件事。为了找出接口方法的地址,插件必须实际创建实现接口的类(通过调用CoCreateInstance),这意味着它将执行来自 DLL/OCX 的代码因此,您需要小心处理来源不明的文件。