利用java编程,最头痛的就是代码的反编译,现在的反编译工具也比较多,只要一反编译,大部分都能被还原过来。这时候,用JAVA写的PROGUARD横空出世了,它集压缩、优化、混淆于一体。下面介绍一下它的简单用法。
先去官网http://proguard.sourceforge.net/ 下载一个版本
找到里面的examples文件夹,先看一下示例
其中在applications.pro文件里应有这么一句
java -jar progurad.jar @application.pro
其中最为关键的就是application.pro里的文件配置,只要这个文件配置合适了,执行一下这个语句即可。
打开这个.pro文件,可以看到里面的参数:
1、-injars //表示要进行混淆的class文件或jar、war等,可用文件目录表示,例如:
2、-injar ../jar(**.class) 或者-injar ../jar/in.jar
3、-outjars 表示要生成的jar包,后跟jar包名字,如:-outjars ../out.jar
4、-libraryjars 后面跟要编译in.jar的其它类包,如果是多个,用多行列出,如:
5、-libraryjars d:/1/2/1.jar
6、-libraryjars d:/1/2/2.jar
7、-libraryjars d:/1/2/3.jar
8、-libraryjars d:/1/2/4.jar
9、-keep 后跟项目的入口类,如:-keep public class gps.lip.LIPService{ public static void main(java.lang.String[])}
-keep 后还可以跟在项目中没有用到的类或方法,但在配置文件中有用到,如果不用该参数保留出来,在做优化时,就会直接的删除掉了,项目运行时会报找不到类的错误。
-printusage该参数是把优化时移除的类及方法记录下来,后跟一个文件。如:-printusage ./jar/deadCode.txt
其余的常用的参数,如:
10、-target 1.6 //指定版本号
11、-forceprocessing //强制执行,即使过期
12、-allowaccessmodification //指定,当执行修改方法或属性的modifer范围
13、-printmapping //指定混淆后,类或方法生成的map,后跟指定的路径及文件名 *.map
14、-overloadaggressively //
15、-repackageclasses //把执行后的类重新放在某一个目录下,后跟一个目录名
16、-dontpreverify //不用预先检查
17、-verbose //不用输出详细的过程
18、-dontwarn//不用输出警告
19、-dontnote//不用输出通知
为了增加混淆的难度,可以在
java -jar progurad.jar @application.pro 后再加 -classobfuscationdictionary ./dictionaries/windows.txt
即java -jar progurad.jar @application.pro -classobfuscationdictionary ./dictionaries/windows.txt
这样生成的类名都是window系统命名系统严令禁止使用的文件名,反编译时就更增加难度了