Android APP 用 Charles 网络抓包

一、Android抓包方式
对Https降级进行抓包,降级成Http
使用抓包工具对Https进行抓包
二、常用的抓包工具
wireshark:侧重于TCP、UDP传输层,HTTP/HTTPS也能抓包,但不能解密HTTPS报文。比较复杂
fiddler:支持HTTP/HTTPS协议,篡改请求入参,篡改响应效据,设置请求断点重发,弱网模拟。但是只支持Window
charles:基本功能跟fiddler一样。并且所有平台都支持,界面简洁,操作简单(重点)
三、抓包工具Charles
1.下载:
官网地址:Download a Free Trial of Charles • Charles Web Debugging Proxy

2.安装:
下载完成之后,直接点击安装即可。安装完成之后的界面

3.原理:

拦截请求,代理客户端向服务端发送请求
拦截服务端响应,拿到服务端返回的公钥,并返回自己的公钥证书,目的是为了接下来的流程中加密会话秘钥
客户端需要安装charies证书,并添加信任,否则会报证书无效错误;客户端生成会话秘钥,并使用charies公钥加密发送到服务端
再次拦截请求,用自己的私钥解密会话秘钥,并使用前面拿到服务端公钥加密会话秘钥发送到服务端
服务端使用自己的私钥解密会话秘钥
使用会话秘钥去加密response,并返回
charies再次拦截响应,使用会话秘钥去解密response,展示明文,从而达到https抓包的日志

4.证书配置
注意:
        在使用6.0及以下的手机的时候,如果想要抓包Https,只需要在手机上安装Charles证书就可以了,但是如果使用的手机是7.0及以上版本的时候,这个时候就不管用了,需要手动的添加该证书的信任

原因:
        因为Android在不同的版本,系统为了网络安全,网络配置发生了一些变化

系统的网络安全配置:
Android6.0及以下既支持信任系统证书,也支持信任用户安装的证书,也运行明文传输

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
        <certificates src="user" />
    </trust-anchors>
</base-config>
  • 在Android7.0及以上,不在信任用户安装的证书。这也就是为什么7.0以上的手机即便安装了charles证书,依旧无法抓包的原因
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

解决方案:
        为了解决Android7.0及以上手机https无法抓包,http无法传输的问题,需要自定义网络安全配置:

在res/raw目录下,添加charles的证书文件charles.pem
新增文件 res/xml/network_security_config.xml 文件,将cleartextTrafficPermitted设置成true,并增加trust-anchors标签引用添加进来的charles的证书

cleartextTrafficPermitted="true"  //允许在高版本上开启Http的明文传
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true"/>
    <trust-anchors>
        <certificates src="@raw/charles"/>
    </trust-anchors>
</network-security-config>
  • 在清单文件manifest中的Application下添加网络安全配置文件,这样就能抓包了
<application
    android:networkSecurityConfig="@xml/network_security_config"
</application>  
  • 增加debug-overrides标签,只在debuggable为true的情况下,才会应用这个网络安全配置文件
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
        <debug-overrides>
            <trust-anchors>
                <certificates src="@raw/charles" />
            </trust-anchors>
        </debug-overrides>
    </network-security-config>

5.使用:

如何配置charles,完成Https数据报文的抓包?

1.点击Proxy -> Proxy Settings…,查看charles的端口号:8888

2.点击Help -> Local IP Address,查看本机的IP地址:192.168.40.38

3.将手机wifi连接的代理设置成手动,并输入上面的端口号和IP地址

4.让应用去信任charles证书

点击Help -> SSL Proxying -> Save Charles Root Certificate… 保存证书

5.将证书拷贝到项目中。在app下的res目录下新建一个raw文件夹,并且把charles.pem文件拷贝过来

6.创建配置文件。在app下的res目录下新建一个xml文件夹,在这个文件夹下新建一个network_security_config.xml 文件,并填写配置信息

打开手机设置-密码与安全-系统安全-加密与凭据-安装证书-证书

然后将上面保存的证书push到手机上,找到位置添加证书信任

### 使用Charles代理工具抓取安卓手机上的HTTP/HTTPS流量 #### 配置PC端Charles软件 为了使Charles能够拦截并显示来自安卓设备的网络请求,需先在电脑上安装好Charles,并确保其正常运行。接着,在Charles菜单栏中找到`Proxy`选项卡下的`Enable Transparent HTTP Proxying`以开启透明代理模式[^1]。 对于HTTPS流量的捕捉,则需要进一步操作SSL证书配置以便于解密加密过的通信内容。通过点击`Help` -> `SSL Proxying` -> `Install Charles Root Certificate`完成根证书的安装过程[^2]。这一步骤至关重要,因为只有当Charles被授权作为可信认证机构时才能成功解析HTTPS会话内的具体细节。 #### 设置Android设备连接至同一Wi-Fi环境 保证计算机与待测安卓装置处于相同无线局域网下是实现二者间有效通讯的前提条件之一。通常情况下,默认网关地址即为提供互联网接入服务路由器所分配给主机使用的IP地址;而8888则是Charles默认监听端口号[^3]。 #### 安卓终端配置代理服务器参数 进入安卓系统的“设置”-> “WLAN”,选中当前已连入的WiFi名称右侧的小齿轮图标打开高级属性页面。在此处切换到静态IP方式管理网络配置,并指定HTTP代理类型为手动输入形式。按照提示分别填入之前获取到的PC机IPv4数值以及固定不变的标准端口值(如无特殊设定均为8888)。 #### 导入CA证书至移动操作系统内核库 为了让安卓能识别由Charles签发的安全链接凭证从而允许后者介入所有进出该平台的数据流之中,还需执行最后一个重要环节——导入CA公钥文件(.pem/.crt格式)。一般而言,此步骤可通过电子邮件附件传送或是借助USB线缆直传两种途径达成目的。一旦接收完毕后务必记得前往安全中心确认信任状态已被激活生效。 ```bash # 如果遇到某些版本android无法自动信任的情况, 可尝试如下命令刷新存储器索引重建关联关系 adb shell pm path com.android.providers.settings ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值