背景
Android App的資源文件中存放了大量的應(yīng)用UI界面圖片、UI布局文件、隱私數(shù)據(jù)文件等,如何保障這些資源文件的安全性一直是開(kāi)發(fā)者和應(yīng)用安全人員重點(diǎn)關(guān)注的問(wèn)題。
在Android App中,資源主要分為assets資源和res資源兩類。
1.assets文件夾是存放不進(jìn)行編譯加工的原生文件,即該文件夾里面的文件不會(huì)像xml,java文件被預(yù)編譯,可以存放一些圖片、html、js、css、證書等文件。
2.res資源則存放在App的res目錄下,該類資源在App打包時(shí)大多會(huì)被編譯,變成二進(jìn)制文件,應(yīng)用層代碼通過(guò)resource id對(duì)該類資源進(jìn)行訪問(wèn)。
常見(jiàn)方案及問(wèn)題
目前市場(chǎng)上常見(jiàn)的資源文件保護(hù)方案主要有以下兩種思路:
1.資源文件混淆保護(hù),對(duì)資源文件的路徑進(jìn)行混淆,縮短文件夾和文件名,以及替換/刪除某個(gè)資源的名稱。
此方式會(huì)增加破解者在破解時(shí)閱讀難度,但是安全強(qiáng)度有限,僅對(duì)資源文件進(jìn)行重命名并不能有效的保護(hù)資源文件,破解者依然能可查看并修改資源文件內(nèi)容,只是破解的時(shí)間成本增加了。
2.資源文件加密保護(hù),通過(guò)加密手段,將Android資源的assets和res等目錄的內(nèi)容進(jìn)行加密、隱藏及壓縮,使用時(shí)再將文件解壓并對(duì)文件解密。
此方式安全強(qiáng)度相對(duì)較高,破解者不能輕易查看和修改資源文件。但是一般只是實(shí)現(xiàn)了對(duì)assets資源文件的部分加密,且運(yùn)行時(shí)Android依舊需要讀取本地解密后的資源文件,依然存在很大的安全隱患和安全漏洞。
通付盾創(chuàng)新方案-簡(jiǎn)介
通付盾移動(dòng)加固團(tuán)隊(duì)在面向Android資源文件加密問(wèn)題時(shí),實(shí)踐出一套更加完美的Android資源文件加密方案,不但能完成對(duì)assets和res文件進(jìn)行更高標(biāo)準(zhǔn)的全部加密保護(hù),同時(shí)能在Android加載資源文件的過(guò)程中實(shí)現(xiàn)資源文件的不落地解密,以此來(lái)避免資源文件被再次還原到本地目錄帶來(lái)的風(fēng)險(xiǎn),從而對(duì)資源文件的保護(hù)得到質(zhì)的提升。
圖1 Android資源文件加密方式
如圖1所示,在資源文件加密的過(guò)程中,程序首先對(duì)App安裝包進(jìn)行分析,獲取其中res和assets目錄的地址,并對(duì)這兩個(gè)資源文件夾下的內(nèi)容進(jìn)行抽取。
抽取完成之后,壓縮成一個(gè)新的zip文件。再對(duì)這個(gè)zip文件進(jìn)行整體加密,存放在App安裝包的assets目錄下,并且會(huì)刪除安裝包中原有的assets和res資源文件夾。
這樣攻擊者在拿到App安裝包的時(shí)候就無(wú)法從res和assets目錄下獲取到原始資源文件,也無(wú)法進(jìn)行重打包等惡意行為。對(duì)于被加密處理過(guò)的壓縮資源文件,在調(diào)用加載的時(shí)候也做了安全保護(hù)處理,核心流程如圖2所示。
圖2 Android資源文件加載方式
一般市面上對(duì)于加密后的資源包,在調(diào)用加載的時(shí)候都會(huì)進(jìn)行解密,然后形成一份本地解密后的資源包文件,再由系統(tǒng)直接調(diào)用本地的資源目錄進(jìn)行讀取或加載。這種方式還是會(huì)產(chǎn)生本地的資源目錄和文件,代表著攻擊者從本地目錄中還是能夠獲取到所有的資源文件,無(wú)疑產(chǎn)生了極大的安全風(fēng)險(xiǎn)隱患。
對(duì)于此問(wèn)題,我們創(chuàng)新性的采用不落地加載資源文件的方式來(lái)解決。即在Android加載資源文件的過(guò)程中,將加密后的資源包進(jìn)行不落地解密等操作,并讓系統(tǒng)能夠讀取到資源文件,以此來(lái)避免產(chǎn)生本地的文件目錄,更有效的保護(hù)資源文件的安全。
在Android加載資源文件的過(guò)程中,系統(tǒng)最終是依靠一些關(guān)鍵的讀寫方法進(jìn)行工作,我們對(duì)這些關(guān)鍵方法進(jìn)行攔截操作,攔截到系統(tǒng)調(diào)用讀寫等動(dòng)作之后,我們會(huì)開(kāi)始執(zhí)行對(duì)應(yīng)目標(biāo)資源文件的解密操作,并直接將解密后的資源文件加載到內(nèi)存當(dāng)中。加載到內(nèi)存后,讓系統(tǒng)去內(nèi)存中直接讀取到資源文件,App內(nèi)就能正常使用到資源文件的內(nèi)容。
通付盾創(chuàng)新方案-加密效果
加密前后資源文件目錄對(duì)比如圖3所示:
圖3 Android資源文件加固效果
加密后的資源文件內(nèi)容如圖4所示:
圖4 Android資源文件加密數(shù)據(jù)
若想體驗(yàn)資源加密功能,可以到通付盾云平臺(tái)進(jìn)行加固體驗(yàn)。
圖5通付盾云平臺(tái)展示
免責(zé)聲明:以上內(nèi)容為本網(wǎng)站轉(zhuǎn)自其它媒體,相關(guān)信息僅為傳遞更多信息之目的,不代表本網(wǎng)觀點(diǎn),亦不代表本網(wǎng)站贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。如稿件版權(quán)單位或個(gè)人不想在本網(wǎng)發(fā)布,可與本網(wǎng)聯(lián)系,本網(wǎng)視情況可立即將其撤除。