Java反编译⼯具Jad详解
项⽬过程中需要反编译⼀个jar包,于是作了⼀些学习,记录下来。
(JAva Decompiler)是⼀个Java的反编译器,可以通过命令⾏把Java的class⽂件反编译成源代码。
如果你在使⽤编写代码的时候遇到不到源代码的第三⽅库,⽽且你⼜需要看看这个库的具体实现,那么你就需要使⽤这个东西。⽽且如果你是使⽤Eclipse的话,还有⼀个Eclipse插件,提供⼀个class⽂件查看器可以直接打开class⽂件查看其反编译后的源代码,太⽅便了,太⽅便了!
不过,可惜的是这个开源项⽬似乎已经关闭了,官⽅⽹站已经上不去了,有个叫Tomas Varaneckas的好⼼⼈收集了所有的版本提供给⼤家下载:
⽽且这个最新的版本也只⽀持Java 4,不⽀持Java 5。还有⼀个叫做的⼯具⽀持Java 5的新特性,如enum等,⽽且它提供独⽴的GUI程序和基于Eclipse的插件,也很⽅便。但是对于,作者没有提供下载的链接,他说“Open the sources of JD-Core is not on my roadmap: I spent too many time on this project.”当然后⾯也有⼀⼤篇⽂章是别⼈⽤来骂他的,可以看,蛮有意思。
我的项⽬中需要将第三⽅库反编译出来,让后对其进⾏修改,然后再编译,不仅仅是查看,因此只能⽤命令⾏的Jad来做。
使⽤⽅法:
[1] 反编译⼀个class⽂件:jad example.class,会⽣成example.jad,⽤⽂本编辑器打开就是java源代码
java源码阅读工具[2] 指定⽣成源代码的后缀名:jad -sjava example.class,⽣成example.java
[3] 改变⽣成的源代码的名称,可以先使⽤-p将反编译后的源代码输出到控制台窗⼝,然后使⽤重定向,输出到⽂件:jad -p example.class > myexample.java
[4] 把源代码⽂件输出到指定的⽬录:jad -dnewdir -sjava example.class,在newdir⽬录下⽣成example.java
[5] 把packages⽬录下的class⽂件全部反编译:jad -sjava packages/*.class
[6] 把packages⽬录以及⼦⽬录下的⽂件全部反编译:jad -sjava packages/**/*.class,不过你仍然会发现所有的源代码⽂件被放到了同⼀个⽂件中,没有按照class⽂件的包路径建⽴起路径
[7] 把packages⽬录以及⼦⽬录下的⽂件全部反编译并建⽴和java包⼀致的⽂件夹路径,可以使⽤-r命令:jad -r -sjava packages/**/*.class
[8] 当重复使⽤命令反编译时,Jad会提⽰“whether you want to overwrite it or not”,使⽤-o可以强制覆盖旧⽂件
[9] 还有其他的参数可以设置⽣成的源代码的格式,可以输⼊jad命令查看帮助,这⾥有个⼈做了简单的翻译:
[10] 当然,你会发现有些源⽂件头部有些注释信息,不⽤了,jad没有参数可以去掉它,⽤别的办法吧。
最后,jad不能直接反编译jar包,直接解压了再反编译吧(这个⽅法很显然,我实在不好意思写出来)。
转⾃: