在腦海中假想一下,在你苦苦經歷 81 難,摸爬滾打研制的技術輪子,終于成型得以問世,遂打個 JAR 包投放于萬網之中。可是沒過幾天,同樣功能的輪子出現在你的眼前,關鍵是核心代碼都一樣,此時你的內心是否會像一萬只草泥馬奔騰而過呢?
面對此景,我們有沒有辦法,去混淆一些核心代碼,來捍衛自己勞動成果呢?
作為臣服于 JAVA 的子民們,一切又都是那么的幸福,諸多開源的輪子幫你解決了這個問題,今天不妨嘗試用一用 ProGuard 這款輪子。
ProGuard 是一個壓縮(shrink)、優化(optimize)和混淆(obfuscate) Java 字節碼文件的免費的工具。它可以刪除無用的類、字段、方法和屬性,可以刪除沒用的注釋,最大限度地優化字節碼文件。它還可以使用簡短的無意義的名稱來重命名已經存在的類、字段、方法和屬性。常常用于Android 開發用于混淆最終的項目,增加項目被反編譯的難度——摘自百度百科。
如官方圖示(看不清,懵懂就行)
- ProGuard 會對輸入的 JAR 文件按照壓縮、優化、混淆、預驗證的順序依次進行處理,最后得到輸出 JAR 文件;
- ProGuard 使用依賴類庫(Library jars)來輔助對 Input jars 類之間的依賴關系進行解析,但是依賴類庫本身不會被處理,也不會被包含到 Output jars 中。
1. 工欲善其事必先利其器
下載最新版的 ProGuard,然后解壓,進入到 bin 目錄,windows 下直接雙擊 proguardgui.bat 即可,而 mac Os 下控制臺運行 proguardgui.sh 即可。
下載地址:https://sourceforge.net/projects/proguard/files/latest/download
本次演示是在 Mac Os 下,控制臺輸入 sh proguardgui.sh。ProGuard 運行啟動成功的界面如下。
2. 工具而已,用就行了
在 Input/Output 中,Add input 選擇要混淆的 JAR 包,注意一定要添加待混淆的 JAR 包依賴的所有類庫,Add output 指定輸出文件名(例如 a.jar);壓縮(Shrinking)和優化(Optimization)不是本次的重點,略過;Obfuscation 中有很多混淆規則,可以自行依據官網進行配置調整;最后選擇 Process,點擊右下角的 Process! 即可。
成功操作界面會提示:Processing completed successfully!
3. 效果如何呢?
采用 JD-GUI 打開根據混淆輸出的 JAR,效果貌似像那么回事兒。
保護你勞動成果的方式有很多種,本次 2 分鐘簡單的分享,只是讓你們知道有 ProGuard 這款技術輪子存在,有太多的細節需要去實踐,大家可以按需,自行按照官網進行深入使用。