什么是可以扩展到新架构的反编译器,我该怎么做?

逆向工程 工具 反编译器
2021-07-08 04:15:11

我正在逆向工程一个二进制文件。细节无关紧要。重要的部分是它是在一个非常不受欢迎的架构中编写的,并且没有支持该架构的现有反汇编器或反编译器。

可以毫不费力地编写反汇编程序。另外,假设我有关于如何执行机器代码的完整文档。

但是,编写反编译器要困难得多。因此,我正在考虑使用现有的反编译器并扩展它以支持我的架构。

问题:

  • 什么是可以扩展到新架构的反编译器?
  • 如何扩展反编译器以支持我的架构?
2个回答

你没有提到二进制的格式是什么。如果您选择扩展的反编译器不支持您要反编译的二进制文件的格式,那么您将需要实现对该格式的支持或找到解决方法。

有许多正在开发中的开源反编译器项目可供您选择。当然,死编译器项目也有很多,这里就不赘述了。

这里讨论的项目是

  1. r2dec - 一个用 JavaScript 编写的用于radare2 的插件

    • 在 r2con2018 演示文稿“如何不编写反编译器”(视频幻灯片)中,概述了radare2 插件的r2dec工作原理,以及有关如何将其扩展到新架构的一些说明和建议(从17:59开始)演示文稿)。如果radare2(反汇编器)不支持您感兴趣的架构,那么您需要自己实现它。
  2. reko - 用 C# 实现的独立工具链

    • 有关如何继续将其扩展到新架构的说明,请参阅wiki 中HowTo
  3. RetDec - 使用 Capstone 反汇编框架并基于 LLVM
    • 此处提供了其工作原理的概述:(幻灯片视频)。关于反汇编和翻译成 IR 的讨论在17:08左右开始(幻灯片 25)。将其扩展到不受支持的架构可能涉及添加对 Capstone 的反汇编支持以及 RetDec 中的 asm -> IR 转换。

当然,这并不是一个详尽的清单。还有其他的选择为好,如radeco雪人,但这些似乎并没有被很好的记录。

如果确定不需要反编译并且反汇编就足够了,以下文章中提供了向 IDA 添加新处理器模块的不错指南:

您可以为此使用 Ghidra:https ://ghidra-sre.org/

可以创建新的 CPU 描述。文档的方式没有什么明显的,但是Ghidra/Processors文件夹中有很多示例我设法糊涂并为 6502 创建了一个新的,即使我不太了解所有内容(并且仍然不了解):https : //github.com/tom-seddon/ghidra_6502

反编译器似乎完全由这些 CPU 描述驱动,所以我认为您需要做的就是创建一个新的描述,然后您将获得某种 C 代码。

我不确定将整个程序变成可以重新编译的代码有多可行!- 那不是我需要的东西,所以我没有调查过。但是,如果您只需要理清特定的例程,那可能就足够了。