安卓版微信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.cer证书重命名后放到/system/etc/security/cacerts/${Cert_Hash}.${Cert_Num} 其中Cert_Hash表示证书的Hash数值,而Cert_Num是为了防止证书Hash相同而增加的后缀,比如269953fb.0 4、进入安卓设置,找到安全凭据里面的系统证书列表,确认存在DO_NOT_TRUST_FiddlerRoot则说明添加成功 5、最后只需要按照普通的http抓包方法,修改WiFi设置里面的代理服务器地址和端口,就能正常使用抓包了

[以下2020/04/23更新] 最近笔者的小米8又无法用Fiddler抓包了,只能临时换用其他安卓手机,折腾了好久终于搞定。

简单的记录现象:

1、小米8连接不同的代理,都是抓包失败,但其他安卓手机正常(这时怀疑是小米8的问题)
2、小米8刷机后,连接代理仍然无法抓包,开始怀疑电脑证书原因(于是搞虚拟机装新系统)
3、虚拟机的全新系统仍然抓包失败,但换用Charles抓包发现正常(开始怀疑Fiddler配置)
4、重置Fiddler设定和系统证书(其实和PC证书没关系),各种折腾无果,推演多次过程失败

以下是折腾过程:

1、使用openssl的subject_hash算法(没有old后缀)计算Hash数值(因为部分设备不兼容),无效
2、使用openssl的subject_hash以及subject_hash_old算法生成两个证书(有些设备缺一不可),无效
3、添加用户凭据,然后迁移(/data/misc/user/)到系统凭据的目录(防止自己计算错误),无效
4、转换Fiddler的证书格式(换了好几种,甚至复制同个证书并修改不同的Hash数值文件名),无效
5、网上查资料,手动删除证书文件的多余内容、把证书字段剪切到文件头部、修改文件权限等,均无效
6、换用不同的Fiddler版本(在Win10下需要不同的dotNet版本,蛋疼),怀疑笔者更新软件原因,无效
7、添加Fiddler配置HTTPS的协议,把支持的tls1.1/tls1.2等都加上(不同版本支持协议不同),无效
8、更换Fiddler证书生成器(MakeCert和CertEnroll),无效(PS:方向这次对了,但结果在意料之外)

以上的多个方法,笔者试着混用搭配方式多次交叉测试,前后足足折腾几个月(约莫花费几十个小时吧), 直到看到网上一句默认证书不符合部分Android和IOS的证书要求,需要下载certmaker插件才醍醐灌顶, 原来Fiddler这货除了自带的两个证书生成器外,还有其他的!那结果就很明显了,下载安装替换正常。

证书引擎插件: http://fiddler2.com/r/?fiddlercertmaker 所有Fiddler插件: https://www.telerik.com/fiddler/add-ons

以上内容参考以下必要资料: 听说安卓微信 7.0 不能抓 https? 部分APP无法代理抓包的原因及解决方法 Android 7.0+ 抓包https的一种方案(支持微信7.0) Fiddler解决Chrome不能抓取https及证书问题-百度经验