android 9 以上版本,app 不再信任用户安装的证书,只能通过 root 手机把证书移动到 system 分区才能实现抓包。一般日常使用手机为了安全是不可能 root 的,这里通过 Windows 的 WSA 来实现抓包。
准备环境
到 WSABuilds 下载安装已 root 带 magisk 的 WSA 镜像(假如之前已安装过 WSA,需要先到系统应用列表中,把旧的卸载)
安装后,开始菜单中搜索
android,找到 WSA 设置应用并打开,选择开发人员,并打开开发人员模式

安装APK 安装程序,实现双击安装 apk 和自动安装 adb 命令工具
安装WSA 工具箱,用于上传文件到 WSA
下载Magisk app,并安装
安装 charles 证书
打开 charles,选择菜单
Help -> SSL Proxying -> Save Charles Root Certificate,并选择把证书保存为.cer格式打开WSA 工具箱,使用
文件传输功能把刚刚保存的证书上传到 wsa 的Download目录点击WSA 工具箱首页的
Android设置,选择安全->更多安全设置->加密与凭据->安装证书菜单,选择并安装Download目录的charles证书

- 证书安装成功后,正常在
加密与凭据->信任的凭据->用户项中能看到已安装的证书

把用户区证书移动到 system 分区
- 下载 Magisk 的MagiskTrustUserCerts模块压缩包,并通过WSA 工具箱上传到
Download目录
- 打开 Magisk app,点击
模块 -> 从本地安装,选择刚刚上传的Download目录下的AlwaysTrustUserCerts压缩包

安装成功后,正常会提示你重启 wsa,没的话,在命令行中执行
adb reboot手工重启下重启后正常能在
加密与凭据->信任的凭据->系统中,看到charles证书

配置代理抓包
- 打开 charles,选择菜单
Proxy -> SSL Proxying Settings...,勾选Enable SSL Proxying,并添加新的 location,Host填*,Port填443

- 打开命令行,执行下面的命令设置 WSA 代理:
adb connect 127.0.0.1:58526
adb shell settings put global http_proxy 192.168.x.x:8888
其中192.168.x.x需改为charles所在的 ip 地址
- 下载安装需要抓包的 app,访问就能在charles看到 https 流量了:)
删除代理
去掉代理需执行下面命令:
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
