如何反编译整个Jar文件?

新手上路,请多包涵

有谁知道可以反编译整个 Jar 文件而不是单个类的免费反编译器?我对像 name\(1.class name\)2.class name.class 这样的子类有问题

原文由 StoneHeart 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

2022 更新: QuiltMC/quiltflower 是最新 最先进的 Java 反编译器

Quiltflower 是一种现代的通用反编译器,专注于提高代码质量、速度和可用性。

Quiltflower 是 Fernflower 和 Forgeflower 的一个分支。

变化包括:

  • 新语言功能(尝试使用资源、切换表达式、模式匹配等)
  • 更好的控制流生成(循环、try-catch 和 switch 等)
  • 更多可配置性
  • 更好的错误信息
  • Javadoc 应用程序
  • 多线程
  • 优化
  • 许多其他杂项功能和修复

Quiltflower 最初旨在与 Minecraft 的 QuiltMC 工具链一起使用,但很快扩展为通用 Java 反编译器,旨在创建尽可能准确和干净的代码。

如果这个名字听起来很熟悉,那是因为 Quiltflower 是 Fernflower 的一个分支, Fernflower 是著名的反编译器,由 Stiver 开发,由 Jetbrains 维护,并成为 Intellij IDEA 中的默认反编译器。

Fernflower 也很快进入了许多其他工具。

在过去的一年里,Quiltflower 添加了对现代字符串连接、代码格式化程序、密封类、模式匹配、开关表达式、资源尝试等功能的支持。 Quiltflower 还注重反编译输出的代码质量,非常重视可读性。

请参阅 输出示例

jbang 一起 运行良好

https://github.com/QuiltMC/quiltflower/releases/download/1.8.1/quiltflower-1.8.1.jar

或者:

 java -jar quiltflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\binary\Boot.class c:\Temp\source\


2009: JavaDecompiler 可以很好地处理 jar:从 0.2.5 开始,显示 JAR 文件中的所有文件。

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

另请参阅 问题“我如何“反编译”Java 类文件?” .

不过,自 2009 年底以来,JD-Eclipse 似乎没有变化(请参阅 变化)。

因此,它与最新 Eclipse(3.8、4.2+)的集成可能存在问题。

JD-Core 得到积极维护。

两者都是(SO 用户) Emmanuel Dupuy 出色工作的结果。


2018:一个更现代的选择,在 David Kennedy Araujo 的评论 中提到:

JetBrains/intellij-community/plugins/java-decompiler/engine

Fernflower 是第一个实际工作的 Java 分析反编译器,可能通常用于高级编程语言。

 java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>

java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\

有关使用最新 IntelliJ IDEA 的命令,另请参阅 如何反编译为 java 文件 intellij idea


2022 年更新: Florian Wendelborn评论 中建议

这个效果很好:来自 Leonardo Santosjdec.app

原文由 VonC 发布,翻译遵循 CC BY-SA 4.0 许可协议

首先,值得记住的是所有 Java 归档文件( .jar / .war /etc…) 基本上都是花哨的 .zip ,5 文件,5很少添加清单和元数据。

其次,为了解决这个问题,我个人使用了几种工具来处理各个层面的这个问题:

  • Jad + Jadclipse 在 IDE 中反编译 .class 文件
  • WinRAR 是我最喜欢的压缩工具,它本身就支持 Java 压缩文件(同样,请参见第一段)。
  • Beyond Compare 是我最喜欢的差异工具,如果配置正确,可以在任何存档文件之间进行即时比较,包括 jar s。非常值得一试。

上述所有的优点是,我不需要持有任何其他会使我的工作环境混乱的外部工具。我需要从其中一个文件中获取的所有内容都可以在我的 IDE 中处理,或者与其他文件本地比较。

原文由 Yuval Adam 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏