Android APK加固技術方案調研
@author ASCE1885的 Github 簡書 微博 CSDN
最近項目中需要實現自己的APK加固方案,因此就有了這一篇調研報告。
軟件安全領域的攻防向來是道高一尺魔高一丈,攻防雙方都處于不斷的演變和進化過程中,因此軟件加固技術需要長期持續的研究與投入。
目前成熟的第三方解決方案
1. <a href="/misc/goto?guid=4959640126172933844" target="_blank">娜迦</a> </h3>
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文件的完整性