安卓下微信升级到7.0以后无法使用fiddler进行抓包。这是关于微信的一些说明:
- 安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书
- 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
- 安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表
那应该怎么解决呢?
解决方法一:
第一步: 点击圆形微信图标拖入右上角
第二步: 打开应用市场,找到设置,关闭 WLAN闲时自动更新
第三步: 浏览器搜索微信6.7.3版本,下载并安装
第四步: 打开微信,找到设置~通用~自动下载微信安装包,选择”从不”
除了上述方法就没有其他方法了么?
Google一下,很多类似的帖子,问题的根源是:
在Android7.0及以上的系统中,每个应用可以定义自己的可信CA集集。
默认情况下,应用只会信任系统预装的CA证书,而不会信任用户安装的CA证书。
而回想我们抓包的过程,无论是fiddler还是Charles,想抓https,都必须手机安装对应的证书,通过fiddler/Charles安装的证书恰恰正属于用户安装的CA证书,因此会被视作不安全的证书。
解决方案二:修改APP配置文件
如上代码提交的那样,直接修改APP的android:networkSecurityConfig
属性,前提是可以获取到APP的源码。
在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>
然后重新打包抓包就可以了;
这种做法,除了在源码上修改,还有其他法子吗?
肯定的,如下:
先脱壳,也可以直接下载wdj的包,然后用apktool反编译apktool,就能看到包内容了,修改AndroidManifest.xml,同时新增network-security-config,修改完以后重新签名打包就可以;
解决方案三:将证书安装到系统证书中(需要root)
如果没有源码权限,怎么办?那就把证书安装到系统证书里面,但是这个操作需要root权限;
系统证书的目录是:/system/etc/security/cacerts/
每个证书的命名规则为:<Certificate_Hash>.<Number>
Certificate_Hash
表示证书文件的hash值,Number
是为了防止证书文件的hash值一致而增加的后缀;
证书的hash值可以由命令计算出来,在终端输入openssl x509 -subject_hash_old -in <Certificate_File>
,其中Certificate_File
为证书路径,将证书重命名为hash.0
放入系统证书目录,之后你就可以正常抓包了。