宝哥软件园

揭秘微信跳跳游戏插件

编辑:宝哥软件园 来源:互联网 时间:2021-12-11

WeTest 导读

张小龙:这款游戏发布后,其效果其实超出了我们的预期。我们开玩笑说这款游戏突然成为历史上用户规模最大的游戏,因为它的DAU大概有1亿,但同时也有很多外挂。没想到这么小的游戏居然有这么多外挂,朋友圈里的朋友得分也特别高,但我相信不是他。

1月15日,微信在广州举办了2018微信公开课Pro。张晓龙不仅当场玩了一个街舞游戏,拿下了900多分的高分,还特别提到了街舞游戏的外挂:

在Jumping这样的小游戏中,如果一个用户看到里面有一堆插件就拿了高分,并试图为其他每天练习的人提高自己的水平,他拿高分是不公平的,他可能没有动力继续练习,继续超越自己的最高分。因此,这样的行为,插件行为实际上会破坏整个系统的规则,使规则立即失效。

因此,在我们的小游戏发布后,我们开始花很多时间与插件做斗争。

基于学习技术的态度,我分析了目前比较流行的几个插件的源代码,总结了它们的一些破解思路。其实这些作者并没有恶意。作为一名程序员,还有什么比挑战规则、用技术突破极限更值得的呢?

一、梳理

跳跳游戏可以细分为距离判断和按压模拟两个步骤,有以下解决方案:

1.距离判断:

简单方案:像素点判断

高级方案:OpenCV图像分析

2.按压模拟:

简单方案:亚行/wda指令

高级方案:机械臂模拟手指点击(原创)

这里逐一介绍实现方法,很有意思。

二、距离判断

1.像素点判断

该方法采用了目前最流行的跳跃游戏:微信_jump_game的“辅助程序”。

揭密微信跳一跳小游戏那些外挂(图1)

如上图所示,我们首先定义了“棋子”和“棋盘”。要找到的两个目标点用橙色圆点标记。首先,我们可以通过这样做来判断棋子的目标点:

揭密微信跳一跳小游戏那些外挂(图2)

相关代码:

揭密微信跳一跳小游戏那些外挂(图3)

确定棋盘中心点的思路如下:

揭密微信跳一跳小游戏那些外挂(图4)

当然,还有其他方法可以最小化棋盘中心点的检测区域。这里简单介绍一下:

揭密微信跳一跳小游戏那些外挂(图5)

当然,如果只是跳到中心点,下一个棋盘中间会有一个白点,可以直接匹配中心点的颜色值,得到棋盘的中心点。这个情况基本准确:

揭密微信跳一跳小游戏那些外挂(图6)

相关代码:

>

但棋盘种类比较多,形状也各异,而且棋盘表面并非纯色,还有其他颜色,所以即使像素判断的代码里增加了很多特殊 case,依旧不能做到非常完美:

揭密微信跳一跳小游戏那些外挂(图8)

总结一下,目前这个方案基本没有太大问题,但如果跳一跳游戏把背景改成了非线性渐变,或随机飘落一些物体,或棋盘表面更加复杂,那这里的算法就基本不可用了。

2. OpenCV 图像分析

基于像素点的判断低效而且不够健壮,而利用 OpenCV 计算机视觉库则可以从图像分析层面进一步简化判断逻辑提升效率,首先采用该方法的跳一跳小游戏「辅助程序」来自 wechat_jump_jump。它是这么得到棋子的位置的:

揭密微信跳一跳小游戏那些外挂(图9)

相关代码:

揭密微信跳一跳小游戏那些外挂(图10)

接下来找棋盘的中心点,假如下一个棋盘存在白色的示意点,同样采用上面的模板匹配方法进行匹配,若匹配不上(匹配值小于某阈值,也许下个棋盘本身就是白色,所以灰度图分辨不出),则采用第二种方案:

揭密微信跳一跳小游戏那些外挂(图11)

这里是否准确的精髓就在于高斯滤波去除图像噪音的临界点以及 Canny 函数中阈值的设定,需要不断调整参数到最优状态。

相关代码:

揭密微信跳一跳小游戏那些外挂(图12)

三、按压模拟

1. adb/wda 指令

这两个分别是针对 Android 和 iOS 的命令行工具,可以将手机和电脑连接起来,并通过命令行发送指令,指令中就包含了屏幕的截图和按压模拟。不过 iOS 配置起来稍微麻烦一点,具体操作指引可以参考 这里。其核心的命令有:

揭密微信跳一跳小游戏那些外挂(图13)

当然,如果嫌配置麻烦,还可以通过 Android 的 AirDrop App 或 iOS 的 QuickTime 把手机屏幕投到电脑中,然后通过 Python 的 Pillow 库来截取投屏的内容,再做进一步的图像识别工作。

还有一点值得一提,按压时间这部分还是有优化的空间,前面提到了跳跃距离和按压时间基本是线性关系,但越到后面可以越发现,距离并非和按压时间绝对成线性比例,因为游戏本身不是一个纯 2D 的平面场景(2.5D),所以我们测量到的直线距离在 2.5D 场景中是有变化的,虽然影响不大,但在游戏后期棋盘越来越小,距离越来越大时,容易凸现出问题来,所以关于距离的计算有几种不同的解决:

揭密微信跳一跳小游戏那些外挂(图14)

拟合函数的细节可以参考:

1)https://github.com/metowolf/JumpJumpHelper

2)https://github.com/wangshub/wechat_jump_game/issues/744

3)https://github.com/wangshub/wechat_jump_game/pull/841

2. 机械臂模拟手指点击

本着学术探究的态度,结合之前折腾开源硬件的经历,所以也斗胆想给跳一跳小游戏增加一点动手环节,把触摸模拟这一操作通过机械臂来物理完成,于是在万能淘宝里淘了一个一百多快钱的机械臂和部分配件,自己编写了控制代码,把按压时间传输作为机械臂按下的停留时间,想法确定后便开始购置物品:

揭密微信跳一跳小游戏那些外挂(图15)

到货后折腾一两个晚上,最后成功搭建好了,大家看看效果(电容笔偶尔还是会触碰不良)视频链接:https://v.qq.com/x/page/s0532...

四、最后

反对一切使用外挂行为!

反对一切使用外挂行为!

反对一切使用外挂行为!

通过对外挂程序源码的研读,学习到了非常多创新的思维,这也算是外挂留给代码世界的果实。


关于腾讯WeTest手游安全测试团队腾讯WeTest手游安全测试团队从2011年初开始对手游安全领域进行探索和技术积累,旨在通过提前发现游戏版本的安全漏洞,预警风险,打造出业界领先的手游安全测试技术方案,在工具上已经支持所有腾讯在研和运营的手游项目。团队通过使用与正式服同样的游戏客户端和服务器,模拟外挂工作室制作外挂的过程,依靠自身的技术积累来提高专业程度,持续保持漏洞的发现率。

目前提供了专家测试服务,希望通过提前发现游戏版本的安全漏洞,预警风险,帮助提高腾讯游戏的品牌和口碑。

更多资讯
游戏推荐
更多+