我可以使用什么程序来反编译类文件?我真的会得到 Java 代码,还是只是 JVM 汇编代码?
关于这个站点上的 Java 性能问题,我经常看到“反编译”Java 类文件以了解编译器如何优化某些内容的人的回复。
我可以使用什么程序来反编译类文件?我真的会得到 Java 代码,还是只是 JVM 汇编代码?
关于这个站点上的 Java 性能问题,我经常看到“反编译”Java 类文件以了解编译器如何优化某些内容的人的回复。
2016 年 2 月更新:
www.javadecompilers.com将 JAD 列为:
最流行的 Java 反编译器,但主要仅限于这个时代。用 C++ 编写,速度非常快。
Java 5 及更高版本已过时、不受支持且无法正确反编译
所以你的里程可能会随着最近的jdk(7、8)而变化。
同一站点列出了其他工具。
正如Salvador Valencia在评论(2017 年 9 月)中所指出的那样,javadecompiler提供了一个 SaaS,您可以在其中将.class
文件上传到云端,并返回反编译的代码。
原始答案:2008 年 10 月
Java Decompiler(又一个 Fast Java 反编译器)具有:
它适用于从 JDK 1.1.8 到 JDK 1.7.0 以及其他编译器(Jikes、JRockit等)。
它具有实际上功能齐全的在线现场演示版本!您可以在页面上放置一个 jar 文件并查看反编译的源代码,而无需安装任何东西。
要查看 Java 源代码,请检查一些反编译器。去搜索jad。
如果您想查看字节码,只需使用JDK 附带的javap 。
我尝试了几个,南河四似乎最适合我。它正在积极开发中,并支持最新版本的 Java 的许多功能。
这些是我尝试过的其他人:
-skip
命令行标志,这样它就不会因错误而停止。积极开发,有趣的是它是用 Python 编写的。我使用JAD 反编译器。
它有一个Eclipse插件,jadeclipse。这很不错。
Procyon包含一个反编译器。它是自由和开源软件。
Soot是较新 Java 代码的一个选项。至少它还有最近还在维护的优势……
此外,Java Decompiler是一个具有独立 GUI 和 Eclipse 集成的反编译器。
最后,没有提到Jdec,尽管它不像其他选项那样完善。
以下是截至 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/
Java 的大多数反编译器都是基于JAD的。这是一个很棒的工具,但不幸的是有一段时间没有更新,并且不能很好地处理 Java 1.5+ 类。我还没有看到任何可以正确处理 1.5+ 类的工具。
看看cavaj。
到目前为止列出的所有 JAD 链接似乎都已损坏,所以我找到了这个站点。效果很好(至少对于 Linux)!在 Ubuntu 11.10 上,无论出于何种原因,我都必须下载静态版本。
JAD 是一种有效且简单的方法。
另外,如果您只想查看方法,请使用 javap。
如果你想看看 Java 编译器是如何做某些事情的,你不想反编译,你想反汇编。反编译涉及将字节码转换为 Java 源代码,这意味着丢失了大量低级信息,如果您想了解编译器优化,这可能正是您感兴趣的信息。
不管怎样,我碰巧写了一个开源的 Java 反汇编器。与 Javap 不同,这甚至适用于高度病态的类,因此您也可以看到混淆工具对您的类做了什么。它也可以进行反编译,但我不推荐它。
JAD 对我不起作用(Ubuntu 11.10 问题),所以我继续前进并使用JODO。至少它有 Open Java 源代码并且能够正确地反编译我的.class。
我建议先检查“分支/通用”分支。树干不稳定。
在 IntelliJ IDEA 平台上,您可以使用Java Decompiler IntelliJ Plugin。它允许您在调试过程中显示所有 Java 源代码,即使您没有全部。它基于著名的工具JD-GUI。
对于 OSX,我推荐:jarzilla 或 JD-GUI
它们都允许您查看 jar、war 等。文件内容并反编译其中的任何类文件。
Jarzilla:https
://code.google.com/p/jarzilla/
JD-GUI:http: //jd.benow.ca/
使用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 源代码。