Android7.0以上系统不能抓包解决方案

一、现象

   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代理抓包原理

   charles抓包原理

五、解决方案

  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(此种方法最好,无需修改任何代码)

    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

https://www.cnblogs.com/duanminkid/p/13685383.html

知道、想到、做到、得到
原文地址:https://www.cnblogs.com/Durant0420/p/14930257.html