- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
23.5 Class Informer
如第 8 章所述,C++ 程序可能包括有助于你发现类名称和类层次结构的信息。这些嵌入的信息旨在为 C++ 运行时类型识别(RTTI)提供支持。
Sirmabus 开发的 C++ Class Informer 插件主要用于逆向工程使用 Microsoft Visual Studio 编译的 C++ 代码。Class Informer 通过标识虚拟函数表(vtable 或 vftable )及 RTTI 信息,然后提取出相关类名称与继承信息,从而自动完成 Igor Skochinsky 在他的有关逆向工程 Microsoft Visual C++1 的 OpenRCE 文章中描述的大部分工作。
1. 参见 http://www.openrce.org/articles/fullview/23 。
表 23-5 Class Informer
名称 | Class Informer |
作者 | Sirmabus |
发布 | 仅二进制格式 |
价格 | 免费 |
描述 | MSVC C++ 类识别插件 |
信息 | http://www.macromonkey.com/downloads/I DAPlugIns/Class_ Informer102.zip |
激活后,Class Informer 将显示如图 23-4 所示的选项对话框,以便于用户规定 Class Informer 应在二进制文件的什么位置扫描 vtable,并允许用户控制 Class Informer 输出的详细程度。
图 23-4 Class Informer 选项对话框
用户单击“Continue”(继续)按钮后,Class Informer 将开始扫描,扫描过程可能要花费一段时间,具体取决于二进制文件的大小以及 Class Informer 遇到的虚拟函数表的数量。扫描完成后,Class Informer 将在 IDA 中打开一个新的选项卡式窗口以汇总扫描结果。Class Informer 输出的部分代码清单如下所示:
➊ Vftable ➋ Method count ➌ Class & structure info 0041A298 0003 ChildClass; [MI] 0041A2A8 0003 ChildClass: SuperClass1, SuperClass2; [MI] 0041A2B8 0003 SuperClass1; [SI] 0041A2C8 0003 SuperClass2; [SI] 0041A2D8 0004 BaseClass; [SI] 0041A2EC 0005 SubClass: BaseClass; [SI]
对于发现的每个虚拟函数表,Class Informer 将显示 vtable 的地址(➊)、方法计数(➋,等于 vtable 中所包含的函数指针的数量),以及有关由嵌入的 RTTI 信息得到的每个类的摘要信息(➌ )。发现的类信息包括类名称、任何超级类的名称,以及说明类是继承自单一基类( [SI]
),还是继承自多个基类( [MI]
)。对于发现的每个 vtable,Class Informer 还会对所有与类有关的 RTTI 相关数据结构应用结构模板,并根据 Microsoft 的名称改编方案命名每个结构及类的 vtable。不管逆向工程多么复杂的 Visual C++代码,Class Informer 都可以为你节省大量时间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论