我是如何次次《头脑王者》获得满分的

前言

最近答题类的应用实在是太火了,什么冲顶大会、百万英雄啊,动不动就几十上百万的奖金,着实让人看着很是眼红...然后本弱鸡学疏才浅...题目全靠蒙,便不凑什么热闹了。之后没过几日有个小程序倒是在办公室里面火了一把,就是这次需要拿来开刀的《头脑王者》,其实也是个答题的小程序,所以还是不擅长就是了。虽然我不擅长答题,但我好歹是个程序员呀,所以我走上了一条程序员的通顶之路...

成果

每轮游戏需要答5题,全对并且快速作答才能拿到满分,满分是1200分。有了这种战绩,世界第一不是梦!当然玩游戏是为了乐趣,本弱鸡只是出于兴趣使然,这种答题类的游戏还是自己玩比较有意思。

准备工作

在开始写这种游戏的辅助之前先思考几个问题。

如何伪造接口请求?
如何实现精准答题?
如何完成自动答题?
如何伪造接口请求?

首先小程序的接口请求都是基于HTTPS的,具体捕获Https的方式我这边还是采用Anyproxy去捕获,需要安装对应的Https证书才可以。之前的文章也有提及,这里再赘述一遍。

本文采用的Anyproxy,使用其他的代理工具也是一样的。

1. 安装node.js
2. npm i -g anyproxy
3. anyproxy-ca // 生成证书
4. anyproxy -i // 以代理https的方式启动
// 然后手机端配置代理的IP及PORT,默认端口为8001,
// Anyproxy的WebService的默认端口为8002,这里可以查看到接口
// 手机端配置代理以后需要下载证书并信任,
// 苹果端的可以在手机的Safiri里面输入xxx.xxx.xxx.xxx:8002/fetchCrtFile的方式下载到证书
// 高版本的iOS可能需要在两处地方信任。

配置完以后,打开游戏就能抓取到头脑王者对应的请求包了。我先模拟了一次好友对战,然后需要分析了哪些包是需要的。这里我就直接把一些重要的接口给贴出来了

login接口(登录接口,这里重要的信息是uid和token)
intoRoom接口 (进入房间的接口)
beginFight接口 (开始对战接口)
findQuiz接口 (找题目接口)
choose接口 (答题接口)
getResults接口 (获取比赛结果的接口)
leaveRoom接口 (离开房间接口)

先从接口看一下,这是一个非常顺畅的游戏流程,但是拿到这些接口我就可以开始为所欲为了吗?显然是不可能的,如果每个人都能有权限肆意使用别人的接口的话,岂不是可以很轻松的做到DDoS攻击或者很轻松地获取到自己想要的信息了吗?对于一家有经验的公司来说显然是不会犯这种错误的,那么我随便拿一个接口来稍作分析。

上图是天梯排位匹配接口,从Body中可以看到需要传给服务端matchId、npcId、uid、t、sign五个参数,这5个参数都是必须的,只有有一个参数出错,那请求就无法成功,前四个其实好理解,关键是第五个签名参数sign,是怎么来的呢?
这里就需要用到逆向工程了...简单的描述就是...拿到小程序中头脑王者压缩后的源码,并分析出其中的加密规则,篇幅有限,这里就直接描述其加密规则了。

sign的生成规则:Body内所有的参数(除去sign)+ token(login接口获取)并按照key值排序以后对齐进行MD5加密,
比如uid=111, t=222, token=333,那么加密前子串应为t=222token=333uid=111
既然sign也有了,那其实就很简单了,然后我就用node写一个简单的client去做伪造了接口请求。

如何实现精准答题?

目前也有许多冲顶大会、百万英雄的辅助,他们的思路是答题的时候快速识别到题目并进行快速的搜索题目进行辅助答题,但对于这款游戏,如果想实现精准的答题的话,最好的办法就是匹配题库,那么问题就是题库怎么来?当然是通过爬虫去爬取的了,OK...来让我们找一找题库的接口!显然这是不可能的!要是对外开放了题库的接口,这个游戏也太容易被攻破了把。但是从上述的一步中,其实我们已经实现了开房模拟对战了,那么是不是可以一直开房间一直对战的方式获取到题库呢?所以我这里采用的就是这种思路。

success是脚本自动答题打对的题目(一共5题),total是总共的题库数量。从这个规模可以看出来,正确率已经是极高的了,说明题库的数量应该估计只有17000左右的范围,但是由于剩下的题库仍然在补充且最后的10%会需要较大的成本才能覆盖到,其实题库做到这一步已经足够了,80%+的满分概率...几乎已经是无人匹敌了吧?
如何实现自动答题?
自动答题的方案有两种:

类似跳一跳游戏,通过截屏=>OCR读取题目=>匹配题库=>模拟点击答案

Anyproxy代理,写rule文件修改请求,捕获findQuiz请求接口,server重新发起请求并等待数据返回=>判断返回的题目是否已经存在于数据库=>匹配答案直接作答或返回题目

本弱鸡在这里使用的就是第二种方案(具体实现就不赘述了,大家可以直接看源码)

总结

不太善于写文章,上述很多步骤都简单带过了,在这里只是简单地描述了一下过程,然后我会开源这部分的代码,写得有些简陋希望各位大佬们不要嘲笑(由于在写Anyproxy的rule的时候没法使用babel,所以我用require取代了import)。最后希望大家能给与我一点支持及肯定,给点star吧...只要10个不过分吧!有好心能请我喝杯咖啡那就万分感谢了。>.<

项目地址GitHub: 头脑王者辅助

本文作者:lyh2668
原文地址:我是如何次次《头脑王者》获得满分的-实战教程-小程序社区-微信小程序-微信小程序开发社区-小程序开发论坛-微信小程序联盟

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

推荐阅读更多精彩内容