如何“反编译”Java类文件?

问题

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

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


#1 热门回答(588 赞)

2016年2月更新:

www.javadecompilers.com将JAD列为:

最受欢迎的Java反编译器,但主要仅限于此时代。写在C中,所以非常快。过时,不受支持且无法正确反编译Java 5及更高版本

所以你的里程可能会因最近的jdk而有所不同(7,8)。

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

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

原答案:2008年10月

  • JSR 176的最终版本,定义了J2SE 5.0(Java SE 5)的主要功能,已于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:

screenshot

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

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


#2 热门回答(101 赞)

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

  • Procyon:开源(Apache 2)并积极开发
  • Krakatau:开源(GPLv3)并积极开发
  • CFR:开源(MIT)并积极开发
  • JAD
  • DJ Java Decompiler
  • 摩卡

还有很多。

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


#3 热门回答(51 赞)

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

如果你想看到字节码,只需使用JDK附带的javap