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

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


当前回答

Procyon包含一个反编译器。它是自由/开源软件。

其他回答

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

不管怎样,我碰巧写了一个开源Java反汇编程序。与Javap不同的是,这甚至适用于高度病态的类,因此您可以看到混淆工具对您的类做了什么。它还可以进行反编译,尽管我不推荐这样做。

使用AndroChef Java反编译器,您可以反编译apk, dex, jar和Java类文件。这很简单。AndroChef JD基于FernFlower。你可以在10次免费使用中评估它。

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

JAD不为我工作(Ubuntu 11.10问题),所以我已经前进和浸泡在JODO。至少它有Open Java源代码,并且能够正确地反编译我的.class。

我建议先查看“分支/通用”分支。树干不稳。

我使用JAD反编译器。

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

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文件,就可以看到反编译的源代码,而不需要安装任何东西。