混淆利器proguard的用法
利用java程式設計,最頭痛的就是程式碼的反編譯,現在的反編譯工具也比較多,只要一反編譯,大部分都能被還原過來。這時候,用JAVA寫的PROGUARD橫空出世了,它集壓縮、優化、混淆於一體。下面介紹一下它的簡單用法。
找到裡面的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系統命名系統嚴令禁止使用的檔名,反編譯時就更增加難度了