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 shellsu
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報文。
參考
- 詳細過程:http://wiki.cacert.org/FAQ/Im...
- 不同擴展名的證書文件具體介紹及相互轉換:https://blog.csdn.net/xianggu...
- openssl x509命令詳解:https://www.openssl.org/docs/...