强烈推荐的一款 Java 反编译工具:JAD

你的名字 2021-05-10 11:33 687阅读 0赞

01、JAD 是什么

JAD 是一款老牌的、经典的、使用起来简单的 Java 反编译工具。大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将 Java 源代码编译成 .class 字节码文件;那么把字节码文件转换成代码的过程就叫“反编译”。

JAD 镜像下载的官网是 https://varaneckas.com/jad/

如果镜像的链接地址失效了,请使用下面这个链接下载:https://download.csdn.net/download/qing_gee/10921233

02、JAD 的环境变量配置

下载好 JAD 并解压后(镜像),你将看到:

  • jad.exe (无法直接运行)
  • Readme.txt (使用说明)

为了更便捷的使用 jad,我们可以将其加入到环境变量中。

新建 JAD_HOME 环境变量。
在这里插入图片描述
加入到系统 PATH 变量中。
在这里插入图片描述

03、JAD 的使用方法

假如有这样一段代码。

  1. package com.cmower.java_demo.fourteen;
  2. public class Cmower3 {
  3. public static void main(String[] args) {
  4. String cmowers = "";
  5. for (int i = 0; i < 10; i++) {
  6. cmowers += "沉默王二";
  7. }
  8. System.out.println(cmowers);
  9. }
  10. }

保存后的文件名为 Cmower3.java。

打开 CMD,进入该文件所在的路径(如果之前未编译,请先使用 javac 进行编译,生成 class 文件),输入以下命令:

  1. jad Cmower3.class

如果提示信息如下,则证明反编译成功。

  1. Parsing Cmower3.class... Generating Cmower3.jad

与此同时,Cmower3.class 所在的文件夹下会多出来一个新的文件 Cmower3.jad,用文本编辑器打开即可查看。

  1. // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
  2. // Jad home page: http://www.kpdus.com/jad.html
  3. // Decompiler options: packimports(3)
  4. // Source File Name: Cmower3.java
  5. package com.cmower.java_demo.fourteen;
  6. import java.io.PrintStream;
  7. public class Cmower3
  8. {
  9. public Cmower3()
  10. {
  11. }
  12. public static void main(String args[])
  13. {
  14. String s = "";
  15. for(int i = 0; i < 10; i++)
  16. s = (new StringBuilder()).append(s).append("\u5A0C\u5910\u7CAF\u941C\u5B29\u7C29").toString();
  17. System.out.println(s);
  18. }
  19. }

04、和 JD-GUI 的不同之处

需要注意的是:JAD 不是 JD-GUI,两者都是反编译工具,但并不相同。

比如上面这段代码,JD-GUI 反编译后的结果如下所示:

在这里插入图片描述

可以看得出来,JD-GUI 显示的是最原始的 Java 源代码。而 JAD 显示的是更贴近事实的源代码:+ 号操作符在编译的时候其实是会转成 StringBuilder 的。

这特别的关键,如果你想知道编译器的工作内容,就可以使用 JAD。就像 javap 一样,只不过更加的清晰明了,javap 一般人看不太懂,如下:

  1. D:\program\java.git\java_demo\src\main\java\com\cmower\java_demo\fourteen>javap -c Cmower3
  2. 警告: 二进制文件Cmower3包含com.cmower.java_demo.fourteen.Cmower3
  3. Compiled from "Cmower3.java"
  4. public class com.cmower.java_demo.fourteen.Cmower3 {
  5. public com.cmower.java_demo.fourteen.Cmower3();
  6. Code:
  7. 0: aload_0
  8. 1: invokespecial #1 // Method java/lang/Object."<init>":()V
  9. 4: return
  10. public static void main(java.lang.String[]);
  11. Code:
  12. 0: ldc #2 // String
  13. 2: astore_1
  14. 3: iconst_0
  15. 4: istore_2
  16. 5: iload_2
  17. 6: bipush 10
  18. 8: if_icmpge 37
  19. 11: new #3 // class java/lang/StringBuilder
  20. 14: dup
  21. 15: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
  22. 18: aload_1
  23. 19: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  24. 22: ldc #6 // String 娌夐粯鐜嬩簩
  25. 24: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  26. 27: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
  27. 30: astore_1
  28. 31: iinc 2, 1
  29. 34: goto 5
  30. 37: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
  31. 40: aload_1
  32. 41: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
  33. 44: return
  34. }

原文链接:http://www.itwanger.com/java/2019/10/22/javac-jad.html
format_png

发表评论

表情:
评论列表 (有 0 条评论,687人围观)

还没有评论,来说两句吧...

相关阅读

    相关 [Jad] Java编译工具

    Jad可以把Java的class文件转换成源文件,在某些情况下非常有用。另外个人觉得,它似乎比jdk自带的javap反编译工具更好用。 想要使用这个工具可以参考下面这篇博文:

    相关 Jad工具编译JDK动态代理

    一 JDK动态代理生成对象的步骤 1 获取被代理对象的引用,并且获取它的所有接口,反射获取。 2 JDK动态代理类生成一个新的类,同时新的类要实现被代理类实现的所有接口。