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