556

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

关于这个站点上的 Java 性能问题,我经常看到“反编译”Java 类文件以了解编译器如何优化某些内容的人的回复。

4

19 回答 19

588

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
  • 今天可从 Internet 下载的大多数 Java 反编译器,例如“DJ Java Decompiler”或“Cavaj Java Decompiler”,都是由 JAD 驱动的:它们无法显示 Java 5 源代码。

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

  • 明确支持反编译和分析Java 5+ “.class”文件。
  • 一个不错的图形用户界面:

截屏

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

它具有实际上功能齐全的在线现场演示版本!您可以在页面上放置一个 jar 文件并查看反编译的源代码,而无需安装任何东西。

于 2008-11-07T16:18:48.140 回答
101

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

  1. Procyon:开源(Apache 2)并积极开发
  2. Krakatau:开源(GPLv3)并积极开发
  3. CFR : 开源 (MIT) 并积极开发
  4. 贾德
  5. DJ Java 反编译器
  6. 摩卡

还有很多。

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

于 2008-11-07T16:03:59.403 回答
51

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

如果您想查看字节码,只需使用JDK 附带的javap 。

于 2008-11-07T16:03:51.650 回答
29

我尝试了几个,南河四似乎最适合我。它正在积极开发中,并支持最新版本的 Java 的许多功能。

这些是我尝试过的其他人:

  • 病死率
    • 有希望,但经常失败的方法反编译。我会一直关注这个。还积极开发支持最新的 Java 功能。
  • 喀拉喀托
    • 采用不同的方法,它尝试输出等效的 Java 代码,而不是尝试重建原始源代码,这有可能使其更好地用于混淆代码。根据我的测试,它与 Procyon 大致相当,但有一些不同的东西仍然很好。我确实必须使用-skip命令行标志,这样它就不会因错误而停止。积极开发,有趣的是它是用 Python 编写的。
  • 京东图形界面
  • 贾德
    • 工作,但只支持 Java 1.4 及以下。也可作为Eclipse 插件使用。不再在开发中。
于 2013-10-02T19:00:30.453 回答
18

我使用JAD 反编译器

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

于 2008-11-07T16:07:09.833 回答
14

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

于 2013-06-10T14:02:51.750 回答
13

Soot是较新 Java 代码的一个选项。至少它还有最近还在维护的优势……

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

最后,没有提到Jdec,尽管它不像其他选项那样完善。

于 2009-09-18T23:53:09.317 回答
12

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

于 2011-07-01T09:33:33.300 回答
11

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

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

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

京东,免费用于非商业用途,http://jd.benow.ca/

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

JAD - 仅出于历史原因在此给出。免费,没有可用的源代码, http: //varaneckas.com/jad/ 已过时、不受支持且无法正确反编译 Java 5 及更高版本。

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

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

于 2015-03-07T00:06:35.967 回答
10

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

DJ 反编译器 Mocha

于 2008-11-07T16:04:02.540 回答
9

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

于 2008-11-07T16:18:26.253 回答
6

看看cavaj

于 2008-11-07T16:02:55.710 回答
6

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

http://www.varaneckas.com/jad

于 2012-04-04T03:11:15.070 回答
5
  • JAD 是一种有效且简单的方法。

  • 另外,如果您只想查看方法,请使用 javap。

于 2011-03-13T05:41:45.493 回答
5

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

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

于 2012-11-30T03:13:59.493 回答
4

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

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

于 2013-06-25T17:52:07.810 回答
4

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

在此处输入图像描述

于 2015-08-04T09:04:41.810 回答
1

对于 OSX,我推荐:jarzilla 或 JD-GUI

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

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

于 2015-06-18T16:54:54.197 回答
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 源代码。

于 2015-08-04T08:22:30.387 回答