Android App的資源文件中存放了大量的應(yīng)用UI界面圖片、UI布局文件、隱私數(shù)據(jù)文件等,如何保障這些資源文件的安全性一直是開發(fā)者和應(yīng)用安全人員重點(diǎn)關(guān)注的問題。
在Android App中,資源主要分為assets資源和res資源兩類。
1.assets文件夾是存放不進(jìn)行編譯加工的原生文件,即該文件夾里面的文件不會像xml,java文件被預(yù)編譯,可以存放一些圖片、html、js、css、證書等文件。
2.res資源則存放在App的res目錄下,該類資源在App打包時(shí)大多會被編譯,變成二進(jìn)制文件,應(yīng)用層代碼通過resource id對該類資源進(jìn)行訪問。
常見方案及問題
目前市場上常見的資源文件保護(hù)方案主要有以下兩種思路:
1. 資源文件混淆保護(hù),對資源文件的路徑進(jìn)行混淆,縮短文件夾和文件名,以及替換/刪除某個(gè)資源的名稱。
此方式會增加破解者在破解時(shí)閱讀難度,但是安全強(qiáng)度有限,僅對資源文件進(jìn)行重命名并不能有效的保護(hù)資源文件,破解者依然能可查看并修改資源文件內(nèi)容,只是破解的時(shí)間成本增加了。
2. 資源文件加密保護(hù),通過加密手段,將Android資源的assets和res等目錄的內(nèi)容進(jìn)行加密、隱藏及壓縮,使用時(shí)再將文件解壓并對文件解密。
此方式安全強(qiáng)度相對較高,破解者不能輕易查看和修改資源文件。但是一般只是實(shí)現(xiàn)了對assets資源文件的部分加密, 且運(yùn)行時(shí)Android依舊需要讀取本地解密后的資源文件,依然存在很大的安全隱患和安全漏洞。
通付盾創(chuàng)新方案-簡介
通付盾移動加固團(tuán)隊(duì)在面向Android資源文件加密問題時(shí),實(shí)踐出一套更加完美的Android資源文件加密方案,不但能完成對assets和res文件進(jìn)行更高標(biāo)準(zhǔn)的全部加密保護(hù),同時(shí)能在Android加載資源文件的過程中實(shí)現(xiàn)資源文件的不落地解密,以此來避免資源文件被再次還原到本地目錄帶來的風(fēng)險(xiǎn),從而對資源文件的保護(hù)得到質(zhì)的提升。

圖1 Android資源文件加密方式
如圖1所示,在資源文件加密的過程中,程序首先對App安裝包進(jìn)行分析,獲取其中res和assets目錄的地址,并對這兩個(gè)資源文件夾下的內(nèi)容進(jìn)行抽取。
抽取完成之后,壓縮成一個(gè)新的zip文件。再對這個(gè)zip文件進(jìn)行整體加密,存放在App安裝包的assets目錄下,并且會刪除安裝包中原有的assets和res資源文件夾。
這樣攻擊者在拿到App安裝包的時(shí)候就無法從res和assets目錄下獲取到原始資源文件,也無法進(jìn)行重打包等惡意行為。對于被加密處理過的壓縮資源文件,在調(diào)用加載的時(shí)候也做了安全保護(hù)處理,核心流程如圖2所示。

圖2 Android資源文件加載方式
一般市面上對于加密后的資源包,在調(diào)用加載的時(shí)候都會進(jìn)行解密,然后形成一份本地解密后的資源包文件,再由系統(tǒng)直接調(diào)用本地的資源目錄進(jìn)行讀取或加載。這種方式還是會產(chǎn)生本地的資源目錄和文件,代表著攻擊者從本地目錄中還是能夠獲取到所有的資源文件,無疑產(chǎn)生了極大的安全風(fēng)險(xiǎn)隱患。
對于此問題,我們創(chuàng)新性的采用不落地加載資源文件的方式來解決。即在Android加載資源文件的過程中,將加密后的資源包進(jìn)行不落地解密等操作,并讓系統(tǒng)能夠讀取到資源文件,以此來避免產(chǎn)生本地的文件目錄,更有效的保護(hù)資源文件的安全。
在Android加載資源文件的過程中,系統(tǒng)最終是依靠一些關(guān)鍵的讀寫方法進(jìn)行工作,我們對這些關(guān)鍵方法進(jìn)行攔截操作,攔截到系統(tǒng)調(diào)用讀寫等動作之后,我們會開始執(zhí)行對應(yīng)目標(biāo)資源文件的解密操作,并直接將解密后的資源文件加載到內(nèi)存當(dāng)中。加載到內(nèi)存后,讓系統(tǒng)去內(nèi)存中直接讀取到資源文件,App內(nèi)就能正常使用到資源文件的內(nèi)容。
通付盾創(chuàng)新方案-加密效果
加密前后資源文件目錄對比如圖3所示:

圖3 Android資源文件加固效果
加密后的資源文件內(nèi)容如圖4所示:

圖4 Android資源文件加密數(shù)據(jù)
若想體驗(yàn)資源加密功能,可以到通付盾云平臺進(jìn)行加固體驗(yàn)。https://cloud.tongfudun.com

圖5 通付盾云平臺展示