一、Charles原理

  • 对Http进行抓包,对手机设置代理,转发
  • 对Https进行抓包,使用的原理就是中间人技术(man-in-the-middle),Charles会动态生成一个使用自己根证书签名的证书,Charles接收web服务器的证书,而客户端浏览器/客户端 接收Charles生成的证书,以此客户端和Charles之间建立Https连接,Charles和Web服务器之间建立Https连接,实现对Https传输信息的抓包。如果Charles根证书不被信任则无法建立Https连接,所以需要添加Charles根证书为信任证书。

Charles下载地址: https://www.charlesproxy.com/download/

二、Charles破解

破解方法1:通过替换Charles.jar破解

下载地址: https://www.zzzmode.com/mytools/charles/

1、输入RegisterName(此名称随意,用于显示 Registered to xxx)
2、选择本地已安装的版本,点击生成,并下载Charles.jar文件
3、Mac安装地址:替换本地 /Applications/Charles.app/Contents/Java 目录下的Charles.jar文件
   Windows安装地址:替换本地安装目录下的charles.jar文件

破解方法2:通过验证License Key破解

Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4

重启Charles,点击Tools -> help,第二栏显示Registered to xxx, 即破解成功!(破解成功后的charles在启动时,左下角的倒计时也没有了)

Charles破解成功

三、设置抓取https协议

1、Proxy端口设置

选中“Charles -> Proxy -> Proxy Settings”,设置Port为8888,选中“Enable transparent HTTP proxying”选项;

Charles代理的端口

2、在弹框中选择“Grant Privileges”信任;如果点击“Not Yet”或者关闭按钮,Charles将会取消Mac代理,需要手动设置,设置时会再次弹出窗口;

3、SSL证书-安装与信任三种证书:钥匙串根证书,模拟器证书,手机和浏览器证书

选择安装 Help -> SSL Proxying -> 以下三项证书:

Install Charles Root Certificate; #钥匙串根证书,选择始终信任,输入电脑密码
Install Charles Root Certificate on a Mobile Devices Or Remote Browser #手机和浏览器证书,在弹框提示下安装手机ssl证书到手机

打开钥匙串,Charles Proxy CA证书,一开始是不被信任的;选择始终信任,输入电脑密码;

4、SSL代理和端口号设置

https请求被拦截:https请求会显示unkonwn 就是不能解析https请求;

1)Proxy-> SSL Proxying Settings->SSL Proxying,选中"Enable SSL Proxying";
(2)添加host,端口号为443。这里是把所有的host都设置进去;当然也可以设置指定的host,端口不变;
(3)请求就可以解析出来了

四、手机连接Charles配置

注意:手机的无线网要和电脑的无线网保持一致,必须是同一wifi;

4.1查看电脑的ip地址,有以下3种方式:
查看电脑pc端ip-0

4.2手机连接Charles抓包配置

1)打开手机的HTTP代理,服务器为电脑的IP,端口号为8888;
(2)手机端访问网络,Charles会弹出确认窗,点击Allow(注意:首次设置代理,需要在手机浏览器上安装证书;在手机浏览器中输入:chls.pro/ssl  下载证书;详情看4.3);
(3)不需要抓包时,把手机代理恢复默认值,否则拖慢网速;

4.3查看https请求时,手机端需安装Charles的CA证书。安装SSL证书到手机设备时,Charles会弹框提示,选择“Allow”:

提示手机安装ssl证书

4.4手机授权

手机安装地址:chls.pro/ssl,直接在手机浏览器的地址栏输入,安装允许就好了;

安卓手机可直接授权,IOS手机则需要在“设置->通用”中打开相应的权限;

1、设置->通用->关于本机->证书信任设置,打开Charles Proxy CA的开关信任此证书;
2、设置->通用->描述文件与设备管理,打开Charles Proxy CA的开关信任此证书;

五、代理设置成功,重新发起网络请求,解密过的请求数据出现在Charles主界面,ok!

为什么要装Charles根证书:

因为Charles最终代理我们的ssl流量是要发回给我们的,而这个过程是我们和本地Charles代理的ssl通信,如果我们没有Charles签发的根证书,那么我们将无法信任Charles转发的任何ssl流量。

另外由于我们在Charles里面设置了和服务器对应的客户端证书PKCS12格式的包文件(pkcs12中包含被根证书签出来的公私钥),所以我们可以解密由指定host服务器发送过来的加密的数据,从而像抓包http包一样看到这些数据包里面的数据。Charles负责代替我们和该服务器发送接收加密数据,而我们还需要和Charles本身再进行一次通信,这样说应该就比较明确了。

发表回复

后才能评论