关于安卓7.0版本以上charles无法抓取https包的问题解决办法

本文详细介绍了在安卓7.0及以上版本因系统不信任用户安装证书导致无法正常抓取HTTPS包的问题。通过修改APK的网络配置,使系统信任用户证书,从而解决抓包失败的难题。步骤包括APK反编译、添加网络配置、重新打包签名,最终实现成功抓包。建议使用低版本设备或iOS设备作为替代方案。
摘要由CSDN通过智能技术生成

结论:由于安卓7.0后,用户安装的证书不被信任,导致无法使用charles等抓包工具对https的请求包进行正常的解析,所以直接用安卓7.0以下的手机来进行抓包,或者最简单的就是用安卓7.0以下的模拟器!

 

 

前言

解决这个问题比较复杂,需要花费大量时间来解决这个问题,如果没有耐心是不能成功的.可以说这里解决的每一步都有坑

问题描述

在安卓7.0及以上的版本,即使安装了charles证书,也会导致抓取https包失败
在这里插入图片描述
如图 https 包出现 unknow 报错

为什么这样

Android6.0网络默认配置:

    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>

Android 7.0到 Android 8.1的默认配置:

    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

Android 9及更高版本应用的默认配置:

<base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

简单解释一下这几个参数的意思:
cleartextTrafficPermitted 是否允许http明文传输
certificates src="system"信任系统证书
certificates src="user"信任用户安装的证书

通过几个版本对比可以看出,从 安卓7.0版本开始系统已经不再信任用户安装的证书,而安卓9.0 后系统默认禁止了http明文传输

上面所说的配置都是在安装包里面没有配置网络的情况下,系统默认的网络配置是这样的,如果有安装包里面的网络配置,那么优先执行安装包里面的网络配置. 即安装包配置的优先级高于系统默认配置

所以解决这个问题的办法,可以修改或添加apk中的网络配置来信任用户安装的证书,然后重新打包签名,这样抓包就不会报错了

开始解决

1.解包(反编译)

使用 apktool 来进行反编译,不同系统的安装的方法大致相同
反编译

apktool d 安装包名字
  •  

这一步可能会遇到各种错误,不过大部分原因都是由于 apktool.jar版本导致的,优先使用最新版本,如果解包失败,那么更换几个apktool.jar的版本

2.修改网络配置文件

在安装包同级目录下会生成一个与安装包名字相同的文件夹,里面就是apk反编译后的内容了,首先在 AndroidManifest.xml 添加网络配置选项
在 application标签中添加配置
在这里插入图片描述

android:networkSecurityConfig="@xml/network_security_config"
  •  

然后在res/xml/路径下 新建network_security_config.xml文件(如果没有对应文件夹可以建立对应文件夹)
文件内容:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>

3.打包和签名

打包:

apktool b 文件夹名字

打包后的apk存在于dist文件夹下

签名:
签名我这里用的是signapk.jar
使用命令进行签名:

java -jar signapk.jar testkey.x509.pem testkey.pk8 旧安装包 新安装包

之后就可以安装新安装包(签名后的)

后续

再次进行抓包就不会出现问题了

其实不如买一个 安卓7.0以下的手机进行抓包,或者直接使用苹果手机进行抓包

 

转载自:https://blog.csdn.net/chouzhou9701/article/details/105408761/

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是在安卓7.0以上版本上使用Charles进行抓包的步骤[^1]: 1. 在Windows上安装Charles:首先,您需要在Windows上安装Charles。您可以从Charles官方网站下载并安装Charles。 2. 配置CharlesHTTPS抓包功能:在Charles中,您需要配置HTTPS抓包功能,以便能够捕获和查看HTTPS请求和响应。以下是配置HTTPS抓包功能的步骤: - 打开Charles并导航到“Proxy”菜单,然后选择“SSL Proxying Settings”。 - 在“SSL Proxying”选项卡中,单击“Add”按钮。 - 在“Location”字段中,输入要抓取的域名或URL的模式。例如,如果您想抓取所有的HTTPS请求和响应,可以输入“*”。 - 单击“OK”保存设置。 3. 安装Charles证书:为了能够捕获和解密HTTPS流量,您需要在安卓设备上安装Charles证书。以下是安装Charles证书的步骤: - 在安卓设备上打开浏览器,并访问http://chls.pro/ssl。 - 下载并安装Charles证书。 - 在安卓设备的设置中,导航到“安全性和隐私”或“安全”选项。 - 选择“凭据存储”或“受信任的凭据”。 - 选择“安装从存储设备安装的凭据”。 - 选择下载的Charles证书文件并安装。 4. 配置安卓设备的代理:为了将安卓设备的流量导向Charles,您需要配置设备的代理设置。以下是配置代理设置的步骤: - 在安卓设备的设置中,导航到“Wi-Fi”或“网络和互联网”选项。 - 长按您当前连接的Wi-Fi网络,并选择“修改网络”或“网络设置”。 - 在高级选项中,选择“代理”。 - 选择“手动”代理设置。 - 输入您计算机的IP地址和Charles的代理端口(默认为8888)。 - 保存设置并重新连接Wi-Fi网络。 5. 使用Charles进行抓包:现在,您已经完成了所有必要的设置,可以开始使用Charles进行抓包了。以下是使用Charles进行抓包的步骤: - 在Windows上打开Charles,并确保代理服务器正在运行。 - 在安卓设备上打开您想要抓包的应用程序。 - 在Charles中,您应该能够看到安卓设备的流量,并可以查看请求和响应的详细信息。 请注意,使用Charles进行抓包可能涉及到违反隐私和安全规定的行为。请确保您在合法和合适的情况下使用Charles进行抓包
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值