如果你的手机是在Android 7.0+及其以上,想要抓取HTTPS的请求,必须要将证书(*.pem)用系统用户的权限安装,即把这个证书,要放到Android系统的加密与凭据->信任的CA证书。
以下这个是我们要完成的最终目标——把Charles的证书放到系统文件下。
前置工作:
1.准备一台已经有ROOT权限的小米手机。(具体步骤就是先去解锁,然后刷开发版的包,然后在安全中心中开启ROOT,开启USB调试)【重要】http://www.miui.com/unlock/index.html,按照步骤即可解锁。
2.电脑安装了Charles (https://www.charlesproxy.com/assets/release/4.5.6/charles-proxy-4.5.6-win64.msi
)。
然后,紧接着,把这个证书保存到桌面,命名为Charles.pem,我建议是放到和后面用到的安卓adb工具一个路径。
3.安装adb(platform-tools)。
打开https://developer.android.google.cn/studio/releases/platform-tools 下载平台工具,你是哪种操作系统就下哪个,我这里是Windows。然后在桌面解压
4.安装openssl以及配置环境变量
这里仅展示Windows。下载地址http://slproweb.com/products/Win32OpenSSL.html
选择64位。迅雷可以尝试这个地址: https://slproweb.com/download/Win64OpenSSL-1_1_1g.exe
安装完毕后。配置环境变量,将 openssl的bin目录放到Path环境变量,我的是这个路径 C:\Program Files\OpenSSL-Win64\bin
完成这些准备工作后,就和很多的教程一样了。
1.把前面桌面的那个证书charles.pem复制到桌面的文件夹内如图
2.紧接着, 使用快捷键将CMD控制台唤出(Shift + 鼠标右键)
3.此时,插入手机,并且确保USB调试已经打开。
4.在命令行中键入命令
adb devices
可以看到已经检测到手机
5.然后,依次执行下面命令,#后面是注释,关注adb开头即可。
# 以 root 权限执行
adb root
# 解决目录 read only 关键命令行
adb disable-verity
# 重启 (手机如果没有自动重启,可以手动重启)
adb reboot
# 以 root 权限运行
adb root
# 重新挂载
adb remount
# 设置读写
adb shell mount -o rw,remount /system
这个网上的一般教程,但是我在这块执行到最后一个命令adb shell mount -o rw,remount /system的时候出现的问题。
这里爆出了一个错。后来查阅后,其实在上一个重新挂载的命令就已经可以有写权限了,因为默认是只读权限。所以这个问题我们根本不用理会!
mount: '/system' not in /proc/mounts
6.权限完成后,要准备使用openssl命令了。这里确保前面的openssl的环境变量安装成功,要不然会告诉你openssl命令不存在。
#计算hash,后面会用到,红框中的字符串就是
openssl x509 -subject_hash_old -in charles.pem
7.修改这个charles.pem文件的名称为 hash值.0 。我这里的hash是bdb7xxx,那么原来的charles.pem文件就改为bdb7xxx.0。
如图
8.最后一步,.把凭据复制到系统凭据目录下
# 安装命令
adb push bdb7xxx.0 /system/etc/security/cacerts
以下如果提示你file pushed不用看。
出现什么权限不足,空间不足的可以看看。
如果出现 remote write failed: No space left on device,说明空间可能不够了。具体方法在下面链接,把系统自带的一个Apk删除,留出空域的空间,即可完成复制。
https://blog.csdn.net/zxb394874928/article/details/52702383
然后
# 重启 (手机如果没有自动重启,可以手动重启)
adb reboot
# 以 root 权限运行
adb root
# 重新挂载
adb remount
# 安装命令
adb push bdb7xxx.0 /system/etc/security/cacerts
完成。最后在回到第一步进入,设置->密码隐私与安全->系统安全->加密与凭据-》信任的凭据,系统栏就可以看到了。
这里是小米的一个https的一个请求,可以明显看到参数已经抓到,再也不是「」了
参考:
https://segmentfault.com/a/1190000011573699
https://www.cnblogs.com/Entr0py/p/9675061.html
https://blog.csdn.net/u013412772/article/details/103251506