如何“反编译” Java类文件? [关闭]

爱⌒轻易说出口 提交于 2020-01-25 05:22:12

我可以使用什么程序来反编译类文件? 我实际上会得到Java代码,还是仅仅是JVM汇编代码?

关于该站点上的Java性能问题,我经常看到已经“反编译” Java类文件以查看编译器如何优化某些东西的人们的回答。


#1楼

到目前为止,列出的所有JAD链接似乎都已损坏,因此我找到了此站点。 效果很好(至少适用于Linux)! 在Ubuntu 11.10上,无论出于何种原因,我都必须下载静态版本。

http://www.varaneckas.com/jad


#2楼

如果要查看Java编译器如何执行某些操作,则不需要反编译,而需要反汇编。 反编译涉及将字节码转换为Java源代码,这意味着丢失了许多低级信息,并且如果您想知道编译器优化,那么这可能就是您感兴趣的信息。

无论如何,我碰巧写了一个开源Java反汇编程序 。 与Javap不同,这甚至可以在高度病理的类上使用,因此您也可以查看混淆工具对类的作用。 它也可以反编译,尽管我不建议这样做。


#3楼

煤烟是更新的Java代码的一种选择。 至少它的优点是最近仍在维护...

而且, Java Decompiler是具有独立GUI和Eclipse集成的反编译器。

最后,虽然没有像其他选项那样精巧 ,但是没有提及Jdec


#4楼

Procyon包括反编译器。 是FOSS。


#5楼

JAD对我不起作用(Ubuntu 11.10问题),所以我向前迈进了一步,开始使用JODO 。 至少它具有Open Java源代码,并且能够正确地反编译我的.class

我建议先检查“分支/常规”分支。 中继线不稳定。


#6楼

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

这些是我尝试过的其他产品:

  • 病死率
    • 有希望的方法反编译通常是失败的。 我会一直关注这个。 还积极开发并支持最新的Java功能。
  • 喀拉喀托
    • 采用不同的方法,因为它尝试输出等效的Java代码,而不是尝试重建原始源,这有可能使其更适合混淆代码。 根据我的测试,它与Procyon大致相当,但还是有一些不同之处。 我确实必须使用-skip命令行标志,以便它不会因错误而停止。 积极开发,有趣的是它是用Python编写的。
  • 图形界面
  • 贾德
    • 有效,但仅支持Java 1.4及更低版本。 也可以作为Eclipse插件使用 。 不再开发中。

#7楼

看一看cavaj


#8楼

要查看Java源代码,请检查一些反编译器。 去寻找贾德

如果要查看字节码,只需使用JDK随附的javap


#9楼

有一些反编译器...快速搜索结果:

  1. Procyon :开源(Apache 2)并积极开发
  2. Krakatau :开源(GPLv3),并积极开发
  3. CFR :开源(MIT)并积极开发
  4. 贾德
  5. DJ Java反编译器
  6. 摩卡咖啡

还有很多。

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


#10楼

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

DJ反编译 摩卡


#11楼

我使用JAD Decompiler

有一个Eclipse插件jadeclipse 。 很好


#12楼

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


#13楼

2016年2月更新:

www.javadecompilers.com将JAD列出为:

最受欢迎的Java反编译器,但仅限于这个时代。 用C ++编写,非常快。
过时,不受支持且无法正确反编译Java 5及更高版本

因此,您的里程可能会因最近的jdk而异(7,8)。

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

萨尔瓦多·瓦伦西亚Salvador Valencia)评论中 (2017年9月)所述,javadecompiler提供了一个SaaS,您可以在其中将.class文件上传到云中并返回经过反编译的代码。


原始答案:2008年10月

  • 定义J2SE 5.0(Java SE 5)的主要功能的JSR 176的最终版本已于2004年9月30日发布。
  • 由Pavel Kouznetsov先生编写的著名Java反编译器JAD支持的最新Java版本是JDK 1.3
  • 目前,可从Internet下载的大多数Java反编译器(例如“ DJ Java Decompiler”或“ Cavaj Java Decompiler”)均由JAD提供支持:它们无法显示Java 5源。

Java Decompiler (还有另一个Fast Java decompiler)具有:

  • 明确支持反编译和分析Java 5+ “ .class”文件。
  • 一个不错的GUI:

它可以与从JDK 1.1.8到JDK 1.7.0以及其他版本( JikesJRockit等)的编译器一起使用。

它具有一个在线实时演示版本 ,实际上功能齐全! 您只需将jar文件放在页面上,即可查看反编译的源代码,而无需安装任何内容。


#14楼

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


#15楼

对于OSX,我建议:jarzilla或JD-GUI

它们都允许您查看jar,war等。 文件内容并反编译其中的任何类文件。

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


#16楼

使用AndroChef Java反编译器,您可以反编译apk,dex,jar和Java类文件。 这很简单。 AndroChef JD基于FernFlower 。 您可以免费使用10次来评估它。

AndroChef支持Java语言功能,例如泛型,枚举和注释。 根据一些研究,AndroChef Java Decompiler能够反编译使用传统Java编译器生成的Java应用程序的98.04%,这具有很高的恢复率。 它是一个简单但功能强大的工具,可让您将Java和Dalvik字节码(DEX,APK)反编译为可读的Java源代码。


#17楼

在IntelliJ IDEA平台上,您可以使用Java Decompiler IntelliJ插件 。 它允许您在调试过程中显示所有Java源代码,即使您没有全部源代码也是如此。 它基于著名的工具JD-GUI


#18楼

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

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


#19楼

JD-GUI真的很好。 您可以打开一个JAR文件,然后像浏览IDE一样浏览代码。 好东西。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!