主頁 > 移動端開發 > 防逆向技術簡史:從代碼混淆到虛擬機保護技術

防逆向技術簡史:從代碼混淆到虛擬機保護技術

2020-09-23 16:00:19 移動端開發

那么如何才能保護自己開發APP不被逆向破解呢?在道高一尺魔高一丈的網路安全攻防對抗中,防逆向保護技術也在不停更新演進,筆者在這里梳理了幾個關鍵時期的防逆向保護技術,讓大家對APP防護有一個更好理解。

【啟蒙階段】防逆向保護始于代碼混淆技術


這個時期最大特點是,從未能登上大雅之堂的代碼混淆技術,搖身一變成為了防逆向保護唯一有效的技術。這要從1995年JAVA語言橫空出世說起,它讓人們在享受跨平臺便利運行的同時,由于其天生易反編譯特性,也讓傳統針對機器碼的安全保護一夜之間變得毫無用處。

從此,那個曾經被唾棄的代碼混淆技術開始逐漸被人所重視。從Android 2.3開始,Google在SDK中加入了一款叫ProGuard代碼混淆工具,通過它可混淆JAVA代碼。




ProGuard混淆后DEX檔案截圖


從上圖就可以看到,代碼混淆之后左側的類名大多都變成了a、b等自定義字母,雖然機器執行起來的邏輯是一樣的,但增加了黑客人為分析的難度和時間成本。從某種程度上來說,代碼混淆技術很好的保護JAVA源代碼,但這種方式也只是簡單的改變類名或者變數名,黑客只要找到DEX檔案,反編譯也就是時間問題了,就看時間成本是否超過黑客收益。

【發展階段】DEX加密技術成為應用防護中流砥柱


隨著Android反編譯技術越來越純熟,即便代碼混淆技術做到native層,也是治標不治本。為了解決代碼混淆技術存在弊端,越來越多的人采用DEX整體隱藏和DEX函式抽取加密來保護自己代碼安全,例如愛加密等廠商早期加固產品用的就是這個技術。

(1)DEX檔案整體加密

對DEX檔案進行整體加密,與殼APK進行合并得到新的DEX檔案,然后替換殼程式中的DEX檔案即可得到新的APK。新APK運行時將加密后DEX 檔案在記憶體中解密,并讓 Dalvik虛擬機動態加載執行。





DEX檔案整體加密能夠對抗靜態分析,但也存在一定缺陷。該技術對DEX檔案進行整體加密、解密操作,運行時在記憶體中存在連續完整的代碼。通過修改Dalvik虛擬機就有可能通過記憶體Dump的方式獲得解密后的代碼。雖然開發者可以采取一些 patch 的方法來增加破解難度,例如類加載結束后,抹掉或者混淆記憶體中
DEX 檔案的頭部或尾部資訊,但這些方法也無法從根本上解決記憶體 Dump 的問題。

(2)DEX函式抽取加密

為解決DEX檔案整體加密可以被記憶體 Dump這個弱點,DEX函式抽取加密技術對代碼中每個方法抽取進行單獨加密。JAVA 虛擬機在第一次執行某個方法前,才開始加載這個方法的代碼。利用這個機制將解密操作延遲到某個方法在執行之前才對該方法進行解密,并且解密后代碼在記憶體中是不連續存放。例如通過抽取Dalvik虛擬機運行一個DEX必不可缺少DEXCode中的部分,然后對位元組碼指令添加nop,這種方式大大增加代碼安全性。




加密前后DEX 檔案中的代碼對比


這種加固技術的主要優點:(1)加密粒度變小,加密粒度從DEX 檔案級別變為方法級別;(2)按需解密,解密操作延遲到某個方法在確實要執行之前才觸發,如果方法不被執行,則不被解密;(3)記憶體不連續,避免了記憶體 Dump的問題,極大提高安全性。

【巔峰階段】VMP加固成為防逆向保護“終極大招”


EX函式抽取加密解決了記憶體被Dump問題,但是本質上這也是一種代碼隱藏技術,最終代碼還是通過Dalvik或者ART 虛擬機進行執行。因此,破解者可以構建一個自己修改過的虛擬機來脫殼。這就需要尋求更加強大、安全的防逆向技術來保證 APK 的安全。虛擬機軟體保護技術(VMP)成為了當下最前沿移動應用安全加固技術。


VMP首先會對被保護的目標程式核心代碼進行“編譯”,將由編譯器生成的本機代碼(Nativecode)轉換成效果等價的byte-code,然后將控制權交虛擬機,由虛擬機來執行控制。VMP最關鍵技術是需要自定義一套虛擬機指令和與之對應解釋器,然后將標準指令轉換成自己指令,由自定義解釋器解釋執行指令。


這樣即使破解者拿到自定義的位元組碼也毫無意義,除非能夠逆向破解自定義的虛擬機解釋引擎。除此之外,VMP 還可以構建多個不同虛擬化解釋引擎,不同的JAVA方法采用不同的虛擬化執行引擎,這就進一步提高了應用的安全性。

雖然現在市場上有相當一部分廠商都發布了針對移動應用VMP保護方案,但其實有很多廠商采用都是代碼混淆或者代碼隱藏技術。筆者認為擁有一套高質量的自定義指令集和解釋器是判斷VMP技術真偽唯一標準。而了解,目前在國內安全廠商中只有愛加密公司在VMP技術上發展相對成熟。

寫在最后:


任何安全技術變遷都是一部歷史,移動應用安全發展也是如此。從某種程度上來看,Android應用防逆向技術演化史基本等于移動應用安全進化史。例如國內愛加密,其加固技術也是從早期代碼混淆技術演化到當前最先進虛擬機保護技術。安全的攻與防是一個永恒話題,也是一個動態螺旋式發展程序,開發者需要不斷提高自己安全意識和安全技能,才能更好應對各種層出不窮安全問題。






轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/112786.html

標籤:Android

上一篇:asdasda測驗 必須通過 不然我去找你 評論組的放過我

下一篇:各位大神:APP能不能跳轉外部鏈接

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more