Charles使用手册

449 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

Charles是一款收费的抓包修改工具,易上手,数据请求易控制,修改简单,功能非常强大。 Charles不仅可以分析电脑本机的网络请求(HTTP和HTTPS),还可以分析移动端设备的网络请求。

抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作。也用来检测网络安全。

Charles01.png

初识Charles

Charles02.png 上面:是一些快捷操作按钮: Clear:清除; Stop Recording:停止记录(代理的开关) Stop SSL Proxying:停止SSL代理(HTTPS代理的开关) Start Throttling:开始节流(模拟慢速网络) Disable Breakpoints:禁用断点 Compose a new request based on the selection:基于所选内容编写一个新请求 Repeat selected requests:重复请求所选请求 Validate selected responses:使用W3C验证器记录HTML、CSS和RSS/atom响应 Tools:工具 Setting:设置

左侧:是查看视图的方式 1,Structure视图是将网络请求按照访问的域名进行分类 2,Sequence视图是将网络请求按照访问时间排序的 最下面有一个Filter过滤器

右侧: 视图模式:Overview:概述;Contents:内容,最常用的就是这两个 Contents:Headers:请求头信息;Query String:参数信息;Cookies;Authentication:认证信息;Raw:原始数据

右侧下部分: Response的Headers,Cookie, 多种格式的数据:Text:未经处理的数据;Hex:16进制的数据;Compressed:压缩的数据;JavaScript:js格式的数据;JSON Text:JSON格式化的数据;Raw:原始数据

Charles原始数据

Charles03.png

Charles04.png

配置Charles

HTTP请求配置:

1,查看本机ip地址:Help -> Local IP Addresses 2,设置代理:Proxy -> Proxy Settings 默认端口是8888 3,配置手机代理:无线局域网-> I -> HTTP代理 -> 手动 -> 配置服务器与端口,与1,2一致 4,启动App,在Charles的弹窗中选择Allow

Charles05.png

Charles06.png

Charles07.png

Charles08.png

HTTPS请求配置:

1,电脑安装证书:Help -> SSL Proxying -> Install Charles Root Cerificate 2,双击打开证书,选择始终信任 3,安装根证书到手机设备 4,手机配置完代理后,浏览器打开chls.pro/ssl 下载描述文件,安装 5,证书信任设置:设置 -> 通用 -> 关于本机 -> 证书信任设置 -> 针对根证书启用完全信任 6,Proxy -> SSL Proxying Settings… 添加要抓取的HTTPS请求

Charles09.png

Charles10.png

Charles11.png

Charles12.png

Charles13.png

Charles14.png

Charles15.png

Charles16.png

Charles17.png

Charles搜索

Charles18.png

Charles过滤、修改网络请求

配置好代理后,就能看到截取的网络数据了 过滤网络请求:通常情况下,网络请求是非常大量的,需要观察某个请求比较费时,那么就需要对网络请求进行过滤,只监控相关的请求。 1,在Sequence界面中Filter栏中填入过滤出来的关键字 2,在Charles的菜单栏选择Proxy -> Recording Settings -> Include,填入需要监控的协议,主机地址,端口号

修改网络请求:

对于捕获的网络请求,我们经常需要修改网络请求的cookie、Headers、Url等信息。Charles提供了对网络请求的编辑和重发功能。只需要修改编辑的网络请求。最后执行一下就可以了。 选中该请求 -> 右键Commpose或者点击钢笔图标 -> 修改网络请求的各种参数信息 -> Execute。

Charles19.png

Charles20.png

Charles21.png

Charles-Breakpoints

Charles提供了Map功能、Rewrite功能、Breakpoints功能,都可以达到修改服务器返回内容的目的。

差异是: Breakpoints功能:适合做临时性的修改 Rewrite功能:适合对网络请求进行一些部分替换或正则替换 Map功能适合长期将某些请求重定向到另一个网络地址或本地文件 Map Local:将请求的返回重定向到本地文件中。 Map Remote:将请求的域名重定向到一个网络地址。

取消修改:Tools -> Map Local…/Map Remote…

Charles22.png

Charles23.png

Charles24.png

Charles-Rewrite

Charles25.png

Charles26.png

Charles27.png

Charles28.png

Charles29.png

Charles-Map Local、Map Remote

Charles30.png

Charles31.png

Charles32.png

Charles修改内容的区别

差异是: Breakpoints功能:适合做临时性的修改 Rewrite功能:适合对网络请求进行一些部分替换或正则替换 Map功能适合长期将某些请求重定向到另一个网络地址或本地文件 Map Local:将请求的返回重定向到本地文件中。 Map Remote:将请求的域名重定向到一个网络地址。

压力测试、模拟慢速网络请求

如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的"Only for selected hotst" 项

Charles33.png

Charles34.png

Charles35.png

Charles使用时常见问题

1,忘记关闭手机代理,当关闭Charles后,手机网络不可用 2,Charles开启后导致有些h5页面加载有问题,或者jsbridge失效 3,Charles与翻墙软件有冲突,导致其中一个不生效 4,最终的数据还是要以服务端下发数据为准

Charles的工作原理是把自己设置为系统的代理服务器,翻墙软件的工作原理也是把自己设置成为系统的代理服务器,为了2者和平共处。我们可以在Charles的External Proxy Settings中将翻墙的代理端口等信息填写。同时我们需要关闭翻墙软件的自动设置,更改为手动模式(使其不主动修改系统代理)

中间人攻击

Charles36.png

Charles37.png

为什么手机安装了Charles根证书后就能正常抓包呢? 其实Charles做的就是针对HTTPS的通信双方身份的真实性进行处理; 1,当客户端和服务器建立连接时,Charles会拦截到服务器返回的证书(服务器公钥) 2,然后动态生成一张伪造证书(Charles公钥/假公钥)发送给客户端 3,客户端收到Charles证书后,进行验证;因为之前我们手机设置了信任,所以验证通过;(只要手机不信任这种证书,HTTPS还是能确保安全的) 4,客户端生成会话密钥,使用Charles证书对会话密钥进行加密再传输给服务器 5,Charles拦截到客户端传输的数据,使用自己的Charles私钥进行解密得到会话密钥 6,连接成功后,客户端和服务器通信,客户端对传输的数据使用会话密钥加密并使用公钥对数据摘要进行数字签名,一同传输给服务器; 7,Charles拦截到通信的数据,使用之前获得的会话密钥解密就能得到原始数据; 8,Charles同样也能篡改通信的数据:将篡改后的数据重新加密并重新生成摘要并使用之前获得的公钥进行数字签名,替换原本的签名,再传输给服务器; 9,服务器收取到数据,按正常流程解密验证; 10,服务器返回响应数据时,Charles也是类似拦截过程

Charles功能很强大,本文介绍了如何配置证书;过滤、修改网络请求;修改服务器返回内容;压力测试、模拟慢速网络请求等常用功能。 可以结合实际场景去应用,提高开发效率。