关于反编译程序:如何”反编译”Java类文件?

How do I “decompile” Java class files?

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

在这个网站上的Java性能问题中,我经常看到那些已经"反编译"Java类文件的人的回应,看看编译器是如何优化某些事情的。


2016年2月更新:

www.javadecompilers.com将jad列为:

the most popular Java decompiler, but primarily of this age only. Written in C++, so very fast.
Outdated, unsupported and does not decompile correctly Java 5 and later

所以你的里程可能会随着最近的JDK(7,8)而变化。

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

正如萨尔瓦多·瓦伦西亚在评论(2017年9月)中指出的那样,JavadeCompiler提供了一个SaaS,您可以在其中将.class文件上传到云端,并返回反编译代码。

原始答案:2008年10月

  • JSR 176的最终版本,定义了J2SE 5(Java SE 5)的主要特性,已于2004年9月30日发布。
  • 由Pavel Kouznetsov先生编写的著名Java反编译程序JAD支持的最新Java版本是JDK 1.3。
  • 大多数从Internet下载的Java反编译程序,例如"DJ Java反编译程序"或"CavaJ Java反编译程序",都是由JAD供电的:它们不能显示Java 5的源代码。

Java反编译程序(又一个快速Java反编译程序)有:

  • 显式支持反编译和分析Java 5 +".class"文件。
  • 漂亮的图形用户界面:

screenshot

它与jdk1.1.8到jdk1.7.0以及其他编译器(jikes、jrockit等)一起工作。

它有一个在线实时演示版本,实际上是完全功能化的!您可以将一个JAR文件放到页面上,在不安装任何东西的情况下查看解压后的源代码。


外面有几个反编译器…快速搜索会产生:

  • Procyon:开源(Apache2)并积极开发
  • Krakatau:开源(GPLv3)并积极开发
  • 开放源码(MIT)并积极开发
  • 贾德
  • 反编译工具
  • 摩卡
  • 还有更多。

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


    查看Java源代码检查一些反编译程序。去找杰德。

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


    我试了好几次,而蜡笔似乎对我最有效。它正在积极开发,支持Java最新版本的许多特性。

    这些是我尝试的其他方法:

    • 成本加运费
      • 有希望,但经常失败的方法反编译。我会一直盯着这个的。还积极支持最新的Java特性。
    • 克拉卡图
      • 采取不同的方法,因为它试图输出等价的Java代码,而不是试图重构原始源代码,这有可能使其更好地处理混淆代码。从我的测试来看,它大致上与南河相媲美,但还是很高兴有不同的东西。我确实需要使用-skip命令行标志,这样它就不会在出错时停止。积极开发,有趣的是,它是用Python编写的。
    • JD-图形用户界面
      • 成功了,但普罗克扬的输出要好得多。下面是一个比较原版和JD-GUI输出的页面。JD-GUI也可以作为Eclipse插件使用,这对我来说根本不起作用。似乎不是开源的,开发似乎是零星的。
    • 贾德
      • 工作,但只支持Java 1.4和以下。也可用作Eclipse插件。不再在开发中。


    我使用jad解压器。

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


    包括一个解压器。它是开源软件。


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


    对于新的Java代码,SOOT是一种选择。至少它还有一个优势,就是最近还在维护……

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

    最后,JDEC还没有被提到,尽管它没有其他选项那么完美。


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

    PROYON,开源,HTTPS://Bask.Org/MSTROBEL/PROYON/WIKI/JAVA %20反编译器

    免费,无源代码,http://www.benf.org/other/cfr/

    JD,仅限非商业用途,http://jd.benow.ca/

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

    JAD——仅出于历史原因。免费,无可用源代码,http://varaneckas.com/jadjad/过时,不支持,并没有正确的Java 5和以后的反编译。

    您可以在线测试上述解压器,无需安装,并做出您自己受过教育的选择。

    云计算中的Java反编译程序:HTTP//www. javaDeCuMePr.com


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

    DJ反编译程序摩卡


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


    看看卡瓦。


    到目前为止列出的所有JAD链接似乎都被破坏了,所以我找到了这个站点。很好用(至少对于Linux而言)!在Ubuntu11.10上,无论出于什么原因,我都不得不下载静态版本。

    http://www.varaneckas.com/jad


    如果你想知道Java编译器是如何做某些事情的,你不想反编译,你需要反汇编。反编译涉及将字节码转换成Java源代码,这意味着许多低级别的信息丢失,如果您对编译器优化感到疑惑,这可能是您感兴趣的信息。

    不管怎样,我碰巧写了一个开源Java反汇编程序。与JavaP不同的是,它甚至适用于高度病态的类,因此您可以看到模糊工具也在对类做什么。它也可以解压,不过我不推荐。


    • JAD是一个有效且简单的工具。

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


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

    enter image description here


    Jad不适合我(Ubuntu11.10版),所以我已经前进了一步,并且在Jodo上浸泡了。至少它有开放的Java源代码,并且能够正确地分解我的.class。

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


    对于OSX,我推荐:jarzilla或jd-gui

    它们都允许您查看JAR、WAR等文件内容,并解压缩其中的任何类文件。

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


    使用ANDROCHEF Java反编译程序,可以对APK、DEX、JAR和Java类文件进行反编译。这很简单。安德罗切夫JD是基于蕨类植物。你可以在10次免费使用中评估它。

    AndroChef supports Java language features like generics, enums and annotations. According to some studies, AndroChef Java Decompiler is able to decompile 98.04% of Java applications generated with traditional Java compilers - a very high recovery rate. It is simple but powerful tool that allows you to decompile Java and Dalvik bytecode (DEX, APK) into readable Java source.