目标
趣键盘
App有很多任务:
- 每日签到
- 每小时签到
- 打字赚钱
- 每日任务完成额外奖励
- 进阶任务完成额外奖励
目标是:把每日任务完成额外奖励
全部拿到手
其实任务没有全部完成,所以拿满分
纯属噱头
每日任务第1部分
:100 + 500 + 800 = 1400
每日任务第2部分
:128 + 28 + 99 + ... + 300 = 1127
如下图:
测试环境
App: 趣键盘
V1.25 iOS
抓包: Charles
背景: 读者会抓包,修改响应数据
解决
通过抓包修改响应数据来达到目标
接口:https://api.qujianpan.com/gk/home/info
响应:
{
"code": 200,
"message": "成功",
"data": {
"balance": 11829,
"daily": {
"packs": [{
"id": 9,
"termLimit": 2,
"prize": 100,
"openPackage": false
}, {
"id": 10,
"termLimit": 5,
"prize": 500,
"openPackage": false
}, {
"id": 11,
"termLimit": 9,
"prize": 800,
"openPackage": false
}],
"finishNum": 1,
"maxNum": 9,
"infos": [{
"id": 13,
"prize": 128,
"title": "领三次打字金币",
"subTitle": "领取打字金币",
"finishNum": 0,
"maxNum": 3,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 10
}, {
"id": 20,
"prize": 28,
"title": "玩一次套红包",
"subTitle": "玩套红包",
"finishNum": 0,
"maxNum": 1,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 35,
}, {
"id": 26,
"prize": 99,
"title": "分享我们给好友",
"subTitle": "将趣键盘分享给好友",
"finishNum": 0,
"maxNum": 1,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 46,
}, {
"id": 27,
"prize": 100,
"title": "看小说十分钟",
"subTitle": "看小说10分钟",
"finishNum": 0,
"maxNum": 1,
"duration": 10,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 13,
}, {
"id": 15,
"prize": 128,
"title": "看资讯十五分钟",
"subTitle": "看资讯15分钟",
"finishNum": 0,
"maxNum": 1,
"duration": 15,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 12,
}, {
"id": 21,
"prize": 108,
"title": "看小视频五次",
"subTitle": "看小视频5次",
"finishNum": 1,
"maxNum": 5,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 8,
}, {
"id": 23,
"prize": 68,
"title": "看视频十分钟",
"subTitle": "看视频10分钟",
"finishNum": 0,
"maxNum": 1,
"duration": 10,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 27,
}, {
"id": 17,
"prize": 168,
"title": "玩爆款小游戏",
"subTitle": "玩爆款小游戏15分钟",
"finishNum": 0,
"maxNum": 1,
"duration": 15,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 24,
}, {
"id": 24,
"prize": 300,
"title": "玩大转盘一百次",
"subTitle": "玩大转盘100次",
"finishNum": 100,
"maxNum": 100,
"status": 3,
"watchVideoFirstGot": false,
"taskId": 16,
},
"newTasks": [],
"advanceTasks": [],
"moreTasks": [],
}
}
["daily"]字段就是每日任务完成额外奖励
的数据
["daily"]["packs"]字段就是每日任务第1部分
的数据
["daily"]["infos"]字段就是每日任务第2部分
的数据
先来解决每日任务第2部分
,这部分又分2种:
- A: 领三次打字金币、玩一次套红包、分享我们给好友、看小视频5次、玩大转盘一百次
- B: 看小说十分钟、看资讯十五分钟、看视频十分钟、玩爆款小游戏15分钟
每日任务第2部分-A
每日任务第2部分-A
拿一个任务来分析
{
"id": 13,
"prize": 128,
"title": "领三次打字金币",
"subTitle": "领取打字金币",
"finishNum": 0,
"maxNum": 3,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 10,
"coinTask": {}
}
关注["status"]字段
"status": 1 '去完成'
"status": 2 '立即领取'
"status": 3 '已领取'
把["status"]字段从1修改为2,就可以点击领取了
Charles修改响应的规则如下:[命名为status
]
每日任务第2部分-B
每日任务第2部分-B
拿一个任务来分析
{
"id": 15,
"prize": 128,
"title": "看资讯十五分钟",
"subTitle": "看资讯15分钟",
"finishNum": 0,
"maxNum": 1,
"duration": 15,
"status": 1,
"watchVideoFirstGot": false,
"taskId": 12,
}
把["status"]字段从1修改为2 的方法对每日任务第2部分-B
没有效果
关注["duration"]字段
把["duration"]字段从15修改为0,就可以点击领取了
Charles修改响应的规则如下:[命名为duration
]
每日任务第1部分
把上面的修改规则全打开:status
、duration
,这部分任务不需要做什么,就可以点击拿积分了
操作过程
- Charles: 把修改规则全打开:
status
、duration
- 趣键盘App: 点击界面上相应按钮,领取积分
- done
个人感觉趣键盘
App的api设计比其它App安全些:
- 有nonce[一次性]概念,因而不能重放请求
- 领取积分的数据都是加密的
其它解决方法 - Mitmproxy
如果不用Charles,可以用Mitmproxy,代码如下
from mitmproxy import ctx
import json
def request(flow):
pass
def response(flow):
url = 'https://api.qujianpan.com/gk/home/info'
if flow.request.url.startswith(url):
text = flow.response.text
data = json.loads(text)
ctx.log.info(text)
items = data['data']['daily']['infos']
for it in items:
it['status'] = 2
if it.get('duration'):
it['duration'] = 0
flow.response.text = json.dumps(data)
把上面的代码保存文件中,比如取名叫qujianpan_mitm.py
运行:
mitmproxy -s qujianpan_mitm.py
Mitmproxy可以参考
和Charles同样强大的iOS免费抓包工具mitmproxy
结果是怎么来的
怎么知道如下的结论:
"status": 1 '去完成'
"status": 2 '立即领取'
"status": 3 '已领取'
尝试[实验]得到的结论,多多尝试吧
其他帖子
一站到底-成为东方头条App站神
https://www.52pojie.cn/thread-954128-1-1.html
趣消除App自动签到和大转盘、东方头条App自动签到和金币成熟-自动化
https://www.52pojie.cn/thread-923040-1-1.html
Charles的应用
https://www.jianshu.com/p/b668bbb0cc82