1. 程式人生 > >混淆利器proguard的用法

混淆利器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系統命名系統嚴令禁止使用的檔名,反編譯時就更增加難度了