一、charles简介
Charles 是常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。
二、charles安装与破解
1.charles安装
charles的安装非常简单,直接通过charles官网安装最新版即可。
Charles 是收费软件,可以免费试用 30 天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时。
2.破解
在线破解:https://www.zzzmode.com/mytools/charles/
注册名称随意填写,然后选择自己安装的charles版本号,点击即可生成一个charles.jar包,将生成的charles.jar替换原来安装目录lib下的charles.jar包即可。
注意:生成的jar包只有10分钟的有效期,需要在10分钟内完成破解的操作
三、基本配置
我使用的是win7的系统,所以以下配置适用于win7的电脑系统,win10也是类似的配置
1.PC端安装证书
打开charles,选择help–>SSL Proxying–> Install Charles Root Ceriticate,点击安装证书,一直点击下一步完成即可成功安装。如下图所示:
2.web端抓包配置
以火狐浏览器为例,其它浏览器类似配置即可。
安装charles后访问火狐浏览器,无论访问什么链接都会提示您的连接不安全,解决办法与fiddler同理,需要安装charles证书
a.将charles证书保存到本地,选择help→SSL Proxying→Save Charles Certificate
b.进入Firefox浏览器选择—高级-证书,点击查看证书—导入,选择本地保存的证书,勾选信任,导入即可。
c.重启火狐浏览器,发现网页可以正常打开,charles也可以正常抓包
3.手机抓包配置
1)手机端设置代理
此时你的手机必须和电脑在同一个网络/wifi里,手机选择和电脑相同wifi—>长按此wifi弹框中选择修改网络—>显示高级选项—>服务器主机名输入框中输入电脑ip地址,服务器端口号填写8888——>保存即可,此时手机和电脑绑定在一起一遍电脑抓手机上请求网络数据
第一次设置成功代理后,随便打开一个需要网络的应用,PC端会自动弹出以下提示,选择allow允许Charles代理
如果没有弹出该提示,也可以在菜单栏中的proxy—Access Control settings中手动将手机和电脑的ip加入其中(手机的ip地址怎么查看可以自行百度)
2)手机安装charles证书
a.IOS客户端
前提:手机WiFi代理已经设置好,参考前文设置
1、打开Charles,选择help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser
2、手机连接电脑代理,打开safari,输入网址:chls.pro/ssl
3、手机弹出提示:此网站正尝试打开“设置”已向您显示一个配置描述文件。您要允许吗?忽略|允许,选择允许,安装描述文件,并信任
4、iOS10以上的手机需要在:设置→ 通用 → 关于本机 → 证书信任设置→ 找到charles proxy CA证书,打开信任即可
b.android客户端
方式一:
点击 help–>SSL Proxying–> Install Charles Root Ceriticate on a Mobile Device or Remote Browser,
手机设置好WiFi代理后,在手机浏览器打开下面弹框里提到的链接chls.pro/ssl,下载证书,安装即可(华为手机最好不要用自带的浏览器,因为自带的浏览器下载的证书为pem格式,无法直接安装,我用的百度浏览器)
cer格式的证书下载完可以直接点击安装,安装证书过程中会要求输入锁屏密码
方式二:
1、打开Charles,选择help→SSL Proxying→Save Charles Certificate,然后将证书导入到手机中
2、导入后直接点击安装证书,提示无法打开(pem格式),cer格式的key直接安装,可以忽略第三步
3、进入手机设置—>安全和隐私—>更多安全设置—>加密和凭据—>从存储设备安装—>选择我们刚下载的证书,安装即可(华为手机的安装方式,其它安卓机型可以自行百度)
常见手机:小米手机,华为手机,需要设置手机锁屏密码
4.设置抓取https
默认charles只可以抓取http协议的包,https的更安全,需要如下配置方可
菜单栏 Proxy–>SSL Proxying Setting–>选择SSL Proxying——>点击add在弹框中port里填写443(443代表通用https端口号), host中的*代表抓取所有地址的包