背景
通过whistle,在手机已设置本机代理,安装证书后,仍无法访问开发版微信小程序
问题根源
官方:https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
在 Android7.0 及以上的系统中,每个应用可以定义自己的可信 CA 集集。
默认情况下,应用只会信任系统预装的 CA 证书,而不会信任用户安装的 CA 证书。
省流:
1、安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书
2、安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
3、安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表
自己开发的安卓APP,可以在源码添加配置
参考文档:https://developer.android.com/privacy-and-security/security-config?hl=zh-cn
直接修改 APP的android:networkSecurityConfig
属性
在 AndroidManifest.xml 中
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
配置文件:res/xml/network_security_config.xml
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" overridePins="true" /> <!--信任系统证书-->
<certificates src="user" overridePins="true" /> <!--信任用户证书-->
</trust-anchors>
</base-config>
</network-security-config>
然后重新打包抓包就可以了
非自己开发的APP(如微信),如何解决?
VirtualXposed说明文档:https://github.com/android-hacker/VirtualXposed/blob/vxp/CHINESE.md
VirtualXposed 是基于 VirtualApp 和 epic 在非 ROOT 环境下运行 Xposed 模块的实现(支持 5.0~10.0)
实践
注意:所有的工作(安装Xposed模块,安装APP)必须在 VirtualXposed中进行,否则Xposed模块不会有任何作用!比如,将微信直接安装在系统上(而非VirtualXposed中),防撤回安装在VirtualXposed中;或者把微信安装在VirtualXposed上,防撤回插件直接安装在系统上;或者两者都直接安装在系统上,均不会起任何作用
-
下载VirtualXposed,下载地址:https://github.com/android-hacker/VirtualXposed/releases
-
电脑下载完成后,拖动apk至手机(此处用华为荣耀v30做演示)
-
安装VirtualXposed完成后,打开app,点击圆环
-
点击【添加应用】,在VirtualXposed安装微信。
-
安装完成,在VirtualXposed内上滑,可查看已安装应用,打开微信并登录微信账号
-
WiFi设置本机代理,并下载证书安装(此处不做介绍)
-
在VirtualXposed内打开微信,在微信小程序开发工具扫码登录,并使用真机调试即可
-
抓包记录如图