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

关于这个网站上的Java性能问题,我经常看到一些人的回答,他们“反编译”了Java类文件,以了解编译器如何优化某些东西。


当前回答

我尝试了几种,Procyon似乎最适合我。它正在积极开发中,支持最新版本Java的许多特性。

以下是我尝试过的其他方法:

CFR Promising, but often failed method decompilation. I'll be keeping my eye on this one. Also actively developed with support for the latest Java features. Krakatau Takes a different approach in that it tries to output equivalent Java code instead of trying to reconstruct the original source, which has the potential of making it better for obfuscated code. From my testing it was roughly on par with Procyon, but still nice to have something different. I did have to use the -skip command-line flag so it wouldn't stop on errors. Actively developed, and interestingly enough it's written in Python. JD-GUI Worked, but Procyon's output was much better. Here's a page comparing Procyon output to the original and JD-GUI. JD-GUI is also available as an Eclipse plugin, which didn't work for me at all. Doesn't seem to be open source and development seems sporadic. JAD Worked, but only supports Java 1.4 and below. Also available as an Eclipse plugin. No longer under development.

其他回答

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

DJ解码器 摩卡

这里有一些反编译器…快速搜索会得到:

Procyon:开源(Apache 2),积极开发 Krakatau:开源(GPLv3),并积极开发 CFR:开源(MIT)并积极开发 联合应用开发 DJ Java反编译器 摩卡

还有更多。

它们生成Java代码。Java自带一些功能,可以让您看到JVM字节代码(javap)。

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

2016年2月更新:

www.javadecompilers.com列出JAD为:

最流行的Java反编译器,但主要仅限于这个时代。用c++写的,非常快。 过时,不受支持,不能正确反编译Java 5及更高版本

因此,您的里程可能随最近的jdk(7,8)而变化。

该网站还列出了其他工具。

正如Salvador Valencia在评论(2017年9月)中指出的那样,javadecompiler提供了一种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反编译器”或“Cavaj Java反编译器”,都是由JAD驱动的:它们不能显示Java 5源代码。

Java反编译器(另一个快速Java反编译器)有:

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

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

它的特点是一个在线现场演示版本,实际上是完全功能!您只需在页面上放置一个jar文件,就可以看到反编译的源代码,而不需要安装任何东西。

我使用JAD反编译器。

它有一个Eclipse插件jadeclipse。它很漂亮。