今年从 iPhone 转战 Android ,遇到的第一个大坑就是安卓7+的 https 抓包问题。
本人手机型号是 HUAWEI Mate 20 Pro | EMUI 9.1.0 | Android 9 ,出现的问题是手机安装 charles-ssl-proxying 证书后(PC端证书也安装完毕),手机浏览器的 https 抓包、解密正常,但是APP中请求的 https 包都是 <unknown>,如下图:
上网查阅原因说是:安卓7+以上由于系统安全性设置,用户在手机上引入的证书不会被系统信任,只有系统证书才可以。用户在手机安装的证书都默认放在了用户证书列表,如下图:
想要将证书放到系统证书列表,则需要将手机 root。但是我不想 root 手机。
一、非 Root 手机进行抓包
感谢大佬提供的解决方法 (点此阅读原文)
手机不需要root,只需要安装以下两个工具:
过程如下:
- 下载并安装 VirtualXposed
- 下载并安装 JustTrustMe
- 进入 VirtualXposed 应用首页,点击“六个点”
- 进入设置页后,点击”添加应用“
-
勾选 JustTrustMe 模块,再点击安装
- 回到设置页,点击“模块管理”
- 勾选“JustTrustMe”模块
- 回到设置页,重启 VirtualXposed
- 再次打开 VirtualXposed - 设置页,点击“添加应用”
-
以 zhihu 为例,勾选 zhihu,点击安装
- 点击“VIRTUALXPOSED”后,等待安装完毕
- 届时在 VirtualXposed 中访问 zhihu,charles 就可以成功抓到 https 的包了
如果抓到的响应结果是乱码,那么就是PC端或者移动端的CA协议没有安装好 (Mac端参考链接 、IOS端参考链接、Windows端和Android端参考链接)
非Root抓包实现原理可以用原作的话一句概括:“可以将 VirtualXposed 粗暴的当虚拟机对待。”
二、Root 手机进行抓包
Root手机原理是将用户下载的CA协议移动到系统信任的证书目录下。
具体过程,详见:安卓7.0以上手机使用charles代理抓取https数据
三、其他方式
若是自己开发的应用,调试时可以通过修改源码中的安全设置实现 (参考链接);
若是第三方应用,也可以自己解包,更改代码,重新打包...这里不再赘述。