环境
手机:小米5A
系统:MIUI 10
电脑:win10
抓包:mitmdump (可替换成其他抓包软件)
电脑需要安装:
- mitmdump(可替换成任意抓包软件)
- adb
- openssl
背景
我需要抓取https请求,苹果手机可以毫无问题的抓取,而安卓就不可以。原因是安卓7之后对证书的策略进行变更,应用不再使用用户证书。
有两种方式绕过:
- 在手机上安装系统证书
- 修改app的manifest文件重新打包
这里我们只讲第一种方法, 所以我们需要把证书添加到系统证书中。
为此,我们需要一台已经root的小米手机。root教程在miui论坛中已经非常详细了。官方给出了详细的步骤和工具。
开始
假设到这里你已经有一台root成功的小米手机。
安卓受信任的CA证书以特定的格式存储在 /system/etc/security/cacerts 目录下。我们可以在adb shell中查看到:
image.png
证书处理
这里我们用到的是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
验证
然后我们在手机中依次进入:设置→安全→信任证书→系统证书
此处就可以看到你安装的证书了。
测试
证书安装成功就没什么问题了:
image.png
可能遇到的问题
可问题:
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
网友评论