当前位置: 首页 > news >正文

Android网络抓包--Charles

一、Android抓包方式

  1. 对Https降级进行抓包,降级成Http
  2. 使用抓包工具对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.原理:

网络编程Http知识

  1. 拦截请求,代理客户端向服务端发送请求
  2. 拦截服务端响应,拿到服务端返回的公钥,并返回自己的公钥证书,目的是为了接下来的流程中加密会话秘钥
  3. 客户端需要安装charies证书,并添加信任,否则会报证书无效错误;客户端生成会话秘钥,并使用charies公钥加密发送到服务端
  4. 再次拦截请求,用自己的私钥解密会话秘钥,并使用前面拿到服务端公钥加密会话秘钥发送到服务端
  5. 服务端使用自己的私钥解密会话秘钥
  6. 使用会话秘钥去加密response,并返回
  7. 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>
  • 在android9.0及以上,只信任系统证书,并且不允许明文http的传输
<base-config cleartextTrafficPermitted="false"><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下添加网络安全配置文件,这样就能抓包了
<applicationandroid: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到手机上,找到位置添加证书信任

http://www.lryc.cn/news/337127.html

相关文章:

  • 【LeetCode热题100】238. 除自身以外数组的乘积(数组)
  • 《哈迪斯》自带的Lua解释器是哪个版本?
  • Java内存泄漏内存溢出
  • 【springboot】项目启动时打印全部接口方法
  • 单例19c RMAN数据迁移方案
  • 05—面向对象(上)
  • 【LeetCode热题100】【链表】两数相加
  • Linux命令学习—linux 的硬件管理
  • 通讯录项目(用c语言实现)
  • 让大模型落地有“技”可循
  • java:字符集和字符流
  • Java常见的设计模式
  • Oracle 19c RAC集群相关日志
  • TR4 - Transformer中的多头注意力机制
  • three.js跟着教程实现VR效果(四)
  • AI预测体彩排3第1弹【2024年4月12日预测--第1套算法开始计算第1次测试】
  • spring 中的控制反转
  • GO并发总是更快吗?
  • echarts折线图自定义打点标记小工具
  • 【图论】Leetcode 200. 岛屿数量【中等】
  • 酒店大厅装水离子雾化壁炉前和装后对比
  • 城市内涝与海绵城市规划设计中的水文水动力模拟
  • C++项目实战与经验分享
  • Day17_学点JavaEE_转发、重定向、Get、POST、乱码问题总结
  • Mouse IFN-α ELISA kit (Quick Test)
  • AMD Tensile 简介与示例
  • Rust语言
  • 排序算法之冒泡排序
  • js打印页面源码 ,打印选取的容器里的内容,打印指定内容
  • 算法练习第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV