一、现象
Client SSL handshake failed: An unknown issue occurred processing the certificate
笔者在对项目组的一个apk进行抓包的时候,发生了不能抓包的事情,看上面的现象,是未知证书导致的。想想也是奇怪,同样的手机(华为P9,Android8.0),同样的电脑(charles所在地),只是不同的apk,为什么这个就不能抓包了呢。
测试包链接:https://pan.baidu.com/s/1MEyP1IodqXEyDcM-bWPK3A
提取码:5eco
二、问题来源于原因
遇到的问题:Android6.0 及以下系统可以抓包,而 Android7.0 及以上系统不能再抓包
产生原因:Android7.0+ 的版本新增了证书验证,所以 app 内不再像原来一样默认信任用户的证书
三、解决思路
手机相同,charles相同,只是apk不一样,有可能是apk不一样,然后想到是开发框架是react native开发的,应该是里面的一些配置导致抓包不了,然后就apktool工具把两个apk包拿到各自的工程目录,具体的方法请参考:Android安全测试之应用完整性校验检测
然后到检查两个apk的AndroidManifest.xml的配置,发现新项目不能抓包的的配置少了:android:networkSecurityConfig="@xml/network_security_config"
A(能抓包的AndroidManifest.xml部分值)
B(不能抓包的AndroidManifest.xml部分值)
四、chalres代理抓包原理
五、解决方案
1、叫开发加上网络安全的配置项
- 在 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>
- 在 AndroidManifest 里的标签中,添加代码:
android:networkSecurityConfig="@xml/network_security_config"
然后叫开发同学重新编译打包,即可抓包。此种方法是最方便的,但是对于想要抓非自己项目的apk包,然后又没有网络安全配置项,还是要有其他的方案
2、找Android6.0系统的真机或者是使用Android Studio创建Android6.0系统的模拟器
现在市场上比较少系统这么低而且公司的测试机也没有Android6.0或以下的,并且Android Studio创建符合的模拟器也稍微繁琐下,就放弃了此种方案
3、获取手机的root权限,重新生成抓包工具的根证书
4、charles + VirtualXposed + JustTrustMe(此种方法最好,无需修改任何代码)
- 安装配置好charles,具体详看前面部分
- 下载 VirtualXposed和JustTrustMe的apk
VirtualXposed:https://github.com/android-hacker/VirtualXposed
JustTrustMe:https://github.com/Fuzion24/JustTrustMe
- 使用adb安装两个apk
电脑上只有一个设备
adb inatall -r VirtualXposed.apk
adb install -r JustTrustMe.apk
电脑上有多个设备
adb -s R3J6R19B20004228 inatall VirtualXposed.apk
adb -s R3J6R19B20004228 install JustTrustMe.apk
备注:-r是代表强制,-s是指定某个设备
- 安装完成进入 VirtualXposed apk 应用,点击6个小点进入设置页面
- 进入设置页面,点击模块管理,勾选 JustTrustMe(当然我并没有找到它,可能是我这个版本不需要在手动选择了,安装之后自动识别到了)重启之后我们重新进去设置页面,添加我们需要抓包的应用即可
- 点击添加应用,选择需要抓包的软件安装
- 确认是否有效
回到 VirtualXposed 上滑解锁,打开我们之前安装的不能抓包的apk TT Cooking ,则发现 charles 已经成功抓取到此应用的数据包
体现在charles的效果
===============================================================================
参考博客:
https://testerhome.com/topics/25263
https://blog.csdn.net/ShadowySpirits/article/details/79756274