Charles 断点、Rewrite详细教程

Charles 抓包并修改包

charles安装配置教程请点击

一 charles 设置断点

charles 可以通过设置断点的方式来修改 response。以reqres.in这个网址为例:该接口返回的数据为:

    "data":{
        "id":1,
        "email":"george.bluth@reqres.in",
        "first_name":"George",
        "last_name":"Bluth",
        "avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
    },
    "ad":{
        "company":"StatusCode Weekly",
        "url":"http://statuscode.org/",
        "text":"A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things."
    }
}

若需要将上述数据中的 “id”的value改为2,在charles中对应的url上右键选择breakpoints。然后选择菜单栏proxy下的Breakpoint settins,双击定影的url可进入到设置界面,由于我们只需要修改response,因此在下面只选中response即可。这样断点就设置完成了。
设置断点
再次请求该接口即可调到断点界面,点击上方的Edit Response就可以修改reponse啦,大功就要告成了。此时发现状态码是304,并没有response body,这是什么原因呢?为了节省带宽,对于静态文件服务器会自动完成 Last Modified 和 If Modified Since 的比较,如果发现内容与上次请求没有发生变化就不会返回网页内容。解决方法是ctrl+f5强制刷新。
断点界面
此时便可以修改response中的数据,如上文提到的将id修改为2.可以发现此时网页上的数据也修改成功了。
修改response

{
    "data": {
        "id": 2,
        "email": "george.bluth@reqres.in",
        "first_name": "George",
        "last_name": "Bluth",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg"
    },
    "ad": {
        "company": "StatusCode Weekly",
        "url": "http://statuscode.org/",
        "text": "A weekly newsletter focusing on software development, infrastructure, the server, performance, and the stack end of things."
    }
}

掌握这种方法可以实现很多骚操作,比如将b站的关注改成999+,不过修改这些都是花里花哨的,只为了观赏性。真正有用的是可以通过修改参数来达到体验某些app vip的效果。
设置断点的方式可以很直观的帮助我们观察到是如何修改response数据的,但是这种方法的缺点是每次请求都需要手动操作,能不能解放双手达到自动修改的效果呢?下面就要请出rewrite功能了。

二 charles rewrite

rewrite,顾名思义就是重写,下面就介绍通过rewrite功能来实现自动化的修改response或request数据包。还是以reqres.in为例。

  1. 首先在charles中找到该url并点击Copy URL复制它的url
  2. 点击菜单栏Tools选项下的Rewrite进入到rewrite界面,左上方第一项的enable就是开启rewrite,下面一项Debug in Error log则是在error.log中有输出日志。点击左边的add添加一项,再点击右上方的add添加url,在host里面粘贴之前复制的url然后在port,path,query框中随意点中一个即可自动填写,一个小技巧是query框中如果有值的话最好用代替,代表匹配全部,因为有些param可能会将时间作为参数传输,这样的话query会不同,如果用之前的就匹配不到了。
    rewrite界面
  3. 点击右下方的add添加rules,Type有很多选项,例如增加\修改\删除query param,修改request头,最下面的body正是我们想要的,选择body,勾选下面的response,Match中输入待匹配的文本,支持正则表达式。replace中输入替换文本即可。
  4. 修改id的话,在Match中输入id”\s:\s\d,\s*表示匹配0个或多个空格,\d表示匹配数字,匹配多个数字的话用\d+。在Replace填写想要修改的数据,如id”: 2,重发请求即可。成功的话在Notes中有提示。
    rewrite_rule
    notes
    这样就完成了response的自动修改了。

了解ios抓包的可能知道thor或http cather等类似的功能,这些charles都可以做到并且可以做的更好,更快速有效的方法是用charles找到对应的api接口,利用断点测试参数再用手机修改。

四 可能出现的bug

  1. 对于某些网站出现unknown的错误
    原因:无法解析https包。
    解决方法:可以在菜单栏Proxy下SSL Proxy Setting中添加对应的url
  2. rewrite中没有效果
    原因:这种情况下最大的原因就是正则表达式写的不对,推荐去一些正则表达式在线的匹配成功了再copy过来就好,推荐https://regex101.com/
先就写这些吧,估计没人看,权当自己记录一下温习用吧。贾谊在评论秦朝灭亡时总结过一句话:仁义不施而攻守之势异也。虽然找到工作了但还是要继续学习,要不然怕是连之前学的老本都要忘光了。

本网站发布的一切文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请联系邮箱:1194325527@qq.com处理

目录
×

给作者杯卡布奇诺

github