我正在使用JD-GUI反编译 Java JAR 文件,但问题是它留下了许多错误,例如重复变量,我必须自己修复并检查程序是否仍然有效(如果我正确修复了错误)。
我也尝试过 Fernflower,但如果它缺少依赖项,则会留下空白类。
我想知道哪个反编译器:
- 给出最少的错误
- 去混淆最多。
我正在使用JD-GUI反编译 Java JAR 文件,但问题是它留下了许多错误,例如重复变量,我必须自己修复并检查程序是否仍然有效(如果我正确修复了错误)。
我也尝试过 Fernflower,但如果它缺少依赖项,则会留下空白类。
我想知道哪个反编译器:
对于迟来的回复,我深表歉意。
我一直在研究一个新的、开源的Java 反编译器。随意检查一下。
我没有针对任何混淆代码对其进行测试,但我已经看到它反编译了 JD-GUI 无法处理的许多方法。请注意,这是一项正在进行的工作,我相信您会发现很多无法反编译的代码。
旧的和缺乏的条目
JAD 前段时间,每个人选择的反编译器都是 jad。目前,该项目已死(此外,它还不是开源的),但是您仍然看到很多人在提及它。
Java DeObfuscator 也是来自 fileoffset.com 的旧工具,但或多或少仍然有效。用于大型项目的界面相当笨拙,但该工具是开源的。
JODE JODE是一个包含 Java 反编译器和优化器的 Java 包。这个包在 GNU GPL 下免费提供。好久没更新了
AndroChef 用于反编译 Android 程序和 Java 文件的专有工具,可在此处获得。与DJ Decompiler一样,考虑到其他选择,不值钱。
Candle 由 Brad Davis 开发的开源反编译器。我提到它是为了完整性,但离功能完整还很远。
现代工具
JD-Gui 可能是最广泛使用的 Java 反编译工具之一,因为它易于使用并提供图形用户界面,允许快速打开和检查类文件或 JAR。你可以在这里找到它。
FernFlower 非常新的和有前途的分析 Java 反编译器(成为 IntelliJ 14 的一个组成部分)。
这是一个命令行工具。这个可以显示带有全名的 Unicode 参数。
从这里下载。
这是一个命令行工具。这个可以显示带有全名的 Unicode 参数。
请注意,它也已默认集成在 IntelliJ 中。
病死率
免费,开源。这个旨在反编译现代 Java 功能,包括 Java 12 开关表达式、Java 8 lambdas(Java beta 103 之前和之后的更改)、Java 7 字符串开关等,尽管它本身是用 Java 6 编写的。
也是一个命令行工具。这个做得更好,而且速度稍快。
南河三
开源,并且还旨在处理 Java 8 特性(lambdas、:: 运算符)。需要 Java 7 才能运行。
Krakatau Krakatau很有趣,因为它是用 Python 编写的。它目前包含三个工具:用于 Java 类文件的反编译器和反汇编器以及用于创建类文件的汇编器。
尚不支持 Java 8 功能。
煤烟
Soot 是一个用于分析和转换 Java 和 Android 应用程序的框架,最初由麦吉尔大学的 Sable 研究小组开发。它“只是”用作反编译器并不是很常用,因为它还定义了一种中间字节码语言。
咖啡因
旨在直观使用的 Java 字节码编辑器和逆向工程工具。它可以通过多个反编译器(CFR、FernFlower、Procyon)或在表格布局中呈现字节码,以允许显示在标准反编译器中无法辨认的类元素。Recaf 使用上下文相关菜单与类、方法和字段进行交互,允许用户以反汇编格式搜索用例、重命名项目和编辑定义。
它支持 jars、wars、类和从运行的 Java 进程中提取类。
它完全用 Java 编写并且完全开源。
Konloch 的字节码查看器
高级轻量级 Java 字节码查看器、GUI Java 反编译器、GUI 字节码编辑器、GUI Smali、GUI Baksmali、GUI APK 编辑器、GUI Dex 编辑器、GUI APK 反编译器、GUI DEX 反编译器、GUI Procyon Java 反编译器、GUI Krakatau、GUI CFR Java 反编译器、 GUI FernFlower Java 反编译器、GUI DEX2Jar、GUI Jar2DEX、GUI Jar-Jar、十六进制查看器、代码搜索器、调试器等。
完全用 Java 编写,并且是开源的。
它使用 FernFlower、Procyon 和 CFR 进行反编译,使用最先进的反编译器使其成为一个很棒的可视化工具:
谜
最初用于对 Minecraft 版本进行反混淆。在内部使用 Procyon。
可以在此处找到更新的 fork
有趣的是,Java 的反编译器和去混淆器的大量努力是围绕 Minecraft(用 Java 实现的最流行的游戏之一)进行修改场景的结果。
来源:http : //blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html
我不能说其中哪一个是最好的,但是正如这个SO question所示,有一些 Java 反编译器。这些反编译器似乎都没有尝试主动处理混淆,并且其中许多项目都被放弃了。
我没有尝试过Krakatau,但听起来它可能对您正在寻找的东西有所帮助。
尝试查看 Bytecode Viewer https://github.com/Konloch/bytecode-viewer它可以选择使用 5 种不同的反编译器进行反编译: