環(huán)境
手機(jī):小米5A
系統(tǒng):MIUI 10
電腦:win10
抓包:mitmdump (可替換成其他抓包軟件)
電腦需要安裝:
- mitmdump(可替換成任意抓包軟件)
- adb
- openssl
背景
我需要抓取https請(qǐng)求,蘋果手機(jī)可以毫無問題的抓取,而安卓就不可以。原因是安卓7之后對(duì)證書的策略進(jìn)行變更,應(yīng)用不再使用用戶證書。
有兩種方式繞過:
- 在手機(jī)上安裝系統(tǒng)證書
- 修改app的manifest文件重新打包
這里我們只講第一種方法, 所以我們需要把證書添加到系統(tǒng)證書中。
為此,我們需要一臺(tái)已經(jīng)root的小米手機(jī)。root教程在miui論壇中已經(jīng)非常詳細(xì)了。官方給出了詳細(xì)的步驟和工具。
開始
假設(shè)到這里你已經(jīng)有一臺(tái)root成功的小米手機(jī)。
安卓受信任的CA證書以特定的格式存儲(chǔ)在 /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
上面的兩條語句,如果已經(jīng)是pem后綴的文件,可以直接執(zhí)行第二條, cacert.pem就是你的證書文件。
第一行會(huì)輸出一個(gè)類似這樣的hash串:
7672ac4b
然后重命名證書
cp cacert.pem 7672ac4b.0
復(fù)制證書到設(shè)備上
可以直接粘貼到手機(jī)中,也可以用adb復(fù)制過去,這里的7672ac4b換成前面你得到的那個(gè)hash串
adb root
adb remount
adb push 7672ac4b.0 /sdcard/
復(fù)制到系統(tǒng)目錄并修改權(quán)限
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
驗(yàn)證
然后我們?cè)谑謾C(jī)中依次進(jìn)入:設(shè)置→安全→信任證書→系統(tǒng)證書
此處就可以看到你安裝的證書了。
測(cè)試
證書安裝成功就沒什么問題了:

可能遇到的問題
可問題:
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