场景介绍
相信这个问题很多人都遇到过 Android7.0 以上系统无法抓包的问题,由于在测试过程中对分析定位问题很不方便,以下就是解决办法。
问题来源与本身
遇到的问题:Android6.0 及以下系统可以抓包,而 Android7.0 及以上系统不能再抓包?
产生原因:Android7.0+ 的版本新增了证书验证,所以 app 内不再像原来一样默认信任用户的证书
解决思路
当时我立即采取了,如下解决措施
1.先百度
2.问同行
百度结果
看来看了网上大部分的博客得到如下解决方案
方案一实现如下:
a.在 Android 工程目录的 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>
b.在 AndroidManifest 里的标签中,添加代码:
android:networkSecurityConfig="@xml/network_security_config"
然后从新编译打包即可抓包,很是方便,对应开发童鞋来说,也是很方便,但是,测试的是企业微信小程序,想让企业微信的开发人员帮我这么干,简直是白日做梦,还不说安全的问题等。。。。。
方案二实现如下:
a.找一个低于 6.0 或者等于 6.0 版本的 Android 设备或者模拟器,即可解决,但是考虑到:治标不治本,公司本身就没有这样的设备,再加上找了几个模拟器,都是 Android7.0 版本的,所以此方案,直接选择放弃。
问同行结果
同行提供了如下方案
1.使用方案 1
2.换个工具抓,例如 fidder,或者 BurpSuite 等,但是自己使用了,还是不行
3.直接去 ng 哪儿拦截,但是我需要抓取的有一部分是第三方的接口,前方已经高能,此路不通
最后还是不死心,还是自己继续百度,要不上 github 找一下看看,终于黄天不负有心人,终于找到了满足的条件的解决方法
最终解决方案如下
charles + VirtualXposed + JustTrustMe
实现步骤
进入 github 下载如下两个 pages
VirtualXposed:https://github.com/android-hacker/VirtualXposed
JustTrustMe:https://github.com/Fuzion24/JustTrustMe
第一步
使用如下 adb 命令分别安装两个 pages
adb -s R3J6R19B20004228 inatall VirtualXposed
adb -s R3J6R19B20004228 install JustTrustMe
第二部
安装完成进入 VirtualXposed apk 应用,点击 6 个小点进入设置页面
第三步
进入设置页面,点击模块管理,勾选 JustTrustMe(当然我并没有找到它,可能是我这个版本不需要在手动选择了,安装之后自动识别到了)重启之后我们重新进去设置页面,添加我们需要抓包的应用即可,我这里选择的企业微信做案例
第四步
点击添加应用,选择需要抓包的软件安装
第五步
配置 charles 抓包
设置 charles 代理,此处不再说明,相信设置代理大家能自己解决,手机设置 wifi 里面代理改成手动。输入 ip,端口:默认 8888,注意手机和电脑在一个 wifi 下就 ok,
第六步
回到 VirtualXposed 上滑解锁,打开要测试的app,则发现 charles 已经成功抓取到HTTPS 的数据包
总结
以上内容来自 欲野@54088