airbus-cert/comida

GitHub: airbus-cert/comida

ComIDA 是一款 IDA Pro 插件,通过自动追踪 COM GUID 引用并推断接口类型,帮助逆向分析师高效分析使用 COM 组件的二进制模块。

Stars: 232 | Forks: 29

# ComIDA 一个 IDA 插件,可在分析使用 COM 的模块时提供帮助。它的工作原理是搜索对已知 COM GUID(类或接口)的数据引用, 对于 Hex-Ray 插件用户,还能推断出使用以下函数/方法的类型: * `CoCreateInstance` 函数 * `CoGetCallContext` 函数 * `QueryInterface` 方法 使用前: ![COM No Plugin CoCreateInstance](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b62d77b398182420.png) 使用后: ![COM No Plugin CoCreateInstance](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2f767fa5f9182427.png) ## 如何安装? 只需将 `comida.py` 脚本放入 IDA 的 `plugins` 文件夹中即可。 ``` git clone git@github.com:Airbus-CERT/comida.git mklink "C:\\Program Files\\IDA Pro 7.4\\plugins\\comida.py" "comida\comida.py" ``` 启动 IDA 并按下 `Ctrl-Shift-M` 即可激活它。 ## 它是如何工作的? ### COM 对象引用 `ComIDA` 有两个主要功能: * 查找和跟踪 GUID * 为 Hex-Ray 插件用户推断类型 为了查找和跟踪 GUID,我们只需搜索直接的操作数指令,例如 `mov ax, GUID`,其中 GUID 与 `HKCR\Classes` 或 `HKCR\Interfaces` 注册表配置单元中存在的相匹配。 我们在表格中预览结果,以便交互并轻松浏览所有 COM 对象引用。 ![COM reference](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/fee1db65a8182434.png) 双击即可跳转到感兴趣的代码处。 ### 类型推断 主要目标是方便分析师的工作。当一个模块使用 COM 服务时,通常会用到: * 使用 `CoCreateInstance` 创建实例 * 使用 `CoGetCallContext` 获取实例 * 使用 `IUnknown` 接口的 `QueryInterface` 方法转换接口,所有 COM 类都继承自该接口 comIDA 将针对这些模式执行类型推断。 在 comIDA 中,推断的工作流程如下: 1. 查找感兴趣的函数 2. 读取 GUID 参数并获取接口类型 3. 更改变量的输出类型 为了查找感兴趣的函数,我们针对每种类型使用了两种启发式方法: - 对于函数类型,如 `CoCreateInstance` 或 `CoGetCallContext`,我们直接在导入表中搜索。 - 对于方法类型,如 `QueryInterface`,我们利用 Hex-Rays AST 来计算方法名称。 之后,我们使用 Hex-Ray 钩子在反编译阶段遍历函数的 AST。当我们发现对感兴趣方法的调用时,我们会根据 GUID 参数(接口的 GUID)对输出参数进行类型更改。 为了选择正确的类型,我们使用两种启发式方法来挑选类型: * 我们检查注册表配置单元 `HKCR\\Interfaces` 中与接口 GUID 关联的名称 * 我们尝试直接将其转换为与第三个参数关联的符号名称(通常命名为 `IID_IWbemLocator` 等……我们只取 IWbemLocator) 接下来就是见证奇迹的时刻: 使用前: ![COM No Plugin CoCreateInstance](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b62d77b398182420.png) 使用后: ![COM No Plugin CoCreateInstance](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2f767fa5f9182427.png) 使用前: ![COM No Plugin CoGetCallContext`](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/72335d3ef2182440.png) 使用后: ![COM No Plugin CoGetCallContext`](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/9b0d9441d9182447.png)
标签:COM组件, DAST, IDA插件, 云资产清单, 恶意软件分析, 类型推断, 逆向工具, 逆向工程