前言
最近某团搞活动,刚好挖一下,看到这个“袋鼠快跑”游戏就忍不住玩了一下…
游戏规则
先熟悉一下游戏规则,这个小游戏主要的目标是升级车辆等级,玩法如下:
1、购买车辆,购买后车辆会出现在格子里面
2、将相同的车辆合成新车(升级),比如两个6级车辆合成7级车辆。
3、将车辆放入跑道,每跑一圈会获取相应的金币,金币用来买车。
4、购买车辆时只能买低于当前最高等级4级的车辆,比如16级,只能购买12级车辆。
自动化游戏
明白规则以后,我们就可以确定这个“外挂”的功能了,预期实现功能如下:
1、购买可以购买的最高等级车辆
2、将车辆升级
3、将车辆放入跑道。
自动化买车
那么我们一步一步进行实现,首先抓取购买车辆的数据包如下:
1 | POST /api/player/buy_car HTTP/1.1 |
数据包中的level指的是购买车辆的等级,pos表示购买后的位置,这个位置不用管,测试发现pos不影响买车。
那么我们需要知道当前车辆最高等级是多少,然后去购买车辆最高等级-4级的车辆(PS:也可以一直买低级车合,但是这样升级速度太慢)。
问题来了,现在需要知道当前车辆最高等级是多少,那么继续抓包,找到获取车列表的数据包,然后将里面的最大等级的车取出就可以了。
反复测试后发现,只有登录时的报文里面会显示车列表:
1 |
|
分析返回包,其实返回的车列表很详细:
那么接下来,实现买车的功能:
自动化合车
买了车以后,需要做的是将车合成高级车,这里我们为了方便理解,先假设目前的车辆状况如下:
8级车停在1号车位,8级车停在2号车位,7级车停在3号车位,7级车停在4号车位,7级车停在5号车位。
合成高级车其实就是把两个相同等级的车拖到一块就可以了,比如把2号车位的车拖到1号车位与1号车位的车合成,则会生成一个9级车。
于是抓包,合车的数据包如下:
1 |
|
那么要想完成合车的操作,就要先获取相同车的位置,我是这么实现的:
然后合车函数进行:
还有处理合车的函数:
将闲置车辆放入跑道
将车辆放入跑的数据包为:
1 | POST /api/player/run HTTP/1.1 |
实现这个可以直接遍历列表盲放入,也可以判断哪些车没在跑道就放入,我们用后者实现,效率较高。
还是先获取carList,看哪些车未在跑道,然后将车放入跑道,实现如下:
总结
到此,所有功能都已经实现了,只要在主函数中一个死循环不断调用上面的函数即可。
运行效果如下:
最后
大家好,我们现在创建了“川云安全团队”公众号,很多好的文章都在该公众号上发表,欢迎大家关注我们的公众号。