Android 7 以上版本,繞過CA限制,抓取https
原文地址: https://www.jianshu.com/p/035f7d7a0f7e
環境
手機:小米5A
系統:MIUI 10
電腦:win10
抓包:mitmdump (可替換成其他抓包軟件)
電腦需要安裝:
- mitmdump(可替換成任意抓包軟件)
- adb
- openssl
背景
我需要抓取https請求,蘋果手機可以毫無問題的抓取,而安卓就不可以。原因是安卓7之后對證書的策略進行變更,應用不再使用用戶證書。
有兩種方式繞過:
- 在手機上安裝系統證書
- 修改app的manifest文件重新打包
這里我們只講第一種方法, 所以我們需要把證書添加到系統證書中。
為此,我們需要一台已經root的小米手機。root教程在miui論壇中已經非常詳細了。官方給出了詳細的步驟和工具。
開始
假設到這里你已經有一台root成功的小米手機。
安卓受信任的CA證書以特定的格式存儲在 /system/etc/security/cacerts 目錄下。我們可以在adb shell中查看到:

證書處理
這里我們用到的是mitmproxy,它的證書存放在user/Administrator/.mitmproxy/ 目錄下。pem為后綴的文件。
查看openssl版本
openssl version
如果是1.0以上的版本:
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
如果是1.0以下的版本:
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash -in cacert.pem
上面的兩條語句,如果已經是pem后綴的文件,可以直接執行第二條, cacert.pem就是你的證書文件。
第一行會輸出一個類似這樣的hash串:
7672ac4b
然后重命名證書
cp cacert.pem 7672ac4b.0
復制證書到設備上
可以直接粘貼到手機中,也可以用adb復制過去,這里的7672ac4b換成前面你得到的那個hash串
adb root
adb remount
adb push 7672ac4b.0 /sdcard/
復制到系統目錄並修改權限
adb shell
su
mount -o rw,remount /system mv /sdcard/<cert>.0 /system/etc/security/cacerts/ chmod 644 /system/etc/security/cacerts/7672ac4b.0 reboot
驗證
然后我們在手機中依次進入:設置→安全→信任證書→系統證書
此處就可以看到你安裝的證書了。
測試
證書安裝成功就沒什么問題了:

可能遇到的問題
可問題:
remount of /system failed: Read-only file system
remount failed
解決方法:
adb root
adb disable-verity
adb reboot
adb remount
adb shell
mount -o rw,remount /system
參考文章:
Configuring Burp Suite with Android Nougat
Android 7 Nougat and certificate authorities
作者:WangLane
鏈接:https://www.jianshu.com/p/035f7d7a0f7e
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。