当前位置:  开发笔记 > 编程语言 > 正文

我如何"反编译"Java类文件?

如何解决《我如何"反编译"Java类文件?》经验,为你挑选了15个好方法。

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

关于这个站点上的Java性能问题,我经常看到那些"反编译"Java类文件的人的反应,看看编译器如何优化某些东西.



1> VonC..:

2016年2月更新:

www.javadecompilers.com将JAD列为:

最流行的Java反编译器,但主要是这个时代.用C++编写,非常快.
过时,不受支持且无法正确反编译Java 5及更高版本

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

同一网站列出了其他工具.

正如Salvador Valencia在评论(2017年9月)中所述,javadecompiler 提供了一个SaaS,您可以将.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等)的编译器.

它具有在线实时演示版本,实际上功能齐全!你可以在页面上删除一个jar文件,看看反编译的源代码而不安装任何东西.


+1值得一提的是它也是模块化的,所以核心(用C++实现)可以在其他地方使用.
@Rishi就像你用任何语言或平台保护你的知识产权一样 - 优秀的律师.DRM只是一个绑带.

2> billjamesdev..:

有一些反编译器......快速搜索产生:

    Procyon:开源(Apache 2)并积极开发

    Krakatau:开源(GPLv3)并积极开发

    CFR:开源(MIT)并积极开发

    JAD

    DJ Java Decompiler

    摩卡

还有很多.

这些产生Java代码.Java带有一些东西可以让你看到JVM字节码(javap).


我还要补充一点,Procyon,CFR,JAD和DJ可作为网络服务提供:http://www.javadecompilers.com/

3> Marko..:

要查看Java源代码,请检查一些反编译器.去搜索jad.

如果要查看字节码,只需使用JDK附带的javap即可.


我建议使用其中一个开源反编译器,因为它们是积极开发的.使用[Procyon](https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler),[CFR反编译器](http://www.benf.org/other/cfr/)或[Krakatau]( https://github.com/Storyyeller/Krakatau)(Python)代替.

4> bmaupin..:

我尝试了几次,而且Procyon似乎对我来说效果最好.它正在积极开发中,并支持最新版Java的许多功能.

这些是我试过的其他人:

CFR

有希望,但往往失败的方法反编译.我会密切注意这个.还积极开发支持最新的Java功能.

喀拉喀托

采用不同的方法,它尝试输出等效的Java代码,而不是尝试重建原始源,这有可能使混淆代码更好.根据我的测试,它与Procyon大致相当,但仍然很高兴有不同的东西.我必须使用-skip命令行标志,因此它不会停止错误.积极开发,有趣的是它是用Python编写的.

JD-GUI

工作,但Procyon的输出要好得多.这是一个将Procyon输出与原始和JD-GUI进行比较的页面.JD-GUI也可以作为Eclipse插件使用,它根本不适用于我.似乎不是开源的,发展似乎是零星的.

JAD

工作,但只支持Java 1.4及更低版本.也可以作为Eclipse插件使用.不再在开发中.



5> sakana..:

我使用JAD Decompiler.

有一个Eclipse插件,jadeclipse.这很不错.



6> Janus Troels..:

Procyon包含一个反编译器.这是FOSS.



7> Quinn Taylor..:

Soot是较新Java代码的选项.至少它具有最近仍然保持的优势......

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

最后,Jdec没有被提及,尽管它没有其他选项那么精致.



8> 小智..:

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



9> Andrew Rukin..:

以下是截至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/



10> Mike Pone..:

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

DJ Decompiler Mocha



11> John Meagher..:

大多数Java反编译器都基于JAD.这是一个很棒的工具,但遗憾的是还没有更新一段时间,并且不能很好地处理Java 1.5+类.我还没有看到任何能够正确处理1.5+课程的工具.


在这里:我刚刚发布了答案答案;)JDK1.5以及更多支持!

12> Paulo Guedes..:

看看卡瓦伊.


这也使用了下面的`jad`.

13> kdazzle..:

到目前为止列出的所有JAD链接似乎都被打破了,所以我找到了这个网站.效果很好(至少对Linux来说)!在Ubuntu 11.10上,无论出于何种原因我都必须下载静态的.

http://www.varaneckas.com/jad



14> Berlin Brown..:

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

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



15> Antimony..:

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

无论如何,我碰巧编写了一个开源Java反汇编程序.与Javap不同,它甚至可以在高度病态的类中工作,因此您可以看到混淆工具对您的类进行了哪些操作.它也可以做反编译,但我不推荐它.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有