我如何记录一个非常大的 OOP 项目?

逆向工程 文件
2021-07-08 03:49:34

我正在尝试对游戏进行逆向工程,以进行修改。

游戏是一个庞然大物,通过使用 GCC RTTI + Debug Symbol 分析脚本,我发现它有 1674 个独特的类,其中一些继承自 4+ 直接基础和 10+ 间接基础,有时呈菱形样式(例如:该程序具有 Microsoft 的 IUnknown 类的自定义实现,通常具有多重继承的类在层次结构中多次具有 IUnknown)。

我发现很难记录我所看到的内容,以便能够更轻松地跟踪程序内部的 vtable 调用,特别是因为我实际想要逆向工程的构建不是具有符号的构建,因此我需要手动移植反正信息。

我试过UML,但它有一个严重的缺点:它不是为了表示类的成员方法的起源,你不能用UML知道类A,继承函数B,来自类C的6层在层次结构之上。

我发现的另一个问题是,没有明确的方法来组织我的结构和虚拟表,现有的反汇编软件即使支持某种结构,也无法很好地处理嵌套结构(即:如果在 20 字节的数据表中有一个 10 字节的结构)结构,它将 20 字节结构显示为它自己的 10 个字节,加上 10 个不透明字节,您需要手动转到另一个结构以检查它们的作用)。

另外,我发现在手动重建结构成员时没有办法轻松记录它们,我能想到的最好方法是使用谷歌电子表格,每个单元格都是一个字节(因此,当我想表示 4 字节类型时,我合并了 4 个单元格......但这很笨重)。

1个回答

如果您使用的是 IDA Pro,它有大量专门为此目的编写的插件和脚本。例如HexRaysCodeXplorerIDA Toolbag或一般https://www.google.com/search?q=vtable+reverse+script

如果不是,请切换到 IDA Pro。