Charles的应用

[TOC]

Rewrite应用

案例01

问题:今日头条极速版App每天的阅读推送文章任务因为每天收到的推送很少,因而不能得很高的积分,怎样把普通文章的阅读变为推送文章的阅读呢?

思考:对比普通文章的阅读与推送文章的阅读发出的网络数据,找出差异

普通文章的阅读与推送文章的阅读达到奖励标准时,都用相同的接口https://is.snssdk.com/score_task/v1/task/get_read_bonus/

# 普通阅读文章/视频
https://is.snssdk.com/score_task/v1/task/get_read_bonus/?fp=xxx&...&group_id=6689697061983486472

# 推送文章的阅读
https://is.snssdk.com/score_task/v1/task/get_read_bonus/?fp=xxx&...&&impression_type=push&group_id=6689697061983486472

对比上面的接口数据发现:
推送阅读只比普通阅读多出了impression_type=push的Query String

解决:用Charles的Rewrite功能Add Query Param来增加impression_type=push解决问题

Rewrite功能-Type:Add Query Param

上面的get_read_bonus重写规则Export导出的get_read_bonus.xml文件内容如下:

<?xml version='1.0' encoding='UTF-8' ?>
<?charles serialisation-version='2.0' ?>
<rewriteSet-array>
  <rewriteSet>
    <active>true</active>
    <name>get_read_bonus</name>
    <hosts>
      <locationPatterns>
        <locationMatch>
          <location>
            <protocol>https</protocol>
            <host>is.snssdk.com</host>
            <path>/score_task/v1/task/get_read_bonus/</path>
          </location>
          <enabled>true</enabled>
        </locationMatch>
      </locationPatterns>
    </hosts>
    <rules>
      <rewriteRule>
        <active>true</active>
        <ruleType>8</ruleType>
        <matchHeader></matchHeader>
        <matchValue></matchValue>
        <matchHeaderRegex>false</matchHeaderRegex>
        <matchValueRegex>false</matchValueRegex>
        <matchRequest>false</matchRequest>
        <matchResponse>false</matchResponse>
        <newHeader>impression_type</newHeader>
        <newValue>push</newValue>
        <newHeaderRegex>false</newHeaderRegex>
        <newValueRegex>false</newValueRegex>
        <matchWholeValue>false</matchWholeValue>
        <caseSensitive>false</caseSensitive>
        <replaceType>2</replaceType>
      </rewriteRule>
    </rules>
  </rewriteSet>
</rewriteSet-array>

重写规则设置正确与否验证:


规则设置正确与否验证

在上面的Notes列上会显示Rewrite Tool: query added "impression_type: push"

应用:

  1. 打开Charles并生效上面的Rewrite设置
  2. 手机设置代理为Charles的代理地址
  3. 正常阅读普通文章\视频达到奖励时点
  4. 查找我的收益页面,验证成功与否

案例02

问题:趣消除趣键盘东方头条等App都看广告得金币,怎样减少广告的时间?

思考:广告是哪里来的?广告时长是怎么来的?
当点击App上的按钮弹出广告时,3个App都调用了接口:

https://is.snssdk.com/api/ad/union/sdk/get_ads/

响应如下:

{
......
        "video": {
            "cover_height": 1280,
            "cover_url": "http://sf1-ttcdn-tos.pstatp.com/img/mosaic-legacy/1be91000a8c62c6ba6221~noop.jpg",
            "cover_width": 720,
            "endcard": "https://www.toutiaopage.com/union/endcard/1629848424707111/?rit=909946692\u0026req_id=ED6EC127-C359-4C18-A41E-3A5F6F499250u3183\u0026ad_sdk_version=1.9.9.0\u0026os=ios\u0026lang=cn\u0026style_id=1104\u0026ad_id=1629844369912839\u0026_toutiao_params=%7B%22cid%22%3A1629848424707111%2C%22device_id%22%3A9724339963504202%2C%22log_extra%22%3A%22%7B%5C%22ad_price%5C%22%3A%5C%22XOub4AAGRWZc65vgAAZFZgz-hMMMgth42hwxAg%5C%22%2C%5C%22convert_id%5C%22%3A1629408290774020%2C%5C%22orit%5C%22%3A900000000%2C%5C%22req_id%5C%22%3A%5C%22ED6EC127-C359-4C18-A41E-3A5F6F499250u3183%5C%22%2C%5C%22rit%5C%22%3A909946692%7D%22%2C%22orit%22%3A900000000%2C%22req_id%22%3A%22ED6EC127-C359-4C18-A41E-3A5F6F499250u3183%22%2C%22rit%22%3A909946692%2C%22sign%22%3A%22D41D8CD98F00B204E9800998ECF8427E%22%2C%22uid%22%3A9724339963504202%2C%22ut%22%3A14%7D\u0026append=%7B%22openurl%22%3A%22%22%2C%22postdata%22%3A%5B%7B%22__type__%22%3A%22req_id%22%2C%22cid%22%3A1629848424707111%2C%22req_id%22%3A%22ED6EC127-C359-4C18-A41E-3A5F6F499250u3183%22%2C%22rit%22%3A909946692%7D%5D%7D",
            "resolution": "720x1280",
            "size": 5628226,
            "video_duration": 29.04,
            "video_url": "http://vd2.bdstatic.com/mda-jesntzw6569xqudw/mda-jesntzw6569xqudw.mp4"
        }
    }],
......
}

广告就是从上面的接口获取而来的,广告时长由video_url字段对应的mp4的时长决定

解决:用Charles的Rewrite功能Body替换video_url字段的值

Rewrite功能-Type:Body

Match Value:
"video_url":"(.+)"}

Replace Value:
"video_url":"http://vd2.bdstatic.com/mda-jesntzw6569xqudw/mda.mp4"}

提供一个只有3秒的素材:

http://vd2.bdstatic.com/mda-jesntzw6569xqudw/mda-jesntzw6569xqudw.mp4

案例03

问题:章鱼输入法App有看广告得金币,没有像案例02那样找到相应的接口api返回广告视频的URL,怎样减少广告的时间?

思考:尝试替换广告视频的请求
比如广告视频的请求如下:

Get https://v3-ad.ixigua.com/.../video/m/.../toutiao.mp4

替换为只有3秒的视频地址
Get http://vd2.bdstatic.com/.../3seconds.mp4

解决:用Charles的Rewrite功能URL替换请求

Rewrite功能-Type:URL

案例04

问题:扶我起来学数学App的作战休息区有一个游戏伪装者,在上报成绩时,接口有hash字段,修改成绩字段,hash会验证不通过,达到了防止伪造成绩的功能,怎样在hash前伪造成绩?

成绩上报接口

思考:hash算法一般难破解,与其破解hash算法,不如转变思路:修改传入hash的值

value肯定与成绩相关
hash(value)

那value具体是怎么样的呢?通过抓包的数据可以判定为是个h5游戏,在js代码中可能包含相要的答案


image

在浏览器中打开上面中的game.html验证确实是一个h5游戏:

image

解决:

  • 用Charles的Mirror功能把抓包的数据自动保存为文件,再在文本编辑器中检查代码
  • game.html文件中查找rest/game_report,因为有这个网络包,所以先查找这个关键字,结果如下:
function _gameReport(score, callBack, hash, time){
    var oAjax = null;
    //这里进行HTTP请求
    oAjax = new XMLHttpRequest();
    oAjax.open('post',HOSTURLAPI+"/rest/game_report"+"?uid="+UID+"&gameid="+GAMEID+"&score="+score+"&tm="+time+"&hash="+hash,true);
}
  • 查找_gameReport函数的调用者
function gameReport(score, callBack){
    var timeData = new Date().getTime();
    var hashValue = UID+GAMEID+score+timeData;
    var hash = '';
    dsBridge.call('hashCode',hashValue,function(data){
        hash = data;
        _gameReport(score, callBack, hash, timeData);
    });
}

gameReport(b[0], function(success, old_score){})

js代码调用到App的hashCode方法,hashValue = UID+GAMEID+score+timeData
用Charles的Rewrite功能Body替换:

Match Value:
gameReport(b[0]

Replace Value:
gameReport('99'
image
  • 成绩已修改,hash验证已通过

Mirror应用

文档:https://www.charlesproxy.com/documentation/tools/mirror/

The Mirror tool saves responses to disk as they are received, creating a mirror copy of websites as you browse them.

Mirror把响应保存为文件到硬盘上

image
Mirror保存下来的文件

No Caching 和 Block Cookies应用

在案例:扶我起来学数学App的伪装者游戏通过Rewrite功能修改了js文件中的内容;但有时js文件不是每次都会传输,而是使用了缓存,这时Rewrite功能就失效了,因为没有发生网络请求;通过No Caching 和 Block Cookies使网络请求每次都发生

Map Local应用

Map Local应用场景
修改js文件来改变App行为:
1. 使用No Caching 和 Block Cookies功能保证js文件通过网络请求加载到App
2. 使用Mirror功能把js文件保存到电脑上
3. 使用Map Local功能使App加载修改后的js文件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容