我正在逆向工程一个二进制文件。细节无关紧要。重要的部分是它是在一个非常不受欢迎的架构中编写的,并且没有支持该架构的现有反汇编器或反编译器。
可以毫不费力地编写反汇编程序。另外,假设我有关于如何执行机器代码的完整文档。
但是,编写反编译器要困难得多。因此,我正在考虑使用现有的反编译器并扩展它以支持我的架构。
问题:
- 什么是可以扩展到新架构的反编译器?
- 如何扩展反编译器以支持我的架构?
我正在逆向工程一个二进制文件。细节无关紧要。重要的部分是它是在一个非常不受欢迎的架构中编写的,并且没有支持该架构的现有反汇编器或反编译器。
可以毫不费力地编写反汇编程序。另外,假设我有关于如何执行机器代码的完整文档。
但是,编写反编译器要困难得多。因此,我正在考虑使用现有的反编译器并扩展它以支持我的架构。
问题:
你没有提到二进制的格式是什么。如果您选择扩展的反编译器不支持您要反编译的二进制文件的格式,那么您将需要实现对该格式的支持或找到解决方法。
有许多正在开发中的开源反编译器项目可供您选择。当然,死编译器项目也有很多,这里就不赘述了。
这里讨论的项目是
r2dec - 一个用 JavaScript 编写的用于radare2 的插件
reko - 用 C# 实现的独立工具链
当然,这并不是一个详尽的清单。还有其他的选择为好,如radeco和雪人,但这些似乎并没有被很好的记录。
如果确定不需要反编译并且反汇编就足够了,以下文章中提供了向 IDA 添加新处理器模块的不错指南:
您可以为此使用 Ghidra:https ://ghidra-sre.org/
可以创建新的 CPU 描述。文档的方式没有什么明显的,但是Ghidra/Processors
文件夹中有很多示例。我设法糊涂并为 6502 创建了一个新的,即使我不太了解所有内容(并且仍然不了解):https : //github.com/tom-seddon/ghidra_6502
反编译器似乎完全由这些 CPU 描述驱动,所以我认为您需要做的就是创建一个新的描述,然后您将获得某种 C 代码。
我不确定将整个程序变成可以重新编译的代码有多可行!- 那不是我需要的东西,所以我没有调查过。但是,如果您只需要理清特定的例程,那可能就足够了。