抓包分析安卓手機的HTTPS請求

HTTP抓包流程

爲了實現對安卓手機或模擬器的網絡請求抓包,簡單流程爲:

  • 電腦上安裝Fiddler等抓包工具,其原理就是一個HTTP/HTTPS代理服務器。注意需要允許遠程電腦連接
  • 確保電腦和安卓手機在同一個子網中,互相能夠PING通。比如:可以連接同一個WIFI熱點,或者用電腦給手機開熱點都可以
  • 在手機的WLAN設置中,設置WIFI代理,指向電腦的IP和抓包工具的端口,比如:192.168.122.101:8888

這個時候,如一切正常,HTTP代理就已經可以工作了,可以在手機瀏覽器裏訪問HTTP站點,看看抓包工具中是否有反應。

HTTPS抓包原理

HTTPS抓包就要麻煩一些了,要知道HTTPS的報文是加密的,主要防的就是在網絡傳輸中間環節做手腳。
不過抓包工具可以用中間人方式(Man-In-The-Middle)方式來解析HTTPS報文,大概原理是對訪問者假裝自己是目標網站,對目標網站假裝自己是訪問者,
這需要訪問者信任這個中間人提供的網站證書,具體做法是將抓包工具提供的根證書添加到系統的“受信任的根證書頒發機構”中去。
Fiddler的設置->HTTPS面板中有個Actions按鈕,直接選擇"Trust Root Certificate"即可。

在Android中安裝根證書

但是在安卓系統中就要自己動手安裝根證書了,下面梳理一下整個過程:

前提

  • Android 4.4及以上
  • 手機已經root,則可以安裝爲系統證書,否則只能安裝用戶證書
    區別在於:用戶證書會要求手機必須有鎖屏密碼
  • adb連接手機正常

安裝爲用戶級別證書

  • 證書文件 .crt/.cer下載到內部存儲,比如/sdcard
  • 文件管理器打開文件,會自動打開證書管理應用,輸入名字即可導入
  • 打開 設置 -> 安全和隱私 ->憑據存儲 -> 用戶 可以查看安裝的證書

安裝爲系統級別證書

把證書文件轉換爲Android可識別格式

  • 確定文件名。我這裏安裝了兩個不同工具的證書,即Fiddler和LittleProxy-MITM,它們的證書格式不同,因此使用的命令也略有不同。
    openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer
    openssl x509 -inform PEM -subject_hash_old -in littleproxy-mitm.pem
    把輸出的第一行的8位hex字符串保存下來,比如269953fb,最終的證書文件名則爲269953fb.0
  • 轉換證書文件格式
    openssl x509 -inform DER -in FiddlerRoot.cer -text > 269953fb.0
    openssl x509 -inform PEM -text -in littleproxy-mitm.pem > 4bb9877f.0
  • 編輯輸出的文件,把"-----BEGIN CERTIFICATE-----"到文件結束這部分移動到文件首部

安裝證書

  • 把證書文件複製到手機內部存儲。adb push後第一個參數是證書文件在電腦上的路徑,第二個是手機內部存儲的路徑
    adb push path/to/269953fb.0 /sdcard
  • 從內部存儲複製到系統證書目錄。adb shell啓動命令行交互,su獲取超級用戶權限,mount將/system目錄重新掛載爲可讀寫,最後執行復制
    adb shell

    su
    mount -o remount,rw /system
    cp /sdcard/269953fb.0 /system/etc/security/cacerts/
  • 修改文件權限。

    cd /system/etc/security/cacerts/
    chmod 644 269953fb.0
  • 檢查文件權限是否正確。

    ls -alZ

-rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0

  • 重啓設備
  • 打開“設置->安全和隱私->憑據存儲->系統”可以查看安裝的證書。

驗證

  • 手機瀏覽器打開HTTPS站點,看抓包工具中是否可以正常解析HTTPS報文。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章