返回介绍

23.5 Class Informer

发布于 2024-10-11 21:05:50 字数 2310 浏览 0 评论 0 收藏 0

如第 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 输出的详细程度。

enter image description here

图 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文