我正在使用JD-GUI来反编译Java JAR文件,但是问题是它留下了许多错误,例如重复的变量,我必须自己修复并检查程序是否仍然有效(如果我正确地修复了错误)。

我也尝试过Fernflower,但是如果缺少依赖项,则会留下空白类。

我想知道哪个反编译器:

< br减少错误的数量最少
使混淆程度最大。


评论

只是好奇,您期望除混淆器将提供哪些功能?除了手动重命名变量外,我看不到对某些代码进行反混淆的任何方法。

#1 楼

我对迟到的答复表示歉意。
我一直在研究新的开源Java反编译器。随时检查它。我没有针对任何混淆的代码对其进行过测试,但是我看到它可以反编译JD-GUI无法处理的许多方法。请注意,这是一个正在进行的工作,我相信您会发现很多代码将无法反编译。

评论


首先,您会在其他答案中看到他的反编译器是Procyon。其次,尽管我通常不屑一顾,“看看我的图书馆能做到这一点!”答案,这将是一个错误。上面提到的Strobel自述文件值得一读。这本身就是一个很好的答案,但对SE来说可能太长了。

–松饼
2014年11月21日在19:36

+10000这确实是很棒的工作,它只是反汇编了一个类,在JD-GUI只得到其中的一半之后,我花了几个小时试图重建它。

–dirkoneill
2015年6月10日4:24

即使我个人讨厌+1注释,但我不得不说,您在其中有一个不错的项目,该项目对我有帮助。保持!

–Signus
17年2月8日在0:12

@Signus谢谢,很高兴我的工作对您有用:)。

–迈克·斯特罗贝尔(Mike Strobel)
17年2月8日在15:12

@DavidGomes啊,BitBucket终于兑现了删除Mercurial仓库的承诺。固定。

–迈克·斯特罗贝尔(Mike Strobel)
10月9日,下午2:12

#2 楼

古老而缺乏的条目
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中。
CFR
免费且开源。该程序旨在反编译现代Java功能,包括Java 12开关表达式,Java 8 lambda(Java beta 103更改前后),Java 7 String开关等,尽管它们本身都是用Java 6编写的。
线工具。这个做得更好,但速度更快。
Procyon
开源,并且还旨在处理Java 8功能(lambdas,::运算符)。需要运行Java7。
Krakatau
Krakatau很有趣,因为它是用Python编写的。它目前包含三个工具:用于Java类文件的反编译器和反汇编器以及用于创建类文件的汇编器。
尚不支持Java 8功能。最初由麦吉尔大学Sable Research Group开发的Java和Android应用程序的转换。它不是很常用作“反编译器”,因为它还定义了中间字节代码语言。
Recaf
Java字节码编辑器和反向工程工具,旨在直观易用。它可以通过多个反编译器(CFR,FernFlower,Procyon)或表布局显示字节码,以允许显示标准反编译器无法识别的类元素。 Recaf使用上下文相关菜单与类,方法和字段进行交互,从而允许用户搜索用例,重命名项以及以反汇编格式编辑定义。
它支持jar,war,类和提取类。
它完全用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进行反编译,这使其成为使用最新反编译器的出色可视工具:
谜题
专门用于模糊处理的工具:
原创ly用于对Minecraft版本进行模糊处理。内部使用Procyon。
可以在这里找到最新的分叉
有趣的是,Java的反编译器和反混淆器付出了很多努力,这是Minecraft周围的改进场景的结果,Minecraft是Java中最流行的游戏之一。
来源:http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html

评论


该答案可能需要更新。截至2019年3月,似乎正在积极开发JD-Gui。java-decompiler.github.io

–戈多里奥
19年4月5日在17:15

我有一些Java 7代码,正在尝试为其编写某些方面。内置的intellij反编译器在某些情况下具有错误的变量名,并且可能会省略代码块。 JD-Gui显示了这些块,还显示了看起来更准确的变量名。它还同时显示了旧版本的JD-Gui与旧版本之间的差异。如果您要进行一些严重的反转,则值得一看。

–戈多里奥
19年4月5日在18:11

#3 楼

我不能说其中哪一个是最好的,但是正如这个SO问题所指出的,有一些java反编译器。这些反编译器似乎都没有尝试主动处理混淆处理,并且许多项目都被放弃了。

我还没有尝试过Krakatau,但听起来它可能对您的寻找有所帮助。


自述文件:“对于大多数Java反编译器而言,Krakatau反编译器采用了不同的方法。
它可以被视为输入语言为Java字节码的编译器
并且其目标语言恰好是Java源代码。Krakatau接受了任意字节码,并尝试将其转换为等效的Java代码。这使得它对较小的混淆是健壮的,尽管它具有以下缺点:
重构“原始”源代码,导致输出的可读性比不混淆Java类的
模式匹配反编译器产生的输出少。”
这是开源的,并且似乎很活跃写作)。


评论


这实际上是反汇编程序的输出。反编译器反编译为Java输出。 (PS。我是开发商)

–锑
13年4月15日在3:50



JD-GUI是目前最好的Java反编译器之一,但是在反编译代码之前,必须将其与Bytecode上的反混淆器结合使用。我知道最好的Java反混淆器来自runescape Game的黑客社区,这些Runescape Game是完全用Java编写的,并且被高度混淆了,它们来自于rune-server.org或moparscape.org/smf或moparisthebest.org/smf。

– SSpoke
2014年4月13日在7:38



#4 楼

尝试看看Bytecode Viewer https://github.com/Konloch/bytecode-viewer可以选择使用5种不同的反编译器进行反编译:


FernFlower
Procyon
CFR
Krakatau
JD-GUI


评论


这是一个非常好的建议-谢谢,比仅仅使用fernflower cli更好!

– nmu
10月12日19:50

#5 楼

首先,这里解决了缺少类的Fernflower问题。您可以为此向agaricusb表示感谢。

目前,Fernflower仍然是最好的Java反编译器,即使它在过去几年都没有维护过。我最近尝试联系作者,但还是没有运气。

对于AndroChef Java Decompiler,经作者许可,它使用Fernflower作为引擎。仍然不确定是否使用补丁/修改版,或者它只是一个GUI。我的应用程序中有95%(约3000个课程),而procyon只能处理60%(2014年1月检查)。

评论


您的应用程序是“本机” Java还是从Android格式转换而来?如果是前者,我将非常有兴趣了解您的二进制文件,以了解Procyon与Fernflower相比在何处发生故障。

–迈克·斯特罗贝尔(Mike Strobel)
2014年7月7日14:26

@MikeStrobel这是“本机” Java应用程序。它仅供内部使用,因此无论如何我都无法共享。

–弗拉基米尔·普罗塔索夫(Vladimir Protasov)
2014年7月8日在10:42

您是否有机会给我发送一封电子邮件,描述您遇到了哪些问题?我一直很想听听Procyon如何进行改进。我的联系信息在项目的BitBucket网站上。

–迈克·斯特罗贝尔(Mike Strobel)
2014年7月8日14:30在

@MikeStrobel感谢您的关注。我将尝试为您提供扩展的信息和示例类,但没有任何承诺。

–弗拉基米尔·普罗塔索夫(Vladimir Protasov)
2014年7月9日在11:26

#6 楼

我正在使用https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine
这是IntelliJ的反编译器,它反编译JD-GUI失败的代码。 />
下载的是非官方镜像:
http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

#7 楼

我想向您推荐AndroChef Java Decompiler
AndroChef Java Decompiler成功地对混淆的Java 6和Java 7 .class和.jar文件进行了反编译。

评论


用ANDROCHEF支付注意! AndroChef只是废弃的fernflower反编译器的包装,不要浪费您的钱!

–user3173
2013年11月15日15:41