Charles的安装与破解
app抓包工具在Mac常用Charles,window用fiddler,
本文详细介绍Charles安装破解以及配合手机抓取https信息的使用方法,所有步骤均本人亲测
(本文以window环境/iOS手机为例,Mac步骤类似)
[Fidder https抓包指引如下: https://blog.csdn.net/u011200604/article/details/79456402]
首先下载Charles:
Charles下载地址 地址:https://www.charlesproxy.com/latest-release/download.do 下载对应机型及版本的软件
破解地址:https://www.zzzmode.com/mytools/charles/
描述:
此工具用于生成破解后的charles.jar文件
用法:
输入RegisterName(此名称随意,用于显示 Registered to xxx),选择本地已安装的版本,点击生成,并下载charles.jar文件
替换本地charles.jar文件
macOS: /Applications/Charles.app/Contents/Java/charles.jar
Windows: C:\Program Files\Charles\lib\charles.jar
也可直接使用下方提供的注册码:
// Charles Proxy License
// 适用于Charles任意版本的注册码,谁还会想要使用破解版呢。
// Charles 4.2目前是最新版,可用。
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
点击help-register 若已注册则显示如下示例:( 此时,重启charles,查看已经破解)
设置抓取http协议
设置charles, Proxy->Proxy setting,就可以抓取http协议了(默认不用更改)
下图为一些常用按钮,
进行手机端的设置操作(Android/iOS)
首先手机和pc端链接同一wifi,注意: 必须是同一wifi;
在手机端连的wifi选择高级设置-选择手动配置代理,服务器为电脑的IP,端口号为上方设置的8888
电脑端IP获取办法自行百度,或者在Charles选择Help-Local IP Address查看
(下图以iOS为例)
Android机型设置代理大致流程如下,长按当前wifi-修改网络-显示高级选项-手动代理(依据手机不同可能有少许不同,本图以荣耀v8为例)
在手机初次通过Charles抓取网络时会出现如下 ,选择同意
至此,Charles已可以抓取手机端普通的http请求
https的协议抓包
安装SSL证书到手机设备,点击 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device
按照提示
在手机Safari浏览器输入地址 chls.pro/ssl,出现证书安装页面,点击安装,(会输入密码,一定要点击安装,并且设置为信任,会出现下图验证图标)
注:在iOS端 10.0以上的系统有可能抓包失败,一定要进行如下设置!!!
安装完成后,在 设置→通用→关于本机→证书信任设置,里面启用完全信任Charles证书
在Android端浏览器访问chls.pro/ssl地址后安装证书如下:(注: Android7.0以上机型因为安全机制可能无法监听https,须app代码端设置支持!!!)
此时要自己写证书名称,一定要设置密码(自己记住);
最后一步:Charles端设置需要监听的https host:
选择proxy-ssl proxying setting 此处可用*代替不明字段,如 *:443代表抓取所有https接口信息
另外,在电脑上安装证书如下,一直同意就行:
至此,Android手机及iOS手机均可抓取https数据
Charles常用的方法及技巧请自行百度,本文不再介绍
下图为对https抓包成功的截图:
注: 用Charles代理抓取https数据可能导致某些加密层级较高的软件如法使用(如iOS的App Store和Android的应用市场,若使用 关闭代理即可)
注: 某些app部分https的数据仍可能抓取不成功因为采用了内部数据加密或其他数据反破解方法(如微信等),需要原APP的专业证书加入到Charles才行
Charles抓不到包的处理方法总结
报错:SSLHandshake: Received fatal alert: unknown_ca
1.检查模拟器是否装了chales证书.
安装地址: www.charlesproxy.com/getssl / 或者 chls.pro/ssl
使用safari(必须系统自带浏览器)打开这个网址.并安装证书.
2.检查手机是否勾选chals证书:
设置路径: 手机 -> 设置 -> 通用 -> 关于本机 -> 证书信任设置(拉到底) -> 勾选Charles Proxy CA
3.检查手机是否信任charles证书
设置路径: 手机 -> 设置 -> 通用 -> 描述文件与设备管理(拉到底) -> 信任charles 证书
4.检查你是否开了VPN(翻墙软件)
翻墙软件会修改你的网路配置
关闭VPN重新打开charles即可.
5.那如果是在使用VPN的情况下想抓取境外app的数据呢?
请看下文:(环境:本用例使用Lantern VPN, Windows Charles,已实测)
关于在使用翻墙软件VPN下抓取境外APP的https数据
参照上文,在能对国内HTTPS环境能够抓取后
对Charles如下配置: 打开
翻墙端口号的获取如下:(以lantern为例 ,使用shadowsocks方法类似,有的还需要填写domain和password):
打开设置-高级设置:将此host和端口号填入上图Charles的位置,至此Charles已具备翻墙能力
然后像正常抓取HTTPS那样抓取数据即可
补充:
关于Charles的一些使用技巧及日常问题的解决
tips小技巧:
一般会抓取大量http/https数据,可通过选中关注的网址-focus 来过滤掉其他信息
Maplocal修改返回数据
开发时需要测试某个数据为临界值时.app显示是否会正常.
1.保存接口返回的数据到本地文件
找到你想修改的url -> 右击 -> Save Response -> 填写文件名(如response.text)
2.将接口与本地数据建立链接
找到刚才的url -> 右击-map local -> 粘贴刚才复制的url到Host
Protocol / Host / Port / Path都会自动填充.
我们只要把Query里的数据删除即可(必须删除).点击OK就可以了.
3.打开刚才你保存在本地的文件response.text.修改你想修改的数据.Alt+s
保存一下.
4.这时候app再请求这个接口的时候.返回的数据就是你修改的本地数据了.
rewrite修改http返回码
有时候我们需要模拟接口访问失败的情况.就要修改Http返回码.
1.获取你想修改的接口的URL
在Charles里找到你想修改的url -> 右击该url -> Copy URL
即可获取该url.如图.
2.打开Rewrite功能
打开Charles -> 工具栏 -> Tools -> Rewrite
8
3.设置选项
3.1.勾选Enable Rewrite.
3.2.勾选Debug in Error log
9
3.3.点击Locations里Add
按钮(上图5)
Protocol设置为Http或者Https(视你的接口而定)
Host: 为你刚才复制的Url的Host.
Path: 为你刚才复制的Url的path
Port 和 Query 都留空.(一定要留空)
注释:什么是Host 和 Path
如该接口: https://www.baidu.com/x/v2/show?platform=ioswww.baidu.com
就为Host./x/v2/show
即为Path(?
之前Host
之后即为Path)
(5).点击Rules里的Add
按钮(上图6)
Type 选项选择
Response Status
Match 栏里的Value
填写200
Replace 栏里的Value
填写 你想修改成的返回码.如404
Mocky用法:
Mocky是一个可以自己生成一个Api.并且可以自定义Status Code. Body的网站.
HTTP返回码总结
状态码 | 类别 | 原因 |
---|---|---|
1xx | information-信息状态码 | 接收的请求正在处理 |
2xx | success-成功状态码 | 请求正常处理完毕 |
3xx | redireaction-重定向状态码 | 每次请求中使用重定向不要超过5次 |
4xx | client error-客户端错误状态码 | 表示请求可能出错,服务器无法处理请求 |
5xx | server error-服务器错误状态码 | 服务器本身的错误,而不是请求出错 |
状态码 | 英文名称 | 说明 |
---|---|---|
100 | continue | 客户端必须继续发出请求 |
101 | switching protocols | 客户端要求服务器根据请求转换http协议版本 |
200 | ok | 请求成功 |
201 | created | 服务器已经创建了文档,location头给出了他的url |
202 | accepted | 接收和处理,但处理还未完成 |
203 | non-authoriative information | 返回信息不确定或不完整 |
204 | no content | 服务器成功处理了请求,但没有返回任何内容 |
205 | reset content | 服务器完成了请求,用户代理必须复位当前已经浏览过的文件 |
206 | partial content | 服务器已经完成了部分用户的get请求 |
300 | multiple choices | 请求的资源可在多处得到 |
301 | moved permanently | 删除请求数据 |
302 | found | 在其他地址发现了请求数据 |
303 | see other | 建议客户端访问其他url或换成其他访问方式 |
304 | not modified | 客户端请求成功.但文件未变化 |
305 | use proxy | 请求的资源必须从服务器指定的地址得到 |
307 | temporary redirect | 申明请求的资源临时性删除 |
400 | not found | 客户端请求的语法错误,服务器无法解析 |
401 | unauthorized | 请求授权失败 |
402 | payment granted | 保留有效的charge to头响应 |
403 | forbidden | 请求不允许 |
404 | not found | 服务器无法根据客户端的请求找到资源 |
405 | method not allowed | 用户在request-line字段定义的方法不允许 |
406 | not acceptable | 根据用户发送的accept.请求资源不可访问 |
407 | proxy authentication required | 类型401,用户必须首先在代理服务器上得到授权 |
408 | request time out | 客户端没有在用户指定的时间内完成请求 |
409 | conflict | 对当前资源状态,请求不能完成 |
410 | gone | 服务器上不再有此资源且无进一步的参考地址 |
411 | length required | 服务器拒绝用户自定义的content-length属性请求 |
412 | precondition failed | 一个或多个请求头字段在当前请求中错误 |
413 | request entity too large | 请求的资源大于服务器允许的大小 |
414 | request-url too large | 请求的资源url鲳鱼服务器允许的长度 |
415 | unsupported media type | 请求资源不支持请求项目的格式 |
416 | requested range not satisfiable | 请求中包含range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含if-range请求头字段 |
417 | expectation failed | 服务器不满足请求expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求 |
500 | internal server error | 服务器内部错误,无法完成请求 |
501 | not implemented | 服务器不支持请求的函数 |
502 | bad geteway | 服务器暂时不可用,有时是为了防止发生系统过载 |
503 | service unavailable | 服务器过载或暂停维修 |
504 | geteway timeout | 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长 |
505 | http version not supported | 服务器不支持或拒绝支持请求头中指定的http版本 |
模拟慢网速
在开发的时候.有时需要测试在网速差的时候app是否正常.
1.Charles工具栏-Proxy-Throttle Setting
2.选中Enable Throttling
3.选择Throttle preset为56 kbps Modem
.他就会自动将Bandwidth设置为57.6kb/s.这个即你现在的下载速度.如果你觉得还不够慢.可以将他修改的更小.