使用JD-GUI批量反编译Java文件

33

我正在寻找一款批量反编译Java类文件的程序。我找到了JAD,但它不支持一些新的Java特性。而这个程序的好处是可以从命令行执行并自动生成一个*.java文件。

我还找到了JD-GUI。它支持大多数Java特性,但缺点是不能进行批处理。你需要用该程序打开类文件并点击保存。

有没有办法让JD-GUI像JAD一样进行批处理呢?

5个回答

58

JD-GUI的命令行反编译是一个备受请求的功能,但目前尚未实现。也许您可以在此期间使用以下解决方法:

  1. 将您想要反编译的所有类打包为jar(或zip)文件。
  2. 启动JD-GUI并打开您的jar(zip)归档文件。
  3. 使用“文件” - “保存JAR源”菜单选项。它将从您的存档中反编译所有类,并将它们的源代码保存到另一个zip文件中。

不幸的是,我还没有看到任何具有命令行支持的好的开源JD-GUI替代品,因此我认为上述方法是目前最好的。


11
我刚刚发现了一个使用JD的CLI包装器 - 请参见 https://github.com/nviennot/jd-core-java。 - Rob W
2
这个看起来也很有前途(实际上是 Rob W 上述项目的一个分支),它还提供了一个库;但我还没有测试过:https://github.com/kwart/jd-cmd - ozeebee
主页现在有一个拖放反编译器。你知道这意味着什么... ;) - Alba Mendez
1
我没有保存JAR源代码的选项。 - Asif

3
我建议与JadRetro一起使用Jad——当然,它不能使Jad生成Java泛型,但反编译的源代码(包括Java 1.5+类)在功能上等同于原始代码(并且在大多数情况下可以重新编译)。
它的使用非常简单:
jadretro *.class
jad .class
注意:
1. JadRetro可以像这样批量使用:jadretro ...
2. 如果您正在使用jad v1.5.8e(而不是最新的v1.5.8g),则应将“-c”选项传递给jadretro(否则jad将拒绝反编译Java 1.5+类)。

1
看起来你可以使用命令行一次性启动一堆库,然后使用CTRL+ALT+s/CTRL+w关闭每个选项卡以快速保存/关闭。虽然不是自动化的,但在反编译大量依赖项时还是可以容忍的。(请注意,“^”只是在Windows中执行多行命令的技巧。)
"c:\jd-gui-0.3.6.windows\jd-gui.exe" ^
 c:\my-libs\lib-a.jar ^
 c:\my-libs\lib-b.jar ^
 c:\my-libs\lib-c.jar ^
 c:\my-libs\lib-d.jar ^
 c:\my-libs\lib-e.jar

1

文件 > 全部保存将会保存主目录下的所有文件。


1
JD-GUI有批量导出类文件到.jar文件中的.java文件的能力。
但是,这个功能不能通过命令行控制,而是需要鼠标点击,这不太稳定,有时会卡住。
您可以使用jd-cli(https://github.com/kwart/jd-cli/releases/tag/jd-cli-1.2.0)。
1. 准备您的.jar文件(包含类) 2. 输入:jd-cli target.jar -od jar_result -g ALL 3. 您将获得一个压缩的Java源代码文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接