编写反汇编程序可能没有太多困难。另外,假设我拥有有关如何执行机器代码的完整文档。
但是,编写反编译器要困难得多。因此,我正在考虑使用现有的反编译器并将其扩展为支持我的体系结构。
问题:
什么是可以扩展到的反编译器新体系结构?
如何扩展反编译器以支持我的体系结构?
#1 楼
您没有提到二进制文件的格式。如果您选择扩展的反编译器不支持您要反编译的二进制格式,那么您将需要实现对该格式的支持或找到解决方法。有许多处于活跃开发中的开源反编译器项目可供选择。当然,也有很多无效的编译器项目,但是将不再讨论。
这里讨论的项目是
r2dec-用JavaScript编写的Radar2插件
在r2con2018演示文稿“如何不编写反编译器”(视频,幻灯片)中,给出了radare2插件
r2dec
的工作原理的概述,以及有关如何将其扩展到新架构的一些说明和建议(从17开始:演示文稿的59条)。如果radare2(反汇编程序)不支持您感兴趣的体系结构,则您需要自己实现。reko-用C#实现的独立工具链
请参阅Wiki中的HowTo,以获取有关如何继续将其扩展到新体系结构的说明
RetDec-使用Capstone反汇编框架,它基于LLVM
此处提供了有关其工作原理的概述:(幻灯片,视频)。关于拆卸和转换为IR的讨论始于17:08(幻灯片25)。将其扩展到不受支持的体系结构可能会涉及为Capstone添加反汇编以及asm-> RetDec中的IR转换的支持。
详尽的清单,当然。还有其他选项,例如radeco和snowman,但似乎没有充分记录。
如果确定不需要反编译并且反汇编就足够了,那么以下文章中介绍了向IDA添加新的处理器模块:
我们如何为IDA Pro开发NIOS II处理器模块
Flare-On 2018-挑战12-Subleq'n'RSSB
#2 楼
您可以为此使用Ghidra:https://ghidra-sre.org/可以创建新的CPU描述。文档的方式没有什么明显的,但是
Ghidra/Processors
文件夹中有很多示例。即使我不太了解所有内容(仍然不了解),我还是设法为6502创建了一个新产品:https://github.com/tom-seddon/ghidra_6502 反编译器似乎完全由这些CPU描述驱动,因此,我认为您需要做的就是重新编写一个描述,然后从中获得某种C代码。
我不确定将整个程序转换为可以重新编译的代码是多么可行! -那不是我需要的东西,所以我没有对此进行调查。但是,如果您只需要解开特定的例程,就足够了。
评论
如果您正在寻找带有GUI的反编译器,请尝试使用x64dbg。它是开源的,可以在github上找到,因此应该为您提供一个很好的起点。@Twifty x64dbg本身不是反编译器,尽管可以将名为snowman的反编译器用作插件
在github.com/uxmal/reko/issues上提出一个问题。我们非常乐意帮助您入门。