除了 HexRays 之外,还有其他交互式反编译器吗?

逆向工程 艾达 拆卸 反编译 反编译器
2021-06-26 00:47:05

是否有任何反编译器可以生成交互式伪代码?通过交互式,我的意思是您可以选择一个变量并重命名它。或者您可以选择一个函数调用并重命名该函数。或者您可以在反汇编中选择一条指令,它将带您到伪代码中的等效行。

我知道 IDA Pro 的 HexRays 插件可以做到这一点,但有没有其他替代品也具有这种交互功能?

我正在寻找一个交互式反编译器(意味着输出应该是类似 C 的伪代码)——而不是一个交互式反汇编器。

4个回答

简短回答:不,没有其他交互式反编译器,至少对于本机代码没有。

长答案:Hex-Rays 反编译器是基于交互性的想法创建的,而我所知道的所有其他本地代码反编译器(我不是在谈论 Java 或 .NET)都是作为批处理工具创建的。最接近半交互式反编译器的是Snowman,但不是真正的交互式(除非在使用 IDA 插件时选择要反编译的函数被认为是交互式的。)

在 Hopper 中有一个玩具“反编译器”(如果名称合适,因为它比其他任何东西都更像是伪 C 的翻译器)但既不是交互式的。

Boomerang、REC 和我所知道的所有其他废弃的反编译器项目,要么是作为命令行批处理工具创建的,要么是有一个 GUI 只是为了让您选择二进制文件。

所以,正如一开始所说:本地代码的唯一交互式反编译器是 Hex-Rays 反编译器。

PS:我不知道为什么人们不关注问题而不是提出他们最喜欢的工具......反汇编器不是交互式反编译器。

Plasma 项目似乎有一个交互式反编译器:https : //github.com/joelpx/plasma

从文档:

$ plasma -i tests/server.bin
>> v main # or v 0xFFFFFF (replace 0xFFFFFF with the address of the function)
# You are now in visual mode. Press P to define the function. Then press TAB to decompile the function into pseudocode.
# You can hover over a variable using your arrows keys and press R to rename a variable. You can press X to see all xrefs to the variable.

Radare2似乎满足您的要求。这是一个命令行程序,没有可用的 GUI(但有一个可视模式)。需要一点时间来适应,我建议从radare2 书开始。

另一个有趣的 IDA 替代品是Medusa,它并不完全完整,但可以满足您的需求。

然而,它听起来好像您实际上是在反编译器方面,而不仅仅是一个标记的 CFG,在这种情况下,您可能想要查看snowmanx64dbg有一个插件可以包装雪人,可以满足您的需求。你也可以试试REC,虽然我从来没有摆弄过它。