高版本Android无法抓取HTTPS接口数据的解决方案(需要ROOT)

一、准备工作

1、Root(推荐Magisk)

2、LSPosed(免证书需要安装)

二、电脑端抓取

1、下载Charles或者其他抓包软件(Fiddler等)并安装

2、打开Charles并启用抓取Https的开关,不启用默认不抓取Https接口请求,具体操作如下:

依次点击Proxy->SSL Proxying Settings->Add
分别在Host和Port后面的输入框内输入*,点击OK即可

3、如果使用了下方“四、忽略SSL验证”中的办法,此时应该可以抓到Https接口请求,无需继续下面步骤

4、导出Charles证书

依次点击Help->SSL Proxying->Save Charles Root Certificate…
将保存的证书Copy到手机存储中

5、手机安装用户证书

打开手机设置,搜索证书,然后安装CA证书,选择刚才Copy到手机存储中的证书
安装后即安装完了用户证书,高版本Android不认可用户证书,因此这时还是不能抓到Https请求

6、将用户证书变为系统证书

安装Magisk模块,该模块会自动把用户证书移动到系统证书,生成了系统证书后即可抓到Https请求
Magisk模块地址(任选其一):
https://github.com/Magisk-Modules-Repo/movecert
https://github.com/NVISOsecurity/MagiskTrustUserCerts

三、手机端抓取

1、下载并安装HttpCanary

Google Play上已下架,可以从Apkpure下载,下载地址:https://apkpure.com/httpcanary-%E2%80%94-http-sniffer-capture-analysis/com.guoshi.httpcanary

2、处理证书安装提示问题

打开App后提示安装证书会无法安装,这时候我们需要手动处理下,不让提示证书问题,使用MT管理器将/data/data/com.guoshi.httpcanary/cache/HttpCanary.pem在同一目录下复制并重命名HttpCanary.jks,然后重新打开App发现证书提示消失

3、如果使用了下方“四、忽略SSL验证”中的办法,此时应该可以抓到Https接口请求,无需继续下面步骤

4、处理证书

打开App,前往设置->HttpCanary根证书,导出HttpCanary根证书,此时导出类型有2种,对应2个方法

5、导出.0类型(方法1)

使用MT管理器复制导出的/storage/emulated/0/HttpCanary/certs/证书名.0
到/system/etc/security/cacerts/,高版本Android是无法直接复制到system分区的,该分区是只读,哪怕ROOT了也不行,这时候可以借助Magisk模块搞定
模块地址:https://github.com/victor141516/httpcanary-magisk

6、导出.pem类型(方法2)

后面操作就和上面的一样了,重复上面的教程(二、电脑端抓取)中的5、6步骤即可

四、忽略SSL验证

不用处理证书的办法,让Android系统忽略SSL验证,安装Xposed模块JustTrustMe即可:

模块地址:https://github.com/Fuzion24/JustTrustMe 官方地址,需要自己编译,最新版貌似支持了高版本Android,有待测试
模块地址:https://github.com/SekiBetu/JustTrustMe 其他人Fork的版本
模块地址:https://github.com/gfbjngjibn/JustTrustMe 其他人Fork的版本