一文了解安卓APP逆向分析與保護機制

2020-12-14 網易數帆

「知物由學」是網易雲易盾打造的一個品牌欄目,詞語出自漢·王充《論衡·實知》。人,能力有高下之分,學習才知道事物的道理,而後才有智慧,不去求問就不會知道。「知物由學」希望通過一篇篇技術乾貨、趨勢解讀、人物思考和沉澱給你帶來收穫的同時,也希望打開你的眼界,成就不一樣的你。

以下為文章正文:

想知道Android App常見的保護方法及其對應的逆向分析方法嗎?

3月17日,安卓巴士全球開發者論壇在重慶舉辦,網易資深安全工程師鍾亞平出席交流活動,並做了《安卓APP逆向與保護》的演講。在分享中,他介紹了 Android App常見保護方法及其對應的逆向分析方法,以及分析了常見的加固方案原理與對抗方法。

安卓APP安全包含很多內容,本次分享了混淆代碼、整體Dex加固、拆分 Dex 加固、虛擬機加固等方面。事實上,這些內容也是國內近幾年Android App安全保護的一種主要趨勢。

一、混淆代碼

Java代碼是非常容易反編譯的,作為一種跨平臺的、解釋型語言,Java 原始碼被編譯成中間「字節碼」存儲於class文件中。由於跨平臺的需要,這些字節碼帶有許多的語義信息,很容易被反編譯成Java原始碼。為了很好地保護Java原始碼,開發者往往會對編譯好的class文件進行混淆處理。

混淆就是對發布出去的程序進行重新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能,而混淆後的代碼很難被反編譯,即使反編譯成功也很難得出程序的真正語義。ProGuard就是一個混淆代碼的開源項目,能夠對字節碼進行混淆、縮減體積、優化等處理。

Proguard處理流程圖如下所示,包含壓縮、優化、混淆、預檢四個主要環節:

壓縮(Shrink):檢測並移除代碼中無用的類、欄位、方法和特性(Attribute);優化(Optimize):對字節碼進行優化,移除無用的指令。優化代碼,非入口節點類會加上private/static/final,沒有用到的參數會被刪除,一些方法可能會變成內聯代碼;混淆(Obfuscate):使用a、b、c、d這樣簡短而無意義的名稱,對類、欄位和方法進行重命名;預檢(Preveirfy):在Java平臺上對處理後的代碼進行預檢,確保加載的class文件是可執行的。

在分享中,鍾亞平展示了利用Proguard,對Dex2jar進行反編譯處理後的Apk效果示例:

Proguard處理後

Proguard混淆器不僅能夠保護代碼,而且能夠精簡編譯後的程序大小,減少內存佔用。

混淆代碼逆向分析

如果想要反編譯混淆代碼,鍾亞平分享了一個國外的工具DEGUADR,它能夠通過統計的方式來解混淆。雖然這個工具的正確率達不到100%,但是能在一定程度上幫助反編譯代碼。

使用DEGUADR解混淆的示例:

com.xxxxx.common.util.CryptoUtil網站也提供了一種反編譯服務,如下所示:

二、整體Dex加固

為了加強Android保護強度,隨著安全技術的發展,又出現了新型的「加固技術」。DEX加固是對DEX文件進行加殼防護,防止被靜態反編譯工具破解而洩露源碼,最剛開始出現的是整體加固技術方案。

整體加固技術的原理如上所示,包括替換application/classes.dex、解密/動態加載原classes.dex、調用原application相關方法、將原application對象/名稱設置到系統內部相關變量四大環節。其中最為關鍵的一步就是解密/動態加載原classes.dex,通過加密編譯好的最終dex源碼文件,然後在一個新項目中用新項目的application啟動來解密原項目代碼並加載到內存中,再把當前進程替換為解密後的代碼,能夠很好地隱藏源碼並防止直接性的反編譯。

整體Dex加固逆向分析

整體Dex加固逆向分析有兩種常用的方法。其一是在內存中暴力搜索 dex\n035,再 dump。以下是在32位系統中的效果示例:

另一種方法就是通過HookdvmDexFileOpenPartial(void* addr, int len, DvmDex**)。

三、拆分Dex加固

隨著業務規模發展到一定程度,不斷地加入新功能、添加新的類庫,代碼在急劇膨脹的同時,相應的apk包的大小也急劇增加,那麼簡單的整體加固方案就不能很好地滿足安全需求,在整體加固方案之外又出現了拆分加固的技術方案。

但是如上所示,dex文件在加固時,針對中間缺失的一部分數據會以解密後的數據來替換,有的時候這種拆分替換也會導致數據不準確。那麼到底應該拆分什麼樣的數據呢?就需要了解一下dex文件的數據結構。

Dex文件結構極為複雜,以下圖示選取了其中較為重要的內容。事實上,dex文件是一個以class為核心組裝起來的文件,其中最重要的是classdata和classcode兩部分,有其特定的接口和指令數據,選取這兩部分來拆分的話,即使拆分出來也不會洩露class數據和字節碼數據,反編譯出來也不完整,安全性較高。

拆分Dex加固逆向分析

對於dex拆分加固的逆向分析,如下所示,可以用classdata替換從而組裝成新的dex文件,雖然和原來的dex文件不會完全一致,但也在一定程度上復原了被拆分數據的樣子。

但要注意的是,這種方法僅適用於被拆分出去的數據變形一次性完成,也就是說,在有其他保護思路的情況下儘量避免使用,而且即使有需要也儘量選在用到這個類的時候才去恢復。

此外還有一個更底層一些的工具dexhunter,這個工具較為前衛,但同時也有一些局限性,譬如部分指令數據會被優化,形成的代碼界面不是很美觀等等。

四、虛擬機加固

虛擬機加固也屬於dex拆分加固的一種,它是對字節做了一些變化處理。如下所示,這是一個正常安卓系統中的代碼,在其中進行了虛擬機加固操作:

以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2這三條指令進行替換,然後進行加固編譯,這樣子操作後,即使把替換後的數據恢復了,也不會以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2這三條指令進行替換,然後進行加固編譯,這樣子操作後,即使把替換後的數據恢復了,也不會變形成為之前的字節碼,安全係數較高。

虛擬機加固逆向分析—HOOK JNI 接口

這種方式下的逆向分析,一方面可以通過HOOK JNI 接口來實現,它有兩種實現方式。

其一是類成員/靜態變量操作相關接口,比如:

GetStaticDoubleFieldSetStaticDoubleField GetDoubleField SetDoubleField … (byte, object, int,long…)

其二是反射調用類方法,比如:

CallVoidMethodACallBooleanMethodA CallShortMethodA CallObjectMethodA …CallStaticVoidMethodACallStaticBooleanMethodA CallStaticShortMethodA CallStaticObjectMethodA …(byte, int, long,double …)CallObjectMethodA(JNIEnv* env, jobject object, jmethoID method, …)

通過HOOKJNI 接口實現虛擬機加固逆向分析

通過HOOK JNI 接口不用逆向底層,就可以了解APP大致的調用流程。但是對於複雜的調用過程,或者虛擬化方法數量較多的情況,這種逆向分析手段看起來會比較混亂;對於不需要返射到Java層執行的指令,如算術、邏輯運算等,則無法監控到。

虛擬機加固逆向分析—分析指令操作碼映射

另一方面,也可以通過分析指令操作碼映射來逆向分析。在同一加固版本,或者映射關係相同的情況下,可以採取以下所示的方法:

但在實際情況中,每次加固時的映射關係都是隨機變化的,如下所示,這種情況下就無法直接建立映射關係。

不依賴於操作碼的映射關係只與虛擬機結構有關,所以需要根據偏移關係建立映射關係,從而進行逆向分析。

以上就是此次《安卓APP逆向與保護》主題的全部分享內容。

安卓APP逆向保護作為開發工作中的重要內容,一直是網易雲易盾致力於提供的應用服務。「後續,我們將在SO加密保護方面進行更加深入的研究。」鍾亞平最後說道。

*本文作者:網易雲易盾,來自FreeBuf.COM

相關焦點

  • 【訓練營】安卓APP逆向分析必備技能,你掌握了嗎?
    ,對安卓APP的逆向分析也成為了廣大安全從業人員不可或缺的基本技能。為了實現對安卓APP的逆向分析工作,往往在拿到一個apk以後需要首先使用靜態分析對apk進行反編譯和代碼審計。 但是,隨著APP加殼技術的普及與加固服務的便捷,越來越多的安卓App在發布前便使用代碼加固來增加逆向分析難度,對加固App的脫殼便成了首要解決的難題。
  • 安卓逆向工程師面試指南【乾貨】
    好工作待遇 Interview Guide 五險一金、出國旅遊、年底雙薪、帶薪年假、員工生日會、住房補貼 安卓逆向工程必須掌握的技能: Interview Guide必備技能: 1、負責安卓程序的加解密和數據傳輸分析
  • 一文帶你徹底了解APP PUSH推送機制
    本文主要講解關於APP PUSH的流程、機制及相關經驗,一是為了方便大家可以針對APP迅速制定PUSH消息推送方案,實現0到1的推送功能搭建;二是可以了解下PUSH流程,對各個環節針對性地提高觸達率。
  • 好課資源共享:遊人客棧安卓逆向系列課程
    遊人客棧安卓逆向系列課程尤登弘-管理者財商用公眾號增加收入,掌握最熱門的職場技能(完結)用詞、造句及其底層邏輯詠田醫學正骨術22集全教學教程視頻教學教程視頻綜合教學視頻中醫應用MBTI性格測評找對職業【】影響中國婚姻家庭的8大深層原因影視行業及影視合同實務
  • 小生淺談Java層逆向,【Android逆向技術】
    我們都知道安卓應用是可以用多種語言來進行開發的,而且根據不同的語言我們也有不同的逆向方式,今天小生就給大家介紹介紹在眾多語言中相對簡單一點的java,我們稱之為java層逆向
  • SpyNote5.0 Client_APK逆向分析
    咱們能夠通過一系列文章對於它的使用初步了解,《SpyNote V5.0圖形化工具遠程管理Android手機教程》、《小心,Android木馬工具SpyNote免費啦!遠程監聽就是這麼簡單》、《當心,安卓遠控(spynote)升級了……》等等。2.
  • 好課分享:易錦大學安卓逆向第2期125講-無key
    防丟失微信bg20180011易錦大學安卓逆向第2期125講-無key  |   |   ├──001
  • pixiv安卓app下載
    pixiv安卓app下載簡介:pixiv安卓app是一個集插畫投稿及閱覽於一體的「繪圖交流平臺」,pixiv安卓app聚集了眾多來自日本、中國、韓國、美國等國家的優秀藝術家,通過pixiv安卓app他們在Pixiv相互交流,分享優秀高清插畫。
  • 蘋果發布APP隱私保護說明:適用於所有iOS應用程式
    在網際網路高速發展的今天,不管是蘋果用戶還是安卓用戶,都深受隱私洩露的困擾。現在,蘋果公司決心要改變這一局面了。今天,蘋果公司發布了App Store上App隱私保護的詳細說明,旨在保護用戶隱私,打擊APP隱私竊取。
  • 【安卓逆向之密碼學】從一個簡單的AES-256-CBC開始
    很久沒寫文章了,我又回來了,這回開始,應該會慢慢更新一些有關安卓逆向中的學習記錄,主要的目的還是鞏固自己的學習,不做筆記學習的東西容易忘記,當然,如果給大家帶來了收穫,別忘了點讚、收藏和轉發,哈哈哈今天要帶來的是一個有關AES加密相關的APP分析,如果參加了看雪高研安卓班的話,應該就知道我說的是哪個了。話不多說,直接開始。
  • 美國十大安卓手機購物app:eBay亞馬遜領頭,Wish排名第五
    雨果網從外媒近日的報導中了解到,市場分析機構SimilarWeb根據裝機量和日活躍用戶列出了美國的十大安卓手機購物app。此外它還列出了這些app在安裝30天內的保留率和移動端的流量佔比。 據了解,亞馬遜和eBay非常受歡迎。eBay排名第一,Amazon Shopping排第二。
  • 好課資源共享:易錦教育 Android逆向VIP培訓視頻
    易錦教育 Android逆向VIP培訓視頻軟體破解逆向工程實戰 - 第六期 DLL黑客 作弊開發訓練營Android Backward AnalysisMT管理器之安卓逆向破解分析之路全套安卓逆向工具【無加密】滴水網絡初級逆向培訓視頻第二期(價值800)(全網首發)2018
  • 解析逆向物流(一)——何謂逆向物流
    解析逆向物流(一)——何謂逆向物流 iwangshang / i天下網商 / 2012-12-11 摘要:目前大家的注意力都集中在了正向物流上,而對於逆向物流關注度不夠。
  • 奇奇動漫app安卓版下載
    奇奇動漫app安卓版下載是一款趣味娛樂的影音播放軟體,為廣大二次元朋友摘錄了海量動漫番劇,各種類型都有,可以滿足廣大用戶的需求,快來下載試試~
  • 磁力貓app下載安卓版
    磁力貓是一款手機上的影音播放類應用,能夠為用戶進行全網的資源搜索,本身還擁有龐大的視頻資源庫,只要你想看,這裡全都有。磁力貓app下載安卓版簡介:磁力貓整合全網資源,深度挖掘視頻和圖片文件等等資源,讓我們更快捷、更平等的獲取資源信息,具有界面簡潔,操作簡單的特點,並且可以自由的搜索你想要的內容。
  • 安卓遊戲折扣手機遊戲大全 安卓遊戲折扣app排行榜
    安卓遊戲折扣手機遊戲大全 安卓遊戲折扣app排行榜 來源:www.18183.com作者:wer時間:2021-01-14 安卓遊戲折扣手機遊戲大全,安卓遊戲折扣app排行榜.折扣遊戲一直廣受大家所喜愛,多樣化的玩法內容,上線就可以領取福利,而且充值還有折扣哦。
  • 安卓逆向——怎樣開發第一個Android程序?
    雖然不能做第一個程式設計師,但是我們可以了解第一個程序是什麼,就是「Hello Word」,中文意思即「你好世界」。那麼第一個Hello Word是什麼樣的呢?需要注意哪些點?我們就來簡單地探討一下。第一個是環境檢查;第二是工程創建,輸入工程信息;第三是運行我們創建好的程序;第四是項目的目錄結構分析;最後就是常用的視圖了。用到工具:eclipse 1.
  • 優秀,成都二手交易平臺app安卓軟體開發公司
    成都二手交易平臺app安卓軟體開發公司選擇app開發好還是開發小程序好?開發app有哪些優勢?開發小程序有哪些優勢?比如,有客戶想開發個電商軟體,糾結的是要開發app還是小程序,很是猶豫不決,今天深圳app開發公司紅孩兒信息技術有限公司來與大家分享下這兩者之間哪個更勝一籌。選擇app開發好還是開發小程序好?
  • 破解遊戲安卓版大全 安卓手機破解遊戲app
    破解遊戲安卓版大全 安卓手機破解遊戲app 來源:www.18183.com作者:wer時間:2020-12-09 破解遊戲安卓版大全,安卓手機破解遊戲app.有了手遊盒子破解版