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

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

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

910107 次浏览

看看cavaj

查看Java源代码,检查一些反编译器。去搜索联合应用开发

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

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

  1. 南河三:开源(Apache 2),并积极开发
  2. 喀拉喀托火山:开源(GPLv3),并积极开发
  3. 病死率:开源(MIT)并积极开发
  4. JAD
  5. DJ Java反编译器
  6. 摩卡 .

还有更多。

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

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

DJ反编译器 # EYZ0 < / p >

我使用JAD解码器

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

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

2016年2月更新:

www.javadecompilers.com列出JAD为:

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

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

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

而javadecompiler,正如萨尔瓦多·瓦伦西亚的评论(2017年9月)中提到的,提供了一个SaaS,你可以将.class文件上传到云端,然后它会返回反编译的代码。


原答案:2008年10月

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

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

截图

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

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

< >强烟尘< / >强是较新的Java代码的一个选项。至少它的优点是最近还在维护……

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

最后,< >强Jdec < / >强还没有被提到,尽管它没有其他选项那么完善。

  • JAD是一种有效且简单的方法。

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

JD-GUI真的很好。您只需打开JAR文件并浏览代码 你正在开发一个IDE。好东西。< / p >

到目前为止列出的JAD链接似乎都是坏的,所以我找到了这个网站。工作得很好(至少对于Linux)!在Ubuntu 11.10上,不知什么原因,我不得不下载静态版本。

http://www.varaneckas.com/jad < a href = " http://www.varaneckas.com/jad " > < / >

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

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

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

JAD不适合我(Ubuntu 11.10问题),所以我已经向前移动,并浸泡在净土宗。至少它有开放的Java源代码,并能够正确地反编译我的. class

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

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

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

  • CFR
    • 有希望,但经常失败的方法反编译。我会密切关注这个案子的。还积极开发了对最新Java特性的支持。
    • 李< / ul > < / >
    • 喀拉喀托
      • 采用不同的方法,它尝试输出等效的Java代码,而不是试图重建原始源代码,这有可能使它更好地处理混淆的代码。从我的测试来看,它与Procyon大致相当,但仍然有一些不同之处。我不得不使用-skip命令行标志,这样它就不会在错误时停止。积极开发,有趣的是,它是用Python编写的。
      • 李< / ul > < / >
      • < a href = " http://jd.benow。ca / noreferrer“rel = > JD-GUI

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

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

病死率,免费,没有源代码可用,http://www.benf.org/other/cfr/

JD,仅供非商业使用,http://jd.benow.ca/

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

联合应用开发 -此处仅为历史原因。免费,无源代码可用,http://varaneckas.com/jad/ 过时,不受支持,不能正确反编译Java 5及以上版本

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

# EYZ0 # EYZ1

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

它们都允许你查看罐子、战争等。文件内容并反编译其中的任何类文件。

< p > Jarzilla: # EYZ0 < br > JD-GUI: # EYZ0 < / p >

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

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

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

enter image description here