我可以使用什么程序来反编译类文件?我真的会获得Java代码,还是仅仅是JVM汇编代码?
关于这个站点上的Java性能问题,我经常看到那些“反编译”Java类文件的人的反应,看看编译器如何优化某些东西 .
Soot是较新Java代码的选项 . 至少它具有最近仍然保持的优势......
此外,Java Decompiler是一个具有独立GUI和Eclipse集成的反编译器 .
最后,Jdec还没有像其他选项那样优雅 .
JD-GUI真的很棒 . 您只需打开一个JAR文件并浏览代码,就好像您正在使用IDE一样 . 好东西 .
2016年2月更新:
www.javadecompilers.com将JAD列为:
最受欢迎的Java反编译器,但主要仅限于此时代 . 写在C中,所以非常快 . 过时,不受支持且无法正确反编译Java 5及更高版本
所以你的里程可能会随着最近的jdk而变化(7,8) .
同一网站列出了其他工具 .
javadecompiler,如the comments在the comments(2017年9月)中所述,提供了一个SaaS,您可以将 .class 文件上传到 Cloud 端,并返回反编译代码 .
.class
原答案:2008年10月
JSR 176的最终版本,定义了J2SE 5.0(Java SE 5)的主要功能,已于2004年9月30日发布 .
由Pavel Kouznetsov先生编写的着名Java反编译器JAD支持的最新Java版本是 JDK 1.3 .
今天从互联网上下载的大多数Java反编译器,例如“DJ Java Decompiler”或“Cavaj Java Decompiler”,都是由JAD提供支持的:它们无法显示Java 5源代码 .
Java Decompiler(又一个快速Java反编译器):
显式支持反编译和分析 Java 5+ “.class”文件 .
一个不错的GUI:
它适用于从JDK 1.1.8到JDK 1.7.0以及其他(Jikes,JRockit等)的编译器 .
它具有在线live demo version,实际上功能齐全!你可以在页面上删除一个jar文件,看看反编译的源代码而不安装任何东西 .
有一些反编译器......快速搜索产生:
Procyon:开源(Apache 2)并积极开发
Krakatau:开源(GPLv3)并积极开发
CFR:开源(MIT)并积极开发
JAD
DJ Java Decompiler
Mocha
还有很多 .
这些产生Java代码 . Java带有一些东西可以让你看到JVM字节码(javap) .
要查看Java源代码,请检查一些反编译器 . 去搜索 jad .
如果要查看字节码,只需使用JDK附带的 javap .
我尝试了几个,Procyon似乎对我来说效果最好 . 它正在积极开发中,并支持最新版Java的许多功能 .
这些是我试过的其他人:
CFR
有希望,但经常失败的方法反编译 . 我会留意这个 . 还积极开发支持最新的Java功能 .
Krakatau
采用不同的方法,因为它尝试输出等效的Java代码,而不是尝试重建原始源,这有可能使其更好地用于混淆代码 . 根据我的测试,它与Procyon大致相同,但仍然很高兴有不同的东西 . 我确实必须使用 -skip 命令行标志,因此它不会用Python编写 .
-skip
JD-GUI
工作了,但是Procyon 's output was much better. Here'是page comparing Procyon output to the original and JD-GUI . JD-GUI也可用作Eclipse plugin,它似乎不是开源的,开发似乎是零星的 .
已完成,但仅支持Java 1.4及更低版本 . 也可作为Eclipse plugin . 不再在开发中 .
我用JAD Decompiler .
有一个Eclipse插件,jadeclipse . 这很不错 .
Procyon 包括一个反编译器 . 这是FOSS .
以下是截至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 decompilers in the cloud: http://www.javadecompilers.com/
您可以使用一些程序 . 您将获得实际的Java代码,但有时代码将被混淆,因此方法以一个字母或数字或随机混合的字母和数字命名 .
DJ Decompiler Mocha
大多数Java反编译器都基于JAD . 它已经更新了一段时间,并且不能很好地处理Java 1.5类 . 我还没见过能够正确处理1.5个类的工具 .
看看cavaj .
到目前为止列出的所有JAD链接似乎都被破坏了,所以我找到了这个网站 . 效果很好(至少对Linux来说)!在Ubuntu 11.10上,无论出于何种原因,我都必须下载静态的 .
http://www.varaneckas.com/jad
JAD是一个有效且简单的工具 .
另外,如果您只想查看方法,请使用javap .
如果你想看看Java编译器如何做某些事情,你不想反编译,你想要反汇编 . 反编译涉及将字节码转换为Java源代码,这意味着丢失了大量低级信息,如果您对编译器优化感到疑惑,这可能是您感兴趣的信息 .
无论如何,我碰巧写了open source Java disassembler . 与Javap不同,它甚至可以在高度病态的类中工作,因此您可以看到混淆工具对您的类进行了哪些操作 . 它也可以做反编译,但我不推荐它 .
JAD没有JODO向前移动并且在JODO上徘徊 . 至少它有Open Java源代码,并且能够正确地反编译我的.class .
我建议先查看'branches/generic'分支 . 树干不稳定 .
在IntelliJ IDEA平台上,您可以使用Java Decompiler IntelliJ Plugin . 它允许您在调试过程中显示所有Java源代码,即使您没有全部 . 它基于着名的工具JD-GUI .
使用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源代码 .
对于OSX,我建议:jarzilla或JD-GUI
他们都允许你查看jar,战争等 . 文件内容并反编译其中的任何类文件 .
Jarzilla:https://code.google.com/p/jarzilla/JD-GUI:http://jd.benow.ca/
19 回答
Soot是较新Java代码的选项 . 至少它具有最近仍然保持的优势......
此外,Java Decompiler是一个具有独立GUI和Eclipse集成的反编译器 .
最后,Jdec还没有像其他选项那样优雅 .
JD-GUI真的很棒 . 您只需打开一个JAR文件并浏览代码,就好像您正在使用IDE一样 . 好东西 .
2016年2月更新:
www.javadecompilers.com将JAD列为:
所以你的里程可能会随着最近的jdk而变化(7,8) .
同一网站列出了其他工具 .
javadecompiler,如the comments在the comments(2017年9月)中所述,提供了一个SaaS,您可以将
.class
文件上传到 Cloud 端,并返回反编译代码 .原答案:2008年10月
JSR 176的最终版本,定义了J2SE 5.0(Java SE 5)的主要功能,已于2004年9月30日发布 .
由Pavel Kouznetsov先生编写的着名Java反编译器JAD支持的最新Java版本是 JDK 1.3 .
今天从互联网上下载的大多数Java反编译器,例如“DJ Java Decompiler”或“Cavaj Java Decompiler”,都是由JAD提供支持的:它们无法显示Java 5源代码 .
Java Decompiler(又一个快速Java反编译器):
显式支持反编译和分析 Java 5+ “.class”文件 .
一个不错的GUI:
它适用于从JDK 1.1.8到JDK 1.7.0以及其他(Jikes,JRockit等)的编译器 .
它具有在线live demo version,实际上功能齐全!你可以在页面上删除一个jar文件,看看反编译的源代码而不安装任何东西 .
有一些反编译器......快速搜索产生:
Procyon:开源(Apache 2)并积极开发
Krakatau:开源(GPLv3)并积极开发
CFR:开源(MIT)并积极开发
JAD
DJ Java Decompiler
Mocha
还有很多 .
这些产生Java代码 . Java带有一些东西可以让你看到JVM字节码(javap) .
要查看Java源代码,请检查一些反编译器 . 去搜索 jad .
如果要查看字节码,只需使用JDK附带的 javap .
我尝试了几个,Procyon似乎对我来说效果最好 . 它正在积极开发中,并支持最新版Java的许多功能 .
这些是我试过的其他人:
CFR
有希望,但经常失败的方法反编译 . 我会留意这个 . 还积极开发支持最新的Java功能 .
Krakatau
采用不同的方法,因为它尝试输出等效的Java代码,而不是尝试重建原始源,这有可能使其更好地用于混淆代码 . 根据我的测试,它与Procyon大致相同,但仍然很高兴有不同的东西 . 我确实必须使用
-skip
命令行标志,因此它不会用Python编写 .JD-GUI
工作了,但是Procyon 's output was much better. Here'是page comparing Procyon output to the original and JD-GUI . JD-GUI也可用作Eclipse plugin,它似乎不是开源的,开发似乎是零星的 .
JAD
已完成,但仅支持Java 1.4及更低版本 . 也可作为Eclipse plugin . 不再在开发中 .
我用JAD Decompiler .
有一个Eclipse插件,jadeclipse . 这很不错 .
Procyon 包括一个反编译器 . 这是FOSS .
以下是截至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 decompilers in the cloud: http://www.javadecompilers.com/
您可以使用一些程序 . 您将获得实际的Java代码,但有时代码将被混淆,因此方法以一个字母或数字或随机混合的字母和数字命名 .
DJ Decompiler Mocha
大多数Java反编译器都基于JAD . 它已经更新了一段时间,并且不能很好地处理Java 1.5类 . 我还没见过能够正确处理1.5个类的工具 .
看看cavaj .
到目前为止列出的所有JAD链接似乎都被破坏了,所以我找到了这个网站 . 效果很好(至少对Linux来说)!在Ubuntu 11.10上,无论出于何种原因,我都必须下载静态的 .
http://www.varaneckas.com/jad
JAD是一个有效且简单的工具 .
另外,如果您只想查看方法,请使用javap .
如果你想看看Java编译器如何做某些事情,你不想反编译,你想要反汇编 . 反编译涉及将字节码转换为Java源代码,这意味着丢失了大量低级信息,如果您对编译器优化感到疑惑,这可能是您感兴趣的信息 .
无论如何,我碰巧写了open source Java disassembler . 与Javap不同,它甚至可以在高度病态的类中工作,因此您可以看到混淆工具对您的类进行了哪些操作 . 它也可以做反编译,但我不推荐它 .
JAD没有JODO向前移动并且在JODO上徘徊 . 至少它有Open Java源代码,并且能够正确地反编译我的.class .
我建议先查看'branches/generic'分支 . 树干不稳定 .
在IntelliJ IDEA平台上,您可以使用Java Decompiler IntelliJ Plugin . 它允许您在调试过程中显示所有Java源代码,即使您没有全部 . 它基于着名的工具JD-GUI .
使用AndroChef Java Decompiler,您可以反编译apk,dex,jar和java类文件 . 它简单易行 . AndroChef JD基于FernFlower . 您可以在10个免费使用中评估它 .
对于OSX,我建议:jarzilla或JD-GUI
他们都允许你查看jar,战争等 . 文件内容并反编译其中的任何类文件 .
Jarzilla:https://code.google.com/p/jarzilla/
JD-GUI:http://jd.benow.ca/