(部分?)在体系结构之间传输符号名称的自动化

逆向工程 符号
2021-07-02 13:56:37

我有两个版本的应用程序:一个版本为 ARM64 iOS 编译,另一个版本为 ARM32 Android。我正在研究 ARM64 版本,但它几乎删除了所有符号。ARM32 版本根本没有被剥离,因此所有符号名称都保持不变。

到目前为止,我一直在为游戏的每个版本使用两个 Binary Ninja 选项卡,并且通过在 ARM32 选项卡中找到相同的功能,然后传输我看到的符号名称,找到了 ARM64 版本的符号名称。然而,这很慢而且很烦人,所以我开始寻找一种通过比较二进制文件来匹配符号的可能方法。这听起来像是一个很难解决的问题,我什至会满足于部分工作(例如只传输它确定的东西的工具,这让我来破译一些更复杂的部分)。

我想我在这里有点希望,但我认为值得询问以防万一之前有人这样做过。

2个回答

Ghidra 有一个版本跟踪工具,其中包含许多分析选项,可以比较二进制文件的功能以命名事物。我在 ppc->mips 固件上使用过它。我从一个漂亮的 RE'ed PPC 图像和一个带有 ghidra 中默认工具的新 MIPS 固件开始,我在新功能中命名了一些功能。在版本跟踪器工具中打开它们,我尝试了其中一个分析选项“精确符号匹配”,它选择了许多要命名的附加函数,然后在这些函数的基础上命名越来越多。添加更多分析选项应该会产生更多/更好的结果,根据二进制文件需要花费多少时间。

我认为Diaphora支持跨架构二进制差异,因此这可能是一个额外的尝试选项。