Android APK加固技術方案調研

jopen 9年前發布 | 88K 次閱讀 Android Android開發 移動開發

@author ASCE1885的 Github 簡書 微博 CSDN
最近項目中需要實現自己的APK加固方案,因此就有了這一篇調研報告。

軟件安全領域的攻防向來是道高一尺魔高一丈,攻防雙方都處于不斷的演變和進化過程中,因此軟件加固技術需要長期持續的研究與投入。

目前成熟的第三方解決方案

1. <a href="/misc/goto?guid=4959640126172933844" target="_blank">娜迦</a> </h3>

針對Android平臺下的APP被逆向分析,破解,植入木馬病毒后,用戶敏感信息泄露或者被釣魚網站劫持,NAGA Android保護采用防止靜態分析與防止動態調試全面防護的思路,在未保護程序運行的不同周期采取不同程度的加固措施,可以針對銀行、基金、券商,電商 等需在線支付領域及游戲領域,提供定制型APP安全解決方案。

主要實現:

  • 類抽取:保護dex文件,防止靜態分析及動態破解
  • 代碼加解密:保護so文件,防止靜態破解
  • 網絡訪問控制:保護so文件,攔截惡意廣告,阻止注入型木馬
  • 敏感文件檢測:保護so文件,防止靜態調試
  • 整體包裹:保護dex文件,防止靜態破解
  • 利用重定位清除ELF頭:保護so文件,利用系統機制ELF頭已經被系統清除,不兼容X86處理器
  • 字符串表加密:保護so文件,防止靜態破解
  • 檢查核心庫:保護so文件,防止功能性數據庫被劫持
  • 檢查調試器:保護so文件,防止動態調試
  • Xposed檢查:保護so文件,防止so文件,防止靜態調試,防dump 防xposed脫殼神器對加固apk進行一鍵脫殼
  • 防止跟蹤:保護so文件,防止動態跟蹤
  • 強力清除ELF頭:保護so文件,防止靜態分析
  • 中間碼亂序:保護smali文件,dex保護,防止靜態分析,不兼容Android5.0 ART模式
  • 重定位加密殼段:保護so文件,對抗靜態分析
  • 殼完整性檢查:保護so文件,防止對APP程序中的殼段進行修改、調試 兼容性100%

擴展閱讀:娜迦社區

2. 愛加密

愛加密主要功能:

1. 漏洞分析:

  • 文件檢查:檢查dex、res文件是否存在源代碼、資源文件被竊取、替換等安全問題
  • 漏洞掃描:掃描簽名、XML文件是否存在安全漏洞、存在被注入、嵌入代碼等風險。
  • 后門檢測:檢測App是否存在被二次打包,然后植入后門程序或第三方代碼等風險。
  • 一鍵生成:一鍵生成App關于源碼、文件、權限、關鍵字等方面的安全風險分析報告。

2. 加密服務:

  • DEX加殼保護:DEX文件加殼保護對DEX文件進行加殼防護,防止被靜態反編譯工具破解獲取源碼。
  • 內存防dump保護:防止通過使用內存dump方法對應用進行非法破解
  • 資源文件保護:應用的資源文件被修改后將無法正常運行
  • 防二次打包保護:保護應用在被非法二次打包后不能正常運行。
  • 防調試器保護:防止通過使用調試器工具(例:zjdroid)對應用進行非法破解
  • 多渠道打包:上傳1個APK,通過選擇android:name和填寫android:value來實現對每一個渠道的包的生成和加密
  • 漏洞分析服務:漏洞分析采用文件檢查、漏洞掃描、后門檢測等技術方向對APK進行靜態分析并支持一鍵生成分析報告
  • 渠道監測服務:監控國內400多個渠道市場入口,對應用的各渠道的下載量、版本信息、正盜版進行一站監控
  • 簽名工具:愛加密提供純綠色簽名工具,支持Windows、Linux和MAC系統,同時支持批量簽名
  • DEX專業加殼保護:本服務是對安卓DEX文件進行加殼保護,有效防止所有靜態調試器對APK進行破解
  • DEX專業加花保護:本服務對安卓DEX文件進行加入花指令(無效字節碼)保護
  • 資源文件指紋簽名保護:對資源文件指紋簽名進行驗證保護,有效防止資源文件被篡改
  • 高級防二次打包保護:本服務對APK進行防止二次打包保護,防止APK被使用非法手段修改替換文件后進行二次打包
  • 高級防調試器保護:防止通過使用調試器工具(如:zjdroid、APK改之理、ida等)對應用進行非法破解
  • 高級內存保護:本服務是對內存數據的專業高級保護,可防止內存調試,防止通過dump獲取源碼,防止內存修改
  • 截屏防護:防止黑客通過截屏形式獲取應用賬號、應用密碼、支付銀行卡號、支付銀行卡密碼,支持安卓所有機型
  • 本地數據文件保護:對APK應用的網絡緩存數據、本地儲存數據(提供SDK)進行深度保護
  • 源碼優化:1) 一鍵清除Log(開發日志)信息;2) 一鍵優化減少加密后增大的源用包大小
  • 防止腳本:本服務愛加密提供防止腳本SDK,用戶根據開發幫助文檔進行二次開發,此保護項可有效防止游戲非法使用腳本
  • 防止加速器:防止游戲使用加速器,破壞游戲公平(如:防八門神器和葫蘆俠中的加速器功能)
  • 防止模擬器運行:防止模擬器非法運行(可以防止運行在PC上的任何類型的android模擬器)
  • 防止內購破解:防止游戲被內購破解(如:游戲內部有支付項,可以防止支付項相關內容被破解)
  • SO文件保護:so文件專業保護,對so文件進行優化壓縮、源碼加密隱藏、防止調試器逆向分析

3. 渠道監測:

  • 渠道數據監控
  • 精準識別渠道正盜版
  • 盜版APP詳情分析

擴展閱讀:加密資訊

3. 梆梆加固

提供的移動應用保護服務:

  • 防逆向保護:以加密代碼的方式阻止反編譯,從而防止被竊取代碼和創意
  • 防篡改保護:通過對app的完整性保護,防止app被篡改或者盜版
  • 反調試保護:阻止應用運行中被動態注入,防止被外掛,木馬偷竊賬號密碼,修改交易金額等
  • 存儲數據加密保護:更底層,跨文件格式的數據加密,防止應用數據被竊取
  • 環境監測和保護:云監測設備環境,防止盜版應用,惡意應用的釣魚攻擊

擴展閱讀:安全SDK下載

4. 360加固保

加固保為移動應用提供專業安全的保護,可防止應用被逆向分析、反編譯、二次打包,防止嵌入各類病毒、廣告等惡意代碼,從源頭保護數據安全和開發者利益,主要提供:

  • 反篡改:通過簽名校驗保護,能有效避免應用被二次打包,杜絕盜版應用的產生
  • 反竊取:對內存數據進行變換處理和動態跟蹤,有效防止數據被獲取和修改
  • 反逆向:對代碼進行加密壓縮,可防止破解者還原真實代碼邏輯,避免被復制
  • 反調試:多重手段防止代碼注入,可避免外掛、木馬、竊取賬號密碼等行為

[總結]常見app漏洞及風險

靜態破解:

通過工具apktool、dex2jar、jd-gui、DDMS、簽名工具,可以對任何一個未加密應用進行靜態破解,竊取源碼。

二次打包

通過靜態破解獲取源碼,嵌入惡意病毒、廣告等行為再利用工具打包、簽名,形成二次打包應用。

本地儲存數據竊取

通過獲取root權限,對手機中應用儲存的數據進行竊取、編輯、轉存等惡意行為,直接威脅用戶隱私。

界面截取

通過adb shell命令或第三方軟件獲取root權限,在手機界面截取用戶填寫的隱私信息,隨后進行惡意行為。

輸入法攻擊

通過對系統輸入法攻擊,從而對用戶填寫的隱私信息進行截獲、轉存等惡意操作,竊取敏感信息。

協議抓取

通過設置代理或使用第三方抓包工具,對應用發送與接收的數據包進行截獲、重發、編輯、轉存等惡意操作。

[總結]Android app加密保護核心概念

防內存竊取

防止通過gdb、gcore,從內存中截取dex文件,獲取代碼片段,從而反編譯還原APK進行不法操作。

防動態跟蹤

防止通過ptrace調試進程,跟蹤、攔截、修改正在運行的應用,進行動態注入,保護程序運行安全。

防逆向分析

防止通過APKTool、IDA Pro等反編譯工具破解DEX文件,從而獲取APK源代碼,保護代碼層安全。

防惡意篡改

校驗APK完整性,自動終止運行被篡改的APK,二次打包后應用都無法使用,杜絕盜版應用的出現。

存儲數據加密保護

更底層,跨文件格式的數據加密,防止應用數據被竊取。

[我們的措施]Android程序反破解技術

對抗反編譯

對抗反編譯是指apk文件無法通過反編譯工具(例如ApkTool,BakSmali,dex2jar等)對其進行反編譯,或者反編譯后無法得到軟件正確的反匯編代碼。

基本思路是尋找反編譯工具在處理apk或者dex文件時的缺陷,然后在自己的代碼中加以利用,讓反編譯工具在處理我們apk文件的時候拋出異常或者反編譯失敗,有兩種方法可以找到反編譯工具的缺陷:

  • 閱讀反編譯工具的源碼
  • 壓力測試

對抗靜態分析

反編譯工具一直在改進,因此即使你在版本2.1發現它的缺陷并加以利用,使反編譯你的apk失敗,但很可能在版本2.2就把這個缺陷解決了,因此,不要指望反編譯工具永遠無法反編譯你的apk,我們還需要使用其他方法來防止apk被破解:

  • 代碼混淆技術,ProGuard提供了壓縮,混淆,優化Java代碼和(Shrinking),混淆(Obfuscation),優化(Optimition)Java代碼和反混淆棧跟蹤(ReTrace)的功能。
  • NDK保護:逆向NDK程序的匯編代碼比逆向Java代碼枯燥和困難很多,同時使用C++也可以對敏感字符串和代碼進行加密。
  • 外殼保護:針對NDK編寫的Native代碼。

對抗動態調試

  • 檢測調試器:動態調試使用調試器來掛鉤apk,獲取apk運行時的數據,因此,我們可以在apk中加入檢測調試器的代碼,當檢測到apk被調試器連接時,終止apk的運行。
  • 檢測模擬器:apk發布后,如果發現其運行在模擬器中,很有可能是有人試圖破解或者分析它,因此這時我們也要終止apk的運行。

防止重編譯

  • 檢查APK的簽名
  • 校驗APK的完整性
  • 校驗classes.dex文件的完整性

參考資料

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!