1、jad下载地址
http://www.javadecompilers.com/jad
2、jad配置环境变量
解压下载好的压缩包,可以得到一个jad.exe 文件。
配置环境变量主要目的是你可以全局使用,不配置的话你就只能在jad.exe 文件目录下使用jad命令
步骤:略。
3、使用jad命令
打开cmd窗口 cd 到class文件目录、或者使用绝对路径
jad -p $Proxy0.class > $Proxy.java
#在当前目录生成一个.java 文件
或者:
jad $Proxy0.class
#在当前目录生成一个.jad文件
4、jad命令
-a - 用JVM字节格式来注解输出
-af - 同 -a,但是注解的时候用全名称
-clear - 清除所有的前缀
-b - 输出多于的括号 (e.g., if(a) { b(); }, default: no)
-d
- 指定输出文件的文件目录
-dead -试图反编译代码的dead 部分(default: no)
-disass - 不用用字节码的方式反编译 (no JAVA source generated)
-f - 输出整个的名字,无论是类还是方法
-ff -输出类的成员在方法之前 (default: after methods)
-i - 输出所有的变量的缺省的最初值
-l - 将strings分割成指定数目的块的字符 (default: no)
-lnc - 将输出文件用行号来注解 (default: no)
-nl - 分割strings用新行字符 newline character (default: no)
-nodos -不要去检查class文件是否以dos方式写 (CR before NL, default: check)
-nocast - 不要生成辅助文件
-nocode -不要生成方法的源代码
-noconv - 不要转换java的定义符 (default: do)
-noctor - 不允许空的构造器存在
-noinner -关掉对内部类的支持 (default: turn on)
-nolvt - 忽略局部变量的表信息
-nonlb - 不要输出一个新行在打开一个括号之前 (default: do)
-o - 无需确认直接覆盖输出 (default: no)
-p - 发送反编译代码到标准输出 STDOUT (e.g., for piping)
指定输出文件的名字的话,用以下的转移命令:
jad -p example1.class > myexm1.java
输出带字节码注释和源码的(最常用):
jad -o -a Test.class > ss.java
反编译整个文件夹下的class:
jad -p *.class
反编译当个class:
jad Test.class
tree目录下的所有*.class文件:
jad -o -r -sjava -dsrc tree/*/.class
5、jd-gui下载地址
http://java-decompiler.github.io/
6、jd-gui使用
直接file-open file 找到你需要编译的jar 或者class文件就可以了。
7、jd-gui使用问题
1、jdk代理自动生成的代理类时没有编译出来
解决方法:使用jad命令反编译