前言

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

成果

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

准备工作

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

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

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

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

1. 安装node.js2. npm i -g anyproxy3. 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个不过分吧!有好心能请我喝杯咖啡那就万分感谢了。>.<
如有在尝试的时候碰到问题,也可以加本弱鸡的wx: lyh2668

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

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

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

  1. “头脑王者”爆红被封,微信小程序迎来蛮荒期

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 1月30日晚,当我闲来无事顺手拉开微信小程序的顶部界面,点击了"头脑王者" ...

  2. 基于Python的头脑王者脚本(纯娱乐)

    最近在玩头脑王者,已经王者啦- 这里写个头脑王者的脚本玩玩 思路: 抓取手机端游戏截图 -> ocr提取图中的题目 -> 通过百度搜索,匹配答案中在页面出现次数最多的答案 正确率实在不咋地 ...

  3. 头脑王者服务器维护,头脑王者服务器

    头脑王者服务器 内容精选 换一换 有以下几种现象:将制作好的SD卡插入开发者板并上电后,开发者板LED1与LED2灯状态信息异常.将制作好的SD卡插入开发者板,并通过USB方式连接Ubuntu服务器, ...

  4. 头脑王者对战游戏html5源码,头脑王者分析笔记及微信小程序解包源码

    最近感觉微信小程序比较火,周围很多人在玩"跳一跳"和"头脑王者"之类的小游戏. 对于小程序我也产生了浓厚的兴趣. 一开始看到官方的小程序的介绍,也看了小程序的部 ...

  5. 头脑王者服务器维护,微信头脑王者请求超时及查询服务器失败的解决方法

    微信头脑王者你们知道吗?不知道也没有关系哦,以下内容是微信头脑王者请求超时及查询服务器失败的解决方法,一起来学习吧! 头脑王者请求超时怎么解决? 1.最常见的就是wifi网络环境下出现这种情况,这是因 ...

  6. 微信小游戏《头脑王者》答题辅助脚本

    继微信跳一跳之后的又一个小游戏头脑王者又火起来了,相信不少人也都想重蹈跳一跳的过程,再次写一个辅助脚本. 上一波图吧! 上代码: # _*_ coding:utf-8 _*_ import io im ...

  7. 头脑王者服务器维护,头脑王者请求超时怎么解决 头脑王者查询服务器失败怎么回事...

    类型:社交聊天大小:2.3M语言:中文 评分:3.3 标签: 立即下载 微信自从更新升级后,小程序就更多,很多伙伴在头脑王者,这是一款知识竞赛的软件,最近有伙伴反映玩头脑王者的时候出现请求超时和查询服 ...

  8. 浅析微信头脑王者答题小程序源码功能模块与价格之间关系

    随着移动互联网的发展,微信小程序开发日渐成熟.答题小程序头脑王者源码的出现大大的方便了人们的生活.也为部分企业带来了很大的利益,正是因为这样越来越多的企业都会选择去开发一个微信答题小程序自己以来更多的 ...

  9. 头脑王者小程序开发源码分析

    我们都知道最近很火的"头脑王者",虽然是一款"益智答题类"小程序,但它身上却明显带着不少"游戏"的基因. 1.强调对战:和单机闯关类答题产品 ...

  10. 头脑王者_头脑令人困惑

    头脑王者 I get some odd email, but tonight's really takes the biscuit - sent to my business email addres ...

最新文章

  1. 反距离加权法高程_干货:企业估值的收益法、成本法和市场法
  2. 智能电源分配PDU应用
  3. JS判断是移动端还是电脑端访问该网站
  4. IOS学习之蓝牙4.0
  5. vs2019中如何创建qt项目_在VS2015中创建Qt项目【VS+Qt项目开发系列】(二)
  6. Java static 静态代码块、代码块
  7. 一文搞懂IT基础知识,讲通HTTP、TCP、IP、以太网
  8. 深入浅出VC++串口编程--基于Win32 API
  9. 《Design patterns》读书笔记
  10. java内存管理之内存模型
  11. Linux下的高级文件权限ACL
  12. librdkafka介绍文档
  13. php 判断是否ipv6,PHP IPV6正则表达式验证代码
  14. 说说VNode节点(Vue.js实现) 1
  15. Android客户端和服务器端数据交互的第四种方法
  16. awg线径与电流_AWG电流线径对照表
  17. python属于汇编语言还是高级语言_python语言属于汇编语言吗?_后端开发
  18. 基于Java的愤怒的小鸟游戏的设计与实现
  19. mashang6.edu.cn
  20. 端口映射软件有什么用怎么用

热门文章

  1. 如何破解加密PDF文档
  2. 记录一下 MacBook 中 texlive 的安装路径
  3. 笛卡尔心形函数表达式_笛卡尔爱心函数表达式 笛卡尔形式
  4. DTCC技术大会来了
  5. 安川e1000中文说明书_安川(YASKAWA)变频器E1000说明书.pdf
  6. malloc函数java_malloc函数详解及用法举例
  7. 让你的PPT更出彩的时间轴这样画!
  8. matlab将矩阵分解成lu,MATLAB中矩阵LU分解
  9. ios 融云 重写对话列表_iOS开发融云即时通讯集成详细步骤
  10. kmeans聚类算法如何选k值?