我如何“反编译”Java类文件? [关闭]

问题描述 投票:556回答:19

我可以使用什么程序来反编译类文件?我真的会获得Java代码,还是只是JVM汇编代码?

关于这个站点上的Java性能问题,我经常看到那些“反编译”Java类文件的人的反应,看看编译器如何优化某些东西。

java decompiler
19个回答
588
投票

2016年2月更新:

www.javadecompilers.com将JAD列为:

最流行的Java反编译器,但主要是这个时代。用C ++编写,非常快。 过时,不受支持且无法正确反编译Java 5及更高版本

所以你的里程可能会随着最近的jdk(7,8)而变化。

同一网站列出了其他工具。

正如Salvador Valencia(2017年9月)中的the comments所述,javadecompiler提供了一个SaaS,您可以将.class文件上传到云端,并返回反编译代码。


原答案:2008年10月

  • 定义J2SE 5.0(Java SE 5)主要功能的JSR 176的最终版本已于2004年9月30日发布。
  • 由Pavel Kouznetsov先生编写的着名Java反编译器JAD支持的最新Java版本是JDK 1.3
  • 今天可从互联网下载的大多数Java反编译器,例如“DJ Java Decompiler”或“Cavaj Java Decompiler”,都是由JAD提供支持的:它们无法显示Java 5源代码。

Java Decompiler(又一个快速Java反编译器)具有:

  • 显式支持反编译和分析Java 5+“.class”文件。
  • 一个很好的GUI:

它适用于从JDK 1.1.8到JDK 1.7.0以及其他(JikesJRockit等)的编译器。

它具有在线live demo version,实际上功能齐全!你可以在页面上删除一个jar文件,看看反编译的源代码而不安装任何东西。


10
投票

您可以使用一些程序。您将获得实际的Java代码,但有时代码将被混淆,因此方法由一个字母或数字或随机混合的字母和数字命名。

DJ Decompiler Mocha


9
投票

Java的大多数反编译器都基于JAD。这是一个很棒的工具,但遗憾的是还没有更新一段时间,并且不能很好地处理Java 1.5+类。我还没有看到任何能够正确处理1.5+课程的工具。


6
投票

看看cavaj


6
投票

到目前为止列出的所有JAD链接似乎都被打破了,所以我找到了这个网站。效果很好(至少对Linux来说)!在Ubuntu 11.10上,无论出于何种原因我都必须下载静态的。

http://www.varaneckas.com/jad


5
投票
  • JAD是一个有效且简单的工具。
  • 另外,如果您只想查看方法,请使用javap。

5
投票

如果你想看看Java编译器如何做某些事情,你不想要反编译,你想要反汇编。反编译涉及将字节码转换为Java源代码,这意味着丢失了大量低级信息,如果您对编译器优化感到疑惑,这可能是您感兴趣的信息。

无论如何,我碰巧写了一个open source Java disassembler。与Javap不同,它甚至可以在高度病态的类中工作,因此您可以看到混淆工具对您的类进行了哪些操作。它也可以做反编译,但我不推荐它。


4
投票

JAD对我不起作用(Ubuntu 11.10问题)所以我已经向前迈进了JODO。至少它有Open Java源代码,并且能够正确地反编译我的.class。

我建议先查看'branches / generic'分支。树干不稳定。


4
投票

在IntelliJ IDEA平台上,您可以使用Java Decompiler IntelliJ Plugin。它允许您在调试过程中显示所有Java源代码,即使您没有全部这些源代码也是如此。它基于着名的工具JD-GUI

enter image description here


1
投票

使用AndroChef Java Decompiler,您可以反编译apk,dex,jar和java类文件。它简单易行。 AndroChef JD基于FernFlower。您可以在10个免费使用中评估它。

AndroChef支持Java语言功能,如泛型,枚举和注释。根据一些研究,AndroChef Java Decompiler能够反编译使用传统Java编译器生成的98.04%的Java应用程序 - 非常高的恢复率。它是一个简单但功能强大的工具,允许您将Java和Dalvik字节码(DEX,APK)反编译成可读的Java源代码。


1
投票

对于OSX,我建议:jarzilla或JD-GUI

它们都允许你查看jar,war等。文件内容并反编译其中的任何类文件。

Jarzilla:https://code.google.com/p/jarzilla/ JD-GUI:http://jd.benow.ca/


101
投票

有一些反编译器......快速搜索产生:

  1. Procyon:开源(Apache 2)并积极开发
  2. Krakatau:开源(GPLv3)并积极开发
  3. CFR:开源(MIT)并积极开发
  4. JAD
  5. DJ Java Decompiler
  6. Mocha

还有很多。

这些产生Java代码。 Java带有一些东西可以让你看到JVM字节码(javap)。


51
投票

要查看Java源代码,请检查一些反编译器。去搜索jad。

如果要查看字节码,只需使用JDK附带的javap即可。


29
投票

我尝试了几个,Procyon似乎对我来说是最好的。它正在积极开发中,并支持最新版Java的许多功能。

这些是我试过的其他人:

  • CFR 有希望,但往往失败的方法反编译。我会密切注意这个。还积极开发支持最新的Java功能。
  • Krakatau 采用不同的方法,它尝试输出等效的Java代码,而不是尝试重建原始源,这有可能使混淆代码更好。根据我的测试,它与Procyon大致相当,但仍然很高兴有不同的东西。我确实必须使用-skip命令行标志,所以它不会停止错误。积极开发,有趣的是它是用Python编写的。
  • JD-GUI 工作,但Procyon的输出要好得多。这是一个page comparing Procyon output to the original and JD-GUI。 JD-GUI也可以作为Eclipse plugin使用,它根本不适用于我。似乎不是开源的,发展似乎是零星的。
  • JAD 工作,但只支持Java 1.4及更低版本。也可以作为Eclipse plugin。不再在开发中。

18
投票

我用JAD Decompiler

有一个Eclipse插件,jadeclipse。这很不错。


14
投票

Procyon包括一个反编译器。这是FOSS。


13
投票

Soot是较新的Java代码的选项。至少它具有最近仍然保持的优势......

此外,Java Decompiler是一个具有独立GUI和Eclipse集成的反编译器。

最后,没有提到Jdec,尽管它没有其他选项那么精致。


13
投票

JD-GUI真的很棒。您可以打开一个JAR文件并浏览代码,就好像您正在使用IDE一样。好东西。


11
投票

以下是截至2015年2月的反编译列表:

Procyon,开源,https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR,免费,没有源代码,http://www.benf.org/other/cfr/

JD,仅限非商业用途,http://jd.benow.ca/

Fernflower,开源,https://github.com/fesh0r/fernflower

JAD - 这里只是出于历史原因。免费,没有可用的源代码,http://varaneckas.com/jad/过时,不受支持,并且没有正确反编译Java 5及更高版本。

您可以在线测试上述反编译器,无需安装,并做出自己的教育选择。

云中的Java反编译器:http://www.javadecompilers.com/

© www.soinside.com 2019 - 2024. All rights reserved.