Cellebrite APK Downgrade
深入探討 v 1.1

v1.1 2020-02-20 by 高田鑑識

如在檔案系統提取所述,APK 降版是不得不的提取模式,在其它提取模式皆無法成功後,最後才考量採用 APK Downgrade。因降版有一定的風險,早期若操作過程不慎失敗,可能會導致無法再次進行降版提取。本篇主要介紹幾個重要的adb指令,來協助鑑識人員完成降版提取,最後也介紹如何藉由 adb backup 指令也可完成資料提取與分析。以下為本篇的幾個主要重點:

  1. Apk 備份(避免 4PC apk 降版失敗)
  2. Apk 程式移除(移除 apk 過程不刪除用戶資料)
  3. Apk 安裝(安裝舊版支援 Android Backup 的 APP)
  4. App 用戶資料備份
  5. AAB 格式 APP 安裝流程說明
  6. Android 備份檔案.ab (Android Backup)轉換成tar格式
  7. 如何將 tar 檔案匯入 Cellebrite PA 完成分析

在進行 APK 降版開始前,以下步驟必須先確認是否完成:

  • Developer 模式啟用

  • Stay Awake & Enable USB Debugging Mode 必須啟用

  • 預設的 USB configuration 須設定為 File Transfer(Android 9)或 MTP (有時須在未接上電腦前先設定好)

  • Verify apps over USB disabled 必須停用

Android App Bundle

自 2018 Google I/O 推出 Android Studio 3.2 後,匯出 Android App 時可採用官方推薦新的封裝格式 Android App Bundle (aab)。使用該格式時,用戶下載 App 僅下載與手機相關的核心與資源擋即可。例如一台螢幕解析度為 xxhdpi (1080P) 的手機,除了核心檔案,只會下載與 xxhdpi 對應的資源檔即可。而使用 Snapdragon 845 處理器的裝置,語系為繁體中文 (台灣),下載時只需要下載 arm64 架構與 zh-tw 語系的資源檔案。相關對應作業會由 Google Play 透過 Dynamic Delivery 負責。該方式可以大幅減少用戶下載 App 的時間,並有效減少網路傳輸頻寬與用戶端的儲存空間。

對於需要手動備份 App 的鑑識同仁,早期僅需備份主 apk 程式,導入 aab 新架構後必須將其它相關的 apk 資源檔案一並下載,確保 APK 降版後可再次將 App 主程式與資源檔案安裝回裝置。

圖一、App Bundle 切分出 Base 以及各 Configuration APK

Android SDK Platform Tools

接著會開始使用 adb 指令集來進行操作,請確保使用最新版本的 Platform Tools。現有最新版本為 29.0.5 (October 2019),若尚未更新至最新版本請至開發者網站上更新,連接如下。

從用戶手機上備份 LINE APK

執行 APK Downgrade 前,可先將原安裝在手機上的 APP 透過 adb 指令進行備份 APK 檔案備份,當 APK Downgrade 失敗後可快速安裝原手機版本的 APK (很容易Timeout就降版失敗),並再次嘗試 APK Downgrade 提取,該過程不會遺失用戶資料。如透過 Google Play 安裝 APP,原 APP 用戶資料會被刪除。

以下透過 ADB 指令搜尋 LINE APK 檔案名稱,備份後就會在 PC 上取得原手機的 APK 檔案,範例為 LINE 9.22.2 版本 。

使用指令一,先找出 LINE 的 apk

步驟一
Copy to Clipboard

指令一、搜尋LINE APK路徑

pm list packages -3 僅會列出第三方 Apps package 名稱,搜尋結果輸出如下:

結果一、確認 LINE Package 名稱

因現有 App 上架皆採用 Android App Bundle 格式,輸入以下指令可列出所有與 LINE 相關的 apk:

步驟二
Copy to Clipboard

指令二、列出 LINE 相關 apk 路徑

結果二、確認 LINE aab Package 清單

從以上結果可得知,LINE App 包含了三個 apk:

  1. base.apk (核心程式)
  2. split_config.arm64_v8a.apk (晶片組相關)
  3. split_registration.apk(延伸資源)

接著再透過 adb pull 指令下載這三個 apk 檔案至連接的電腦上。

步驟三
Copy to Clipboard

指令三、下載 LINE 相關 APK

安裝降版 APK 並透過 adb 備份聊天內容

使用該方式可以避免解除安裝APP時用戶資料被清除。Cellebrite APK Downgrade 過程也是採取類似模式,可卻保用戶資料不被移除。以下連接為可以執行 adb backup 指令之 LINE APK 版本。

步驟一
Copy to Clipboard

指令四、移除LINE,-k 代表保留用戶資料(keep user data)

步驟二
Copy to Clipboard

指令五、解除安裝後必須重開機

步驟三
Copy to Clipboard

指令六、安裝可以執行 ADB Backup 版本

步驟四
Copy to Clipboard

指令六、備份 LINE資料,下載後檔案名稱為backup.ab

若用 APP 檢查程式「Analyst」,可得知為什麼 LINE 5.2.5 版本可執行 adb backup 指令,而新版不行。主要原因為 APP Flags 設定,如下圖:

圖二、Analyst APP 程式分析結果

安裝原用戶裝置 APP 程式

早期版本之 APK,安裝時僅需一道指令即可完成,但現有 APP 大多數皆為 split APK 架構;用「指令二」檢查後若為 split APK,請依以下方式安裝,步驟如下說明:

  1. 先移除降版的 APP。
  2. 將備份的 APK 採用 adb push 指令回傳到裝置。
  3. 透過 Package Manager 指令產生一個安裝 session。
  4. 將核心 base APK、相關資源擋採同一個 session 安裝。
  5. commit 該 session 的安裝內容。
步驟一
Copy to Clipboard

指令七、移除LINE,-k 代表保留用戶資料 (keep user data)

步驟二

指令八、adb push 透過「指令三」備份的 APK 到裝置暫存資料夾

步驟三

指令九、Package Manager 產生一個 Session 碼

步驟四

指令十、使用 install-write 安裝 split APK 於同一個 session

步驟五

指令十一、最後使用 install-commit 完成安裝

匯入 adb backup 之資料至 PA

在執行完 adb backup 指令後,會產生 backup.ab 的 LINE 備份檔案,但因為該檔案為 Android Backup 格式(.ab),PA 無法直接讀取.需將 .ab 檔案轉換成 .tar 格式,才可匯入 PA 進行分析.

以下為採用「光子力研究雷禪制作(檔案下載連接)」的轉換程式,下載後請解壓縮並將檔案放在與 backup.ab 同個資料夾內,之後執行「backup.ab檔轉backup.tar檔.bat」Batch 檔案即可將 .ab 轉換為 .tar 格式。

指令十二、ab 檔轉 tar 檔

轉換成tar檔案後可用PA開啟並分析

圖三、採用進階方式建立一個新的Project

圖四、點選Blank Project

圖五、點選”Selected Chain”後選擇“AndroidADB Backup”

圖六、匯入轉換後的”backup.tar”檔案

圖七、PA分析完後就出現Line的內容

總結

上一篇針對 iOS 透過 checkm8 漏洞提取完整檔案系統後,取出之 SQLite WAL 檔案可分析之內容有詳盡說明。而透過 APK Downgrade 或 ADB Backup 之 LINE 資料庫,因只有提取 SQLite 主要 db 檔案,刪除或收回之訊息則無法找回。

圖八、無「刪除」與「收回」訊息

Copy to Clipboard