ProGuard介紹

你可以用JB來簡單的把JAVA 文件混淆一下,
然後,再發布就是,
你也可以使用。proguard

用法如下:

ProGuard 是一款免費的Java類文件壓縮器、優化器和混淆器。它能發現並刪除無用類、字段(field)、方法和屬性值(attribute)。它也能優化字節碼並刪除無用的指令。最後,它使用簡單無意義的名字來重命名你的類名、字段名和方法名。經過以上操作的jar文件會變得更小,並很難進行逆向工程。這裏提到了ProGuard的主要功能是壓縮、優化和混淆,下面我就先介紹一下這些概念,然後再介紹ProGuard的基本使用方法。


什麼是壓縮:


Java 源代碼(.java文件)通常被編譯爲字節碼(.class文件)。而完整的程序或程序庫通常被壓縮和發佈成Java文檔(.jar文件)。字節碼比 Java源文件更簡潔,但是它仍然包含大量的無用代碼,尤其它是一個程序庫的時候。ProGuard的壓縮程序操作能分析字節碼,並刪除無用的類、字段和方法。程序只保留功能上的等價,包括異常堆棧描述所需要的信息。


什麼是混淆:


通常情況下,編譯後的字節碼仍然包含了大量的調試信息:源文件名,行號,字段名,方法名,參數名,變量名等等。這些信息使得它很容易被反編譯和通過逆向工程獲得完整的程序。有時,這是令人厭惡的。例如像ProGuard這樣的混淆器就能刪除這些調試信息,並用無意義的字符序列來替換所有名字,使得它很難進行逆向工程,它進一步免費的精簡代碼。除了異常堆棧信息所需要的類名,方法名和行號外,程序只會保留功能上的等價。通過以上的瞭解,你應該明白爲什麼需要混淆了。


ProGuard支持那些種類的優化:


除了在壓縮操作刪除的無用類,字段和方法外,ProGuard也能在字節碼級提供性能優化,內部方法有:

2 常量表達式求值

2 刪除不必要的字段存取

2 刪除不必要的方法調用

2 刪除不必要的分支

2 刪除不必要的比較和instanceof驗證

2 刪除未使用的代碼

2 刪除只寫字段

2 刪除未使用的方法參數

2 像push/pop簡化一樣的各種各樣的peephole優化

2 在可能的情況下爲類添加static和final修飾符

2 在可能的情況下爲方法添加private, static和final修飾符

2 在可能的情況下使get/set方法成爲內聯的

2 當接口只有一個實現類的時候,就取代它

2 選擇性的刪除日誌代碼

實際的優化效果是依賴於你的代碼和執行代碼的虛擬機的。簡單的虛擬機比有複雜JIT編譯器的高級虛擬機更有效。無論如何,你的字節碼會變得更小。

仍有一些明顯需要優化的技術不被支持:

2 使非final的常量字段成爲內聯

2 像get/set方法一樣使其他方法成爲內聯

2 將常量表達式移到循環之外

2 Optimizations that require escape analysis


ProGuard 是一個命令行工具,並提供了圖形化用戶界面,它也可以結合Ant或J2ME Wireless Toolkit使用。通過ProGuard得到的更精簡的jar文件意味着只需要更小的存儲空間;網絡傳輸更省時;裝載速度更快和佔用更小的內存空間。另外,ProGuard非常快速和高效,它僅僅只花費幾秒鐘和幾兆的內存在處理程序。它處理的順序是先壓縮,然後優化,最後才進行混淆。The results section presents actual figures for a number of applications.與其他Java混淆器相比,ProGuard的主要優勢可能是它的基於模版文件的簡單配置。一些直觀的命令行選項或一個簡單的配置文件已經足夠了。例如,下面的配置選項保護了jar文件裏的所有applets:

-keep public class * extends java.applet.Applet

用戶指南里說明了所有可用的選項,並以大量的例子爲你演示這些功能強大的配置選項。


上面談到了ProGuard的很多好處,現在我們就來看看如何在程序中使用ProGuard吧,之前也提到了ProGuard可以用命令行、圖形界面、Ant等來執行和處理程序,同時也提到了配置文件,下面我們一起來看如何使用:

用命令行執行ProGuard的命令如下:

java –jar proguard.jar options……

具體的選項可以參考ProGuard的用戶指南,你也可以把這些屬性寫在配置文件裏;運行時,我們只需要指定這個配置文件就行了,例如:

java –jar proguard.jar @config.pro

而配置文件的格式也是要按照ProGuard提供的格式來寫的,這個可以參考ProGuard例子裏的配置文件來配置適合你的應用系統的ProGuard配置文件。ProGuard提供了圖形界面的配置和運行程序,你可以在界面上配置你想要的參數,然後運行即可。前面提到的要手動寫的配置文件也可以用圖形界面來配置和生成。

如果你要在Ant裏運行ProGuard,只需要添加一一個如下的target即可:

<target name="proguard" depends="init">

<taskdef resource="proguard/ant/task.properties" classpath="${lib.dir}/proguard/proguard.jar" />

<proguard configuration="${src.dir}/config.pro" />

</target>

你只需要制定lib.dir和src.dir屬性就行了,同樣的,這裏也用了proguard配置文件,跟上面提到的是一樣的。建議大家把ProGuardGUI當成一個生成配置文件的嚮導來使用,這樣我們只需要修改配置文件而不用重新寫一個配置文件。

如果你覺得ProGuard還不錯,那就快把它加入你的項目裏吧。

但是,我發現一個問題,混了也白混。

想拿你代碼的人,一般,混了也沒用,
混淆了之後不會的人,一般就是給他反編譯的,他也看不懂!!

轉自:http://www.matrix.org.cn/thread.shtml?topicId=312053d1-7932-11dc-aa9c-c7e733f8dc62&forumId=25
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章