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
然後,再發布就是,
你也可以使用。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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.