自動準備 Android APK 檔案以進行 HTTPS 檢查的 CLI 應用程式
使用代理程式檢查行動應用程式的 HTTPS 流量可能是了解其工作原理的最簡單方法。然而,隨著 Android 7 中引入的網路安全配置以及應用程式開發人員試圖使用憑證固定來防止 MITM 攻擊,讓應用程式與 HTTPS 代理程式一起工作已變得相當乏味。
apk-mitm
使整個流程自動化。您所要做的就是給它一個 APK 文件, apk-mitm
將:
您也可以使用apk-mitm
來使用 Android App Bundle 來修補應用程序,並且不需要對手機進行 root。
修改應用程式的常規行為以解決證書固定等安全功能需要在運行應用程式之前修改應用程式的原始程式碼,或在應用程式運行時「掛鉤」應用程式以攔截函數呼叫。
apk-mitm
目前採用前一種修改應用程式程式碼的方法,首先使用 Apktool「分解」應用程序,對多個檔案進行更改,然後將其重新組裝在一起(再次使用 Apktool)。
這種方法的優點是不需要 root 設備,但也有一些缺點。最大的問題是應用程式並不是真正需要被反彙編的。無論如何,Apktool 都會嘗試實現這一目標,但是,尤其是對於大型且複雜的應用程序,它經常會遇到問題。
這種方法的另一個問題是,某些憑證固定方法,例如在本機二進位檔案中執行的檢查(如 Flutter 等框架的情況),要么非常難以規避,要么無法規避。因此,嘗試其他方法來處理更棘手的應用程式可能會有所幫助。
具體來說,我想重點介紹 mitmproxy 的android-unpinner
專案以及 HTTP Toolkit 的底層frida-interception-and-unpinning
腳本。他們的方法使用 Frida 在運行時應用補丁,Frida 功能更強大,但也意味著如果沒有 root 設備,它要么無法使用,要么更難以使用。
如果您有最新版本的 Node.js (14+) 和 Java (8+),您可以透過執行以下命令來安裝apk-mitm
:
npm install -g apk-mitm
安裝後,您可以執行以下命令來修補應用程式:
apk-mitm < path-to-apk >
修補名為example.apk
的 APK 檔案可能如下所示:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
現在,您可以在 Android 裝置上安裝example-patched.apk
文件,並使用 Charles 或 mitmproxy 等代理來查看應用程式的流量。
您也可以使用帶有apk-mitm
Android App Bundle 來修補應用程序,方法是向其提供*.xapk
檔案(例如來自 APKPure)或*.apks
檔案(您可以使用 SAI 自行匯出該檔案)。如果您在 Linux 上執行此操作,請確保安裝了zip
和unzip
。
有時您需要對應用程式進行手動更改才能使其正常工作。在這些情況下,您需要--wait
選項。啟用它將使apk-mitm
在重新編碼應用程式之前等待,從而允許您對臨時目錄中的檔案進行更改。
如果您想嘗試對 APK 進行不同的更改,那麼使用--wait
可能不是最方便的選項,因為它迫使您每次使用它時都從頭開始。在這種情況下,您可能想看看 APKLab。它是一個基於 VS Code 構建的 Android 逆向工程工作台,帶有apk-mitm
支持,應該可以讓您更快地進行迭代。
在某些裝置(例如 Android TV)上,您可能無法將新憑證新增至系統的根憑證。在這些情況下,您仍然可以將代理程式的憑證直接新增到應用程式的網路安全性配置中,因為這適用於任何裝置。您可以透過執行apk-mitm
來完成此操作,並將--certificate
標誌設定為代理程式使用的憑證( .pem
或.der
檔案)的路徑。
如果應用程式使用 Google 地圖並且地圖在修補後損壞,則應用程式的 API 金鑰可能僅限於開發人員的憑證。您必須不受限制地建立自己的 API 金鑰,並使用--wait
選項執行apk-mitm
以便能夠替換套用的AndroidManifest.xml
檔案中的com.google.android.geo.API_KEY
值。
如果apk-mitm
在解碼或編碼時崩潰,則問題可能與 Apktool 有關。在 GitHub 上檢查他們的問題以找到可能的解決方法。如果您碰巧發現一個不受該問題影響的 Apktool 版本,您可以透過--apktool
選項指定其 JAR 檔案的路徑來指示apk-mitm
使用它。
麻省理工學院 © Niklas Higi