騰訊Matrix分析--ApkCanary

ApkCanary介紹

APK Checker 是針對(duì) Android 安裝包的分析檢測(cè)工具,根據(jù)一系列設(shè)定好的規(guī)則檢測(cè) APK 是否存在特定的問(wèn)題,并輸出較為詳細(xì)的檢測(cè)結(jié)果報(bào)告,用于分析排查問(wèn)題以及版本追蹤。當(dāng)前,APK Checker 主要包含以下功能:

  • 讀取 manifest 的信息
  • 按文件大小排序列出 APK 中的所有文件
  • 統(tǒng)計(jì)方法數(shù)
  • 統(tǒng)計(jì) class 數(shù)目
  • 檢查是否經(jīng)過(guò)資源混淆(AndResguard)
  • 搜索不含 alpha 通道的 png 文件
  • 搜索未經(jīng)壓縮的文件類(lèi)型
  • 檢查是否包含多 ABI 版本的動(dòng)態(tài)庫(kù)
  • 統(tǒng)計(jì) APK 中包含的 R 類(lèi)以及 R 類(lèi)中的 field count
  • 搜索冗余的文件
  • 檢查是否有多個(gè)動(dòng)態(tài)庫(kù)靜態(tài)鏈接了 STL
  • 搜索 APK 中包含的無(wú)用資源
  • 搜索 APK 中包含的無(wú)用 assets 文件
  • 搜索 APK 中未經(jīng)裁剪的動(dòng)態(tài)庫(kù)

這些功能具體都是各個(gè)Task執(zhí)行的任務(wù),并且在任務(wù)結(jié)束后,格式化成JSON或者HTML輸出的。具體的任務(wù)都在com.tencent.matrix.apk.model.task這個(gè)包下。

ApkCanary

統(tǒng)計(jì)方法數(shù)與Class數(shù)目

  1. unzip安裝包
  2. 在解壓的目錄中,找到所有以.dex結(jié)尾的文件
  3. 解析每個(gè)dex文件,找到對(duì)應(yīng)的類(lèi)名以及R$的類(lèi)解析
CountClassTask

搜索無(wú)Alpha通道的png文件

  1. 遞歸遍歷文件夾,找到以.png以及.9.png結(jié)尾的文件
  2. 通過(guò)BufferedImageColorModel來(lái)判斷是否有alpha通道
    FindNonAlphaPngTask

搜索APK中無(wú)用資源與assets文件

  1. 遍歷DexFile,并且將DexFile通過(guò)Baksmali庫(kù)編譯成Smali的文件
編譯成smali文件
  1. 遍歷Smali文件,找到const-string定義的字符串常量,匹配Assets目錄下的文件

    image.png

  2. 資源文件也差不多,只是資源文件包括了stylevalue等等,不只會(huì)在代碼中出現(xiàn),所以除了Smali之外,還需要遍歷XML、resources.arsc等

    image.png

STL檢查

通過(guò)nm工具來(lái)查看目標(biāo)文件的符號(hào)表,加入-D參數(shù)將低級(jí)符號(hào)名解析(demangle)成用戶(hù)級(jí)名字,加入-C參數(shù)顯示動(dòng)態(tài)符號(hào)。將該命令執(zhí)行的結(jié)果進(jìn)行解析,如果使用了std::的庫(kù),則認(rèn)為使用了STL的靜態(tài)庫(kù)。

MultiSTLCheckTask

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容