我可以用什么程序来反编译类文件?我真的会获得Java代码,还是仅仅是JVM汇编代码?
关于这个站点上的Java性能问题,我经常看到那些“反编译”Java类文件的人的反应,看看编译器如何优化某些东西。
答案 0 :(得分:588)
2016年2月更新:
www.javadecompilers.com将JAD列为:
最受欢迎的Java反编译器,但主要仅限于此时代。用C ++编写,非常快。
过时,不受支持且无法正确反编译Java 5及更高版本
所以你的里程可能因最近的jdk(7,8)而有所不同。
同一网站列出了其他工具。
Salvador Valencia(2017年9月)中the comments所指出的javadecompiler提供了一个SaaS,您可以将.class
文件上传到云端,并返回反编译代码。
原始答案:2008年10月
Java Decompiler(又一个快速Java反编译器):
它适用于从JDK 1.1.8到JDK 1.7.0以及其他(Jikes,JRockit等)的编译器。
它具有在线live demo version,实际上功能齐全!你可以在页面上删除一个jar文件,看看反编译的源代码而不安装任何东西。
答案 1 :(得分:101)
有一些反编译器......快速搜索产生:
答案 2 :(得分:51)
要查看Java源代码,请检查一些反编译器。去搜索 jad 。
如果您想查看字节码,只需使用JDK附带的 javap 。
答案 3 :(得分:29)
我尝试了几个,而Procyon似乎对我来说效果最好。它正在积极开发中,并支持最新版Java的许多功能。
这些是我试过的其他人:
-skip
命令行标志,以便它不会因错误而停止。积极开发,有趣的是它是用Python编写的。答案 4 :(得分:18)
我使用JAD Decompiler。
有一个Eclipse插件,jadeclipse。非常好。
答案 5 :(得分:14)
Procyon 包含反编译器。这是FOSS。
答案 6 :(得分:13)
答案 7 :(得分:13)
Soot是较新Java代码的选项。至少它具有最近仍然保持的优势......
此外,Java Decompiler是一个具有独立GUI和Eclipse集成的反编译器。
最后,Jdec没有被提及,尽管它没有其他选项那么精致。
答案 8 :(得分:11)
截至2015年2月的反编译列表:
Procyon ,开源,https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
CFR ,免费,没有可用的源代码,http://www.benf.org/other/cfr/
JD ,仅限非商业用途,http://jd.benow.ca/
Fernflower ,开源,https://github.com/fesh0r/fernflower,
JAD - 此处仅出于历史原因。免费,没有可用的源代码,http://varaneckas.com/jad/ 已过时,不受支持且无法正确反编译Java 5及更高版本。
您可以在线测试上述反编译器,无需安装,并做出自己的教育选择。
云中的Java反编译器: http://www.javadecompilers.com/
答案 9 :(得分:10)
您可以使用一些程序。您将获得实际的Java代码,但有时代码将被混淆,因此方法以一个字母或数字或随机混合的字母和数字命名。
答案 10 :(得分:9)
大多数Java反编译器都基于JAD。这是一个很棒的工具,但遗憾的是还没有更新一段时间,并且不能很好地处理Java 1.5+类。我还没有看到任何能够正确处理1.5+课程的工具。
答案 11 :(得分:6)
看看cavaj。
答案 12 :(得分:6)
到目前为止列出的所有JAD链接似乎都被打破了,所以我找到了这个网站。效果很好(至少对Linux来说)!在Ubuntu 11.10上,无论出于何种原因,我都必须下载静态的。
答案 13 :(得分:5)
JAD是一个有效且简单的方法。
另外,如果您只想查看方法,请使用javap。
答案 14 :(得分:5)
如果你想看看Java编译器如何做某些事情,你不想反编译,你想要反汇编。反编译涉及将字节码转换为Java源代码,这意味着丢失了大量低级信息,如果您对编译器优化感到疑惑,这可能是您感兴趣的信息。
无论如何,我碰巧写了open source Java disassembler。与Javap不同,它甚至可以在高度病态的类中工作,因此您可以看到混淆工具对您的类进行了哪些操作。它也可以做反编译,但我不推荐它。
答案 15 :(得分:4)
JAD对我不起作用(Ubuntu 11.10问题),所以我向前迈进了JODO。至少它有Open Java源代码,并且能够正确地反编译我的 .class 。
我建议先查看'branches / generic'分支。树干不稳定。
答案 16 :(得分:4)
在IntelliJ IDEA平台上,您可以使用Java Decompiler IntelliJ Plugin。它允许您在调试过程中显示所有Java源代码,即使您没有全部这些源代码也是如此。它基于着名的工具JD-GUI。
答案 17 :(得分:1)
对于OSX,我建议:jarzilla或JD-GUI
它们都允许你查看jar,war等。文件内容并反编译其中的任何类文件。
Jarzilla:https://code.google.com/p/jarzilla/
JD-GUI:http://jd.benow.ca/
答案 18 :(得分: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源代码。