安卓版微信7.0无法抓包HTTPS的解决方法

Published: Tags: ANDROID

之前微信刚出新版时,笔者发现自己的小米8忽然无法对小游戏进行抓包了,但之前正常的,而奇怪的是: 1、微信下抓包其他https网站也失败,但用浏览器打开对应的网站抓包却正常(这时怀疑是微信升级问题) 2、接着换了一台公司的测试机(比较旧的OPPO机,也安装了微信7.0版本),然后却发现能正常抓包小游戏 多次操作笔者的小米8后也无法正常抓包,而且因为把手机Root了,所以怀疑是自己哪里搞出来问题了。

当时可能是因为微信版本刚刚更新,上网搜索了下资料也没人遇到,而由于业务需求较急,因此也没有深究,先用测试机抓数据了。 然而春节放假期间,由于想起之前答应同事,需要帮其优化微信后台的数据采集录入,忽然发现「小游戏数据助手」就有我们所需。 由于我们目前已经开发了近30个小游戏了,而每次登录微信后台都需要逐一扫码取Cookie采集数据录入自己后台,人力浪费太大。 反正暂时也是闲着,就想着把自己的小米8处理下抓包https的问题,然后再看看这个小程序是怎么一个帐号显示多个游戏数据的。

结果这次上网搜索资料,就发现了以下这么个说明(看来不少同志也开始踩坑了):

第一点:
安卓系统7.0以下:微信的任意版本,都会信任用户提供的证书
安卓系统7.0以上:微信7.0以下版本,微信会信任用户提供的证书
安卓系统7.0以上:微信7.0以上版本,微信只信任系统及自身内置的证书

第二点:
苹果系统,没影响,可以用

原因是SSL pinning限制,即SSL证书绑定,具体可以查看文章末尾的参考资料链接,下面来说说解决办法: 1、把伪证书通过Root权限,放入到系统证书列表中,而不是用户证书列表,一劳永逸 2、使用Xposed框架+JustTrustMe模块,安装伪证书到用户证书列表,绕开SSL的校验

有Root的同学可以用方法一,简单快捷。当然了,如果Root了且安装了Xposed框架的,也可以使用方法二。 至于没有Root的同学,可以使用虚拟环境VirtualXposed,这是一个安卓上的虚拟环境,在其中可进行抓包。

由于笔者习惯了买手机后,都会先折腾Root权限,所以当然选择方法一了,具体的操作步骤如下:

1、访问Fiddler的监听端口的http页面,比如 http://172.17.1.10:8888 下载FiddlerRoot.cer伪证书 2、使用以下命令,把FiddlerRoot.cer伪证书转成pem的格式,方便之后导入安卓系统内置的证书列表中 openssl x509 -text -inform DER -in FiddlerRoot.cer > FiddlerRoot.pem openssl x509 -subject_hash_old -in FiddlerRoot.pem #计算证书Hash数值,用作文件名 3、把FiddlerRoot.pem证书重命名后放到/system/etc/security/cacerts/${Cert_Hash}.${Cert_Num} 其中Cert_Hash表示证书的Hash数值,而Cert_Num是为了防止证书Hash相同而增加的后缀,比如269953fb.0 4、进入安卓设置,找到安全凭据里面的系统证书列表,确认存在DO_NOT_TRUST_FiddlerRoot则说明添加成功 5、最后只需要按照普通的http抓包方法,修改WiFi设置里面的代理服务器地址和端口,就能正常使用抓包了

原因参考以下资料: 听说安卓微信 7.0 不能抓 https? Android 7.0+ 抓包https的一种方案(支持微信7.0)