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

996.icu

工具和資料

HTTP抓包流程

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

  • 電腦上安裝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面板":java

    1. 選中"Capture HTTPS CONNECTs", "Decrypt HTTPS traffic", "Ignore server certificate errors(unsafe)"
    2. 點擊右面的Actions按鈕,選擇"Trust Root Certificate"便可

在Android中安裝根證書

可是在安卓系統中就要本身動手安裝根證書了,下面梳理一下整個過程:git

前提

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

安裝爲用戶級別證書

  • 把證書文件 .crt/.cer下載到內部存儲,好比/sdcard
  • 文件管理器打開文件,會自動打開證書管理應用,給證書起個名字便可導入,另外須要設定屏幕解鎖密碼
  • 打開 設置 -> 安全和隱私 ->憑據存儲 -> 用戶 能夠查看安裝的證書
  • 對於Fiddler有個更簡便的辦法:github

    • 打開手機瀏覽器,訪問 http://ipv4.fiddler:8888/
    • 打開的頁面最下面的連接:You can download the Fiddler certificate,點擊便可下載安裝證書,步驟和從文件安裝一致

安裝爲系統級別證書

把證書文件轉換爲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目錄從新掛載爲可讀寫,最後執行復制shell

    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命令檢查文件權限是否正確。下面一行是指望的輸出。安全

    ls -alZ
    -rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0
  • 重啓設備
  • 打開「設置->安全和隱私->憑據存儲->系統」能夠查看安裝的證書。

驗證

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

參考

相關文章
相關標籤/搜索