前言
在Android開發中,apk的安全性是一個重要的關注點。每個app應用對于自身的數據和代碼安全做了對應的保護。為了調研和學習市場上各類app它們的安全策略,此次反編譯了30款apk來調研學習,加入debuggable和networkSecurityConfig屬性(加入Charles證書),回編并簽名apk,然后啟動它,通過日志,抓包,界面展示來看看不同應用的安全策略。同時針對這些應用用了一個粗糙的分數排名(非專業評分,大家看看就好)。
各參數等級與分數說明
反編譯Level
- L1: 資源無混淆,使用原始ApkTool即可實現反編譯,回編成apk。
- L2(5分): 資源混淆,需要修改ApkTool源碼,可通過ApkCrack一鍵完成編譯,添加證書,debug信息,回編簽名
- L3(10分): 資源混淆,ApkCrack無法回編,需要繼續修改ApkTool源碼適配,需要修改異常命名屬性名,文件名,異常圖片。最終可以回編成apk
- L4(20分): 可以反編譯,無法回編
啟動level
- L1: 正常啟動
- L2(20分): 無法啟動,卡住或閃退
http請求Level
- L1: http請求,抓包簡單
- L2(5分): https請求,無簽名,可以修改請求
- L3(10分): https請求,有參數簽名校驗,可以查看請求,無法修改
- L4(15分): https請求,簽名校驗,響應加密
- L5(20分): 無法抓取請求
登錄Level
- L1: 可以登錄
- L2(20分): 無法登錄
主界面Level
- L1: 能進入主界面
- L2(20分): 不能
效果圖
抓包
拼多多
快手
ApkCrack反編譯過程
ApkCrackUI一鍵破解
相關日志
log
apk安全評分
"-"表示當前最高等級,應用無法啟動,默認最高等級。
apk安全評分
上面app的排名非權威,非正式,非正確,大家且不必認真對待。
小結
不同類型的應用關注的安全等級與安全策略可能會有所不同,大致可能會有以下一些情況:
- 請求無簽名,可以修改參數,安全等級較低,新聞類應用
- 關鍵數據加密,比如騰訊漫畫只加密類章節數據
- 主界面有數據,提示非官方應用(拼多多)
- 主界面有數據,但是無法登錄
- 主界面提示網絡錯誤,簽名校驗失敗(餓了么)
- 無法進入主界面,可能卡在閃屏頁,可能應用閃退。
- 應用加固,反編譯后無法啟動,如自如,我愛我家,貝殼,這類應用數據(房源)都很重要,所以要加固代碼。
Apk代碼保護
反編譯完那些apk發現,不是所有的apk會選擇最極致的防破解方式(代碼混淆,資源混淆,加固等)。為了兼容性與性能,大部分應用不會選擇加固方式保護代碼。那么代碼保護有哪些套路呢?根據上面的app,會有下面一些方案(可以疊加使用)。
- 代碼混淆(gradle配置minifyEnabled可實現,大部分應用都會實現)
- 資源混淆(使用AndResGuard之類資源混淆庫可實現,這類app用ApkTool是無法實現的,回編apk時會報No resource identifier found for attribute,不過可通過ApkCrack回編)
- 添加一些不符合規則的文件名,或者錯誤頭的文件(因為apktool回編是通過aapt或者aapt2實現的,不合規的文件命名和文件導致資源編譯失敗,這些app破解時可能需要繼續針對性的修改ApkTool源碼,手動或者代碼方式處理這些文件和文件名,匯編重新簽名,破解時長和難度較高)
- 簽名校驗。因為原始的apk簽名無法獲取,反編譯后的apk只能通過自己新生成的簽名文件簽名。所以,簽名信息校驗變得至關重要,它會幫你識別官方apk與第三方破解(有可能是惡意)的apk。在啟動時做簽名校驗,可以更具校驗結果選擇不同的安全策略(閃退,安全模式,文字提醒,網絡請求失敗等)。
- 應用加固。如果你的app數據極為重要(獨家信息),不能完全通過其他方式比如服務端,或者上面三種方式保證數據安全,最穩妥的就是加固應用了。可以選擇阿里(聚安全),騰訊(樂固),360(加固寶)等方式加固自身的應用。