前言什么是代碼混淆代碼混淆,是指將計算機程序的代碼,轉換成一種功能上等價,但是難于閱讀和理解的形式的行為。
代碼混淆常見手段1、名稱混淆
將有意義的類,字段、方法名稱更改為無意義的字符串。生成的新名稱越短,字節(jié)代碼越小。在名稱混淆的字節(jié)代碼中,包,類,字段和方法名稱已重命名,并且永遠不能恢復原始名稱。不幸的是,控制流程仍然清晰可見。故而需要流混淆
2、流混淆
用于if, switch, while,for等關鍵字,對字節(jié)碼進行細微的修改,模糊控制流,而不改變代碼在運行時的行為。通常情況下,選擇和循環(huán)等邏輯構造會被更改,因此它們不再具有直接等效的JAVA源代碼。流模糊的字節(jié)碼通常強制反編譯器將一系列標簽和非法的goto語句插入到它們生成的源代碼中。源代碼有時會因為反編譯錯誤而變得更加模糊
其他
異常混淆、字符串加密混淆、引用混淆等
代碼混淆的作用不僅僅是保護代碼,它也有精簡編譯后程序大小的作用。由于縮短變量和函數名以及丟失部分信息的原因, 編譯后jar文件體積大約能減少25% ,這對當前費用較貴的無線網絡傳輸是有一定意義的
代碼混淆可能帶來的問題被混淆的代碼難于理解,因此調試以及除錯也變得困難起來。開發(fā)人員通常需要保留原始的未混淆的代碼用于調試。對于支持反射的語言,代碼混淆有可能與反射發(fā)生沖突。代碼混淆并不能真正阻止反向工程,只能增大其難度。因此,對于對安全性要求很高的場合,僅僅使用代碼混淆并不能保證源代碼的安全。
常用的混淆工具1、ipaguard
ipaguard是一款免費的Java混淆器(非開源),它有Java和.NET兩個版本。yGuard 完全免費,基于 Ant 任務運行,提供高可配置的混淆規(guī)則。
官網地址:IpaGuard官網--IOS 應用程序ipa文件混淆加密保護工具
2、proguard
proguard是一個免費的 Java類文件的壓縮,優(yōu)化,混肴器。它刪除沒有用的類,字段,方法與屬性。使字節(jié)碼最大程度地優(yōu)化,使用簡短且無意義的名字來重命名類、字段和方法
官網地址:https://www.guardsquare.com/en/products/proguard
3、allatori
第二代Java混淆器。所謂第二代混淆器,不僅僅能進行字段混淆,還能實現(xiàn)流混淆。
Allatori具有以下幾種保護方式:命名混淆,流混淆,調試信息混淆,字符串編碼,以及水印技術。對于教育和非商業(yè)項目來說這個混淆器是免費的。支持war和jar格式,支持對需要混淆代碼的應用程序添加有效日期。
官網地址:http://www.allatori.com/
本文主要介紹基于ipaguard如何進行混淆
ipaguard入門首先需要去官網下載:IpaGuard官網--IOS 應用程序ipa文件混淆加密保護工具。
1、下載的jar可以放到項目可以讀到的地方。比如項目根目錄,形如下圖
2、解壓安裝包,雙擊運行
ipa編譯出來后,或者ipa進行修改后,需要進行重新簽名才能安裝到測試手機,或者提交App store供apple 商店審核上架。ipaguard有簽名和重簽名功能,能在windows,mac,和linux上運行。在對ipa進行混淆和保護后,可以直接通過簽名安裝到測試手機,非常的方便測試檢查混淆后的效果。
第一階段測試和配置嘗試階段 配置好要混淆的內容后直接點擊處理安裝到手機,這階段使用開發(fā)測試證書,測試描述文件。描述文件要包含測試設備的udid才能安裝到設備。 第二階段發(fā)布階段 當測試ok,運行沒問題后把測試證書和描述文件改成發(fā)布證書和描述文件,點擊處理后產生最終的ipa,發(fā)布類型無法安裝到手機,只能提交上架發(fā)布使用
注意??:描述文件和ipa里面的bundle id匹配。
打開要處理的IPA文件
第一項,填寫我們需要重簽名的 ipa 路徑(當前導入的路徑跟導出的路徑)
設置簽名使用的證書和描述文件
測試配置階段使用開發(fā)測試證書,方便安裝到手機測試混淆后ipa是否工作正常,測試ok,最后準備上架的時候再改成發(fā)布證書和發(fā)布描述文件
如果ipa需要特殊的權限配置,可以使用權限配置文件
如果希望直接處理完后安裝到設備,則勾選安裝到設備選項 蘋果手機數據線連接電腦即可識別設備,如果鏈接成功后沒顯示設備,則先安裝itunes或者ios驅動。
開始ios ipa重簽名
第四項點擊開始處理,ipaguard會自動嘗試講ipa安裝到手機,如果是發(fā)布證書并且忘記關閉安裝到設備選項,則安裝可能會失敗,但是ipa是正常生成的,可以用來上架。
總結自從知道ipagurd后,我基本上都不用allatori。不過在用混淆工具也有一些細節(jié)點,比如用到的開源包,就不要對開源包進行混淆了,不然可能會導致項目報錯,還有一些對外提供的API,最好也不要混淆。ipagurd是一個值得推薦的混淆工具,因為真的開箱即用。他提供了很多示例,如果上面的介紹的混淆工具,不能滿足需求,可以查看如下鏈接Ipa Guard使用常見問題 | ipaguard使用教程。該鏈接提供了很多混淆工具介紹