Android apk資源?;し槳稈芯糠治?/div>

Android APP以APK文件形式存在,APP中主要包含應用程序代碼和資源文件兩部分,如何有效?;ndroid應用中的代碼、資源的安全一直是開發者最關心的話題。針對應用程序代碼,目前主要有兩類方案,即代碼混淆和應用加密。比較常見的代碼混淆有proguard、dexguard等,而應用加密近些年國內也涌現出很多安全廠商提供該服務。本文則主要針對Android apk資源文件?;し槳附蟹治?。

  Android apk中的資源主要分為assets資源和res資源兩類。Assets資源存放在APP的assets目錄下,該類文件是一些原始文件,APP打包時并不會對其進行編譯,而是直接打包到APP中,對于這一類資源文件的訪問,應用層代碼需要通過文件名對其進行訪問。Res資源則存放在APP的res目錄下,該類資源在APP打包時大多會被編譯,變成二進制文件,并會為每個該類文件賦予一個resource id。對于該類資源的訪問,應用層代碼則是通過resource id進行訪問的。

  Android apk資源文件中存放了大量的應用UI界面圖片、UI布局文件、隱私數據文件等,保障這些文件的安全性一直困擾著開發者,接下來將具體分析一下目前市場上常見的資源文件?;し槳?。

  一、 Android資源文件?;は喙胤槳?/p>

  目前對Android應用資源文件的?;ぶ饕辛嚼嚳槳?,一類是對資源文件混淆?;?,另一種則是對資源文件加密?;?。

  1. 資源文件混淆?;?/p>

  Android apk開發過程中公司大都提倡命名規范化,因此通過文件名稱非常容易理解其含義,這樣有利于開發者理解和維護應用,但是同時也給應用破解者提供了方便,破解者通過這些命名很容易便可找到他們需要的文件位置,并理解這些文件的意圖。對資源文件進行重命名則可以在一定程度上提升破解者理解這些文件的難度,從而一定程度上提升資源文件的安全性。例如將原資源文件res/layout/activity_main.xml命名為res/a/a.xml,通過layout和activity_main.xml我們很容易知道該文件可能是個布局相關文件,且可能是主activity的布局文件,而被混淆變成res/a/a.xml后,破解者則很難通過名字知道a.xml文件的作用。

  我們知道,Android應用在編譯過程中aapt工具會對資源文件進行編譯、打包,并生成一個resource.arsc文件,resource.arsc文件相當于一個文件索引表,記錄了很多跟資源相關的信息。因此,如果需要對資源文件進行混淆,如何保證resource.arsc文件的正確性是個難點。至少我們可以兩個方面攻克這一問題。

  1) 修改aapt方案

  在APP的編譯打包過程中,工具aapt負責對資源文件進行編譯、打包并生成resource.arsc文件,因此我們可以通過分析并修改aapt源碼來實現生成正確的resource.arsc文件。

  2) 修改resource.arsc文件

  修改aapt源碼的方案對開發者要求較高,且不同版本aapt可能有區別,直接修改打包好的APP中的resource.arsc文件可能也是一個不錯的方案。

  文件resource.arsc的格式可以通過分析aapt的源碼獲知,且目前也有很多文檔介紹該文件的格式,因此,我們可以通過對APP解包、讀取、解析、修改其中的資源文件和resource.arsc文件來實現對APP資源文件的混淆。

  下面我們通過一個demo APP文件展示一下資源文件混淆?;さ男Ч?。

  其中圖1為資源文件?;で暗淖試次募峁雇?,圖2為資源文件?;ず蟮淖試次募峁雇?。

  

  圖1 資源文件?;で皉es目錄結構

  

  圖2 資源文件?;ず髍es目錄結構

  從圖1和圖2可以看出,資源文件混淆后,原來的res目錄變成了r目錄,該目錄下的目錄名字都變成了沒有字面意義的字母,從而一定程度上保證了res資源的安全性。

  以上提出的資源文件混淆?;し槳贛幸歡際蹌訊?,所以在開發者實際使用過程中并沒有廣泛運用。目前,開發者出于技術能力和精力的種種限制,越來越多的開發者選擇使用第三方應用加密?;て教ɡ詞迪侄宰試次募謀;?。

  2. 資源文件加密?;?/p>

  資源文件加密?;?,從字面來看,無非是對APP中的資源文件進行加密,在APP運行時對資源文件進行解密恢復,從而使應用正常訪問資源文件。由于資源文件被加密,因此通過對APP進行反編譯并不能看到真正的資源文件,從而保證資源文件的安全性。雖然資源文件加密?;ご筇逅悸啡绱?,但是實現方案和效果則可能不同。下面以360加固保提供的資源文件加密?;し槳肝治銎浞槳感Ч?。

  寫一個demo APP文件,使用360加固保的資源文件加密?;すδ?,圖3和圖4為資源?;で暗腁PP的assets目錄和res目錄文件結構,圖5和圖6為資源?;ず蟮腁PP的assets目錄和res目錄文件結構。

  

  圖3 資源?;で癮ssets目錄文件結構

  

  圖4 資源?;で皉es目錄文件結構

  如圖3和圖4所示,原APP的assets目錄下有三個文件,分別是a.log、b.log、c.log。res目錄下有很多文件,如ui文件、配置文件等。目錄assets下面存放的是未進行壓縮的原始文件,可以很容易的被破解者修改并重打包,目錄res下的文件雖然大部分是經過了壓縮處理的,但是其中的圖片卻能直接看到,且即使是被壓縮過的二進制文件也很容易被破解者修改。

  接下來使用360加固保的對該APP進行資源文件?;?,解壓?;ず蟮腁PP,得到圖5和圖6。圖5為360加固保資源文件?;ず蟮腶ssets目錄結構,圖6為資源文件?;ず蟮膔es目錄結構。

  

  圖5 資源?;ず骯sset目錄文件結構

  

  圖6 資源?;ず髍es目錄文件結構

  圖5中可以看出,之前該目錄下的a.log、b.log、c.log文件消失了,但多出了libjiagu.so、libjiagu_x84.a、libjiagu_x86_1.a、libjiagu_x86.so和resConf文件。多出的這些文件則是360加固保的APP加固和資源加密相關的文件。

  圖6中可以看出,之前res目錄下的很多文件都不見了,查看了一下留下的幾個目錄的文件,里面的文件是APP的圖標。

  可以看到使用360加固保后,能對資源文件進行有效的加密?;ばЧ?。360加固保資源文件加密?;さ拇筇逶砣縵攏?/p>

  1) 抽取原APP中需要加密?;さ淖試次募?/p>

  解壓抽取APP中的需要加密的資源文件,并過濾到一些不能?;さ淖試次募?,如APP圖標等;

  2)加密資源文件

  對抽取出來的需要加密?;さ淖試次募屑用艽?,并隱藏起來;

  3) 實現外殼程序

  要想讓APP正常運行,則需要為使用資源?;ず蟮腁PP實現一個外殼程序,360加固保本身具有APP加固功能,因此他們可以將資源文件?;さ幕指闖絳蚣傻?60加固保的加固殼程序里面,如果不使用360加固保,那么我們就需要自己實現一個外殼,外殼程序需要負責在APP使用資源前對資源文件進行恢復。例如如果?;の頤親約旱腁PP資源,那么我們就需要實現一個資源恢復程序外殼,并將該外殼的程序入口代碼放到APP中,殼程序入口的運行時機應足夠早,比如放到我們可以將這個外殼放在應用代碼的Application類里面。

  本文介紹了兩種可行的資源文件混淆?;し槳?,一種是修改aapt工具,讓aapt在編譯資源時生成混淆后的正確的resource.arsc文件,同時修改資源文件名稱,另一種方案則是直接修改APP中的資源文件名,同時修改其中的resource.arsc文件。

  從實現難易度和工作量綜合來看,第二種方案,即直接修改APP中相關文件可能更為適合,但從?;ばЧ純?,兩種方案實現的混淆效果是一樣的,都是對文件進行重命名。

  資源混淆?;し槳贛湃鋇悖?/p>

  優點:可減小APP體積。

  缺點:安全強度有限:僅對資源文件進行重命名并不能有效的?;ぷ試次募?,破解者依然能可查看并修改資源文件內容,

  assets文件?;つ訊冉洗螅喝縲瓚詀ssets目錄下的資源進行混淆,則需要修改java程序代碼或者dex文件,難度和復雜度較大,容易出錯。

  資源文件加密?;し槳贛湃鋇悖?/p>

  本文對360加固保的資源文件?;し槳傅男Ч褪迪紙辛朔治?,從效果來看該?;し槳赴踩慷冉細?,資源文件加密處理后在APP中不可見,且殼程序采用native代碼實現,逆向難度較大。

  優點:安全強度高,破解者不能查看和修改資源文件。

  缺點:由于需要運行時解密,有可能會對APP的性能有所影響,不過經過測試平臺的測試,加固后對APP的兼容性在99%以上,這也是越來越多的開發者選擇這種第三方應用加固平臺的原因。

來源:新浪新聞

上一篇: 何來優越感?海外iPhone故障率比Android高

下一篇: 三星智付欲通過旗下可穿戴Gear S3打造安卓支付平臺

分享到: 更多
21点游戏怎么玩 pk10怎样分析走势分析 旧重庆时时开彩结果 3分钟pk10稳赢计划双单 时时彩最快开奖 3000元 倍投方案 稳赚 云南时时规则介绍 时时彩后四形态 时时彩计划免费下载 到底有没有稳定的飞艇计划 中国对波兰 重庆时时走势图 快3怎么买稳赚公式 小霸王论坛精选高手 mg娱乐首页 计算器足球胜平负