游戏开发中防外挂的那些事儿

对于一个要上线的游戏,防外挂是必须的,历史上因为外挂而造成大量玩家流失的游戏数不胜数。随着游戏研发技术的发展,对外挂的预防业内其实做的已经越来越好了。下面总结一下防外挂的基础知识,以及我们的移动模块为防外挂做了哪些工作。

1 预防外挂的基础知识

在做外挂预防工作之前,我们要先了解外挂有哪些。根据我的了解,市面上常见的外挂主要有以下几种:

· 修改客户端的内存信息

这类外挂通过分析游戏所使用的内存,找到内存中的变量去分析猜测变量是代表的什么含义。由于客户端本身保存着很多游戏信息,比如技能cd、移动速度等。由于我们游戏技能的管理和发起是由客户端控制的,若外挂能去把技能cd改为了0,客户端就可以无限放此技能。

常见外挂工具:葫芦侠、八门神器

· 加速齿轮

加速齿轮可以加速某一个进程的时间流逝速度,通过加速齿轮,可以让游戏客户端进程的时间加速N倍。真实时间可能只过了1s,而客户端进程的时间已经过了Ns。通过加速齿轮,可以让人物移动速度加快、技能cd加速等。

常见外挂工具:加速齿轮

· 重发、篡改同步消息

此类外挂可以截获客户端发送给服务器的消息,然后进行篡改或者重发。比如可以截获一个释放技能消息,然后再无限重发给服务器,服务器若没有验证,就会无限执行技能。

常见外挂工具:WPE三件套(eg+wpe+ccp)

· 脚本自动模拟点击

这类外挂对游戏破坏相对较小,但是也最常见。这种外挂比较普遍,对游戏的影响主要是看游戏机制。比如我一个哥们弄了20多台手机,用按键精灵刷传奇世界手游的金币,然后卖给其他玩家。但是对于不能自由交易的游戏,就不会出现这种问题,最多是导致玩家自己使用,从而可以24小时在线,缩短了游戏寿命。

常见外挂工具:按键精灵(我感觉这东西都已经产生了一条产业链...

防外挂是一个系统工程,需要不同的模块配合实现。而且,对于不同的游戏对外挂的预防要求也是不同的,具体游戏需要具体分析。

常见的外挂预防手段有以下几种:

· 进程检测

游戏开始时检测手机正在执行的进程,若发现某个进程在黑名单上,则不能进入游戏。这种方式可以预防市面上常见的外挂,对于不常见的或者新开发的外挂则束手无策。若游戏不火没人玩,这个手段就够了。希望大家都能遇到针对自己游戏专门开发的外挂,哈哈。

· 行为统计分析

把玩家的行为(常常是点击行为)记录下来并进行分析。这种方式可以辅助检测玩家是否使用按键精灵这种工具。

· 内存、通信加密

之前介绍了外挂可能修改内存或者篡改同步消息以达到他们的目的,若我们对客户端的内存信息和通信信息加密,外挂拿到了信息也不能分析,从而也就无从下手了。

· 举报

moba游戏或者fps这种对抗性的游戏中,玩家使用外挂对手能明显感知到。对于这种游戏,举报机制是一个很有用的防外挂手段。

· 验证码

梦幻就有这个模式。

以上介绍的通用方法并不能解决所有的外挂问题,因此我们在游戏的逻辑实现过程中要需要做对应的防外挂机制。

在游戏逻辑实现中进行防外挂的基本方法是:

· 服务端保存验证信息

· 收到客户端发来的消息后,对消息的合法性进行验算。

在具体的游戏执行逻辑中增加防外挂机制的时候需要秉持一些原则:

· 保证外挂收益不抵支出

这个有两层含义,一层含义是要让外挂使用者无法获得收益;另一层含义是,卖QQ号码若外挂使用者只能通过非常麻烦复杂的工作才获得一些小小收益,那么这种情况我们可以放过,也就是说不需要对所有的情况都需要增加防外挂逻辑。

· 不影响游戏性能

在增加防外挂逻辑的时候,需要考虑为了防外挂增加的性能开销。若因为防外挂增加了巨大的性能开销,那么往往是不值得的。这种情况可以考虑不要在逻辑里面放外挂,而且是通过其他方式。

· 区分什么是不可信的,什么是可信的。

可信的不需要验证,不可信的选择性验证。在我们游戏里面,所有客户端发送的消息都认为是不可信的,所有服务端发起的调用都是可信的。比如在下面介绍的移动模块防外挂机制,当服务端的其他模块比如机关模块通知我的移动模块瞬移,这种情况我不考虑机关模块是否可能是被外挂操作了,我认为都是可信的。当然这个机关可能是被客户端操作,那么这时候客户端是不是用了外挂应该是由机关模块来判断和验证。

下文以玩家在客户端操作自己的单位移动为例,介绍移动模块为了防外挂做了什么工作。

之前写过技能模块的防外挂内容,大家可以阅读 《技能模块的防外挂机制和同步机制优化

2 移动模块如何防外挂

我们游戏的移动同步逻辑的基本原理是:单位在主控端(玩家自己的客户端)根据玩家输入执行移动逻辑,然后将位置点以及时间信息以一定的频率发送给从端,服务端以及其他客户端根据主控端发来的移动同步信息模拟、预测、纠正单位的位置。

基于以上同步机制,移动模块需要考虑三种外挂情况:

1.主控客户端伪造或篡改瞬移消息。

2.主控客户端修改本地内存中的移动速度。

3.主控客户端使用加速器

2.1防止客户端发送非法瞬移消息

由于我们游戏所有的移动都是在主控客户端发起和执行,然后服务端跟随,所以瞬移也是客户端先执行,然后通知服务端。

为了保证客户端不能发送非法瞬移消息,我们将瞬移流程定义为:由服务端发起、客户端执行、服务端再验证。

瞬移逻辑如下图所示:


1.服务端发起瞬移,但是并不将单位移动到对应位置,而是将瞬移信息发送给客户端。

2.客户端收到位移信息后,将单位移动到对应位置。

3.客户端发送一个瞬移消息给服务端,服务端收到后,将单位移动到对应位置。

基于以上瞬移流程,可以比较简单的实现瞬移防外挂功能。

1.服务端发送瞬移信息给客户端时,记录下来瞬移目标的位置。

2.服务端收到客户端的瞬移消息,进行以下验证:

   · 若服务端没有发送瞬移消息给客户端,则瞬移非法。
   · 若收到的瞬移位置与记录的瞬移位置不同,则瞬移非法。

基于以上流程,可以保证瞬移虽然是客户端执行的,但是仍然由服务端发起和验证。

2.2 检测不合理的移动速度

对于移动逻辑,还需要防止一种外挂:改内存中的移动速度。

对于这种外挂的预防,一般有两种:1.在客户端通过一定的加密手段使玩家无法找到移动速度,从而无法改变。2.服务端验证。我们使用的是服务端验证的方式。

服务端验证的基本原理:

当客户端发来一个移动消息时,服务端根据此条消息和上一条消息可以计算出来两消息之间的移动速度,然后根据服务端信息可获得对应时间的服务器认为可以达到的最高速度,比较后即可以验证。

其中服务端如何获得对应时间的允许最高速度是其中的难点。刚开始,我们使用的方式是记录每次移动速度改变的时间和速度值,当收到客户端消息时,根据客户端发送消息的时间去查该时间对应的速度值。

但这里有一个问题:当一个击飞事件移动速度改为300,击飞事件结束前又来了一个普通移动事件速度改为40,其实这时的移动速度其实是300,但根据我们的算法计算出来的是40.

因此,我们实现了一套基于改变移动速度事件的移动速度验证机制。我们并不记录速度改变得值,而是记录速度改变事件的开始&结束时间和速度值,因此每次需要计算某时间对应的速度时,根据速度改变事件的信息可以计算出准确的值。

2.3 检测加速器

游戏外挂最常见的就是加速器,在我们的游戏移动机制中,加速器可以让客户端的单位移动速度变快,而我们是将客户端单位位置同步给服务端,若服务端没有任何验证,则服务端就会跟随客户端位置,加速器外挂就会生效。

加速器外挂的原理是加快的客户端的时间流逝,因此,最简单的方式是当服务端收到同步消息时,从同步消息中拿出来客户端发送消息的时间,若客户端发送时间大于服务端当前时间(会加一个阈值),则认为是使用外挂。

游戏中有时间校准机制,当玩家短线重连时,客户端和服务端会重现校准时间,而校准后的时间由于网络延迟和网络波动问题,可能出现各种情况,包括客户端时间快于服务器时间。对于这种情况,会造成误判。

为了解决这个问题,我分析了加速器的特点。加速器会导致客户端时间持续不断的加快,并和服务器的差距越来越大。因此,我们使用以下验证机制,基本可以避免误判:

1.若客户端时间>服务端时间+[阈值],则[阈值] += (客户端时间-服务端时间)

2.第1步重复n次,n是我们给客户端出现异常的机会次数,我们游戏n=2。

3.若客户端时间>服务端时间+[阈值],则认为客户端是外挂。

通过这种方式,我们给客户端一次或者多次机会,对于加速外挂,它会导致客户端时间持续加速,最终使用掉所有的机会。而由于网络波动导致的客户端校准后的时间快于服务端时间的情况,不太会使用掉所有的机会。

当然,这种监测方案理论上仍然存在误判。但因为每次切换场景都会重置,当n=2时,经测试分析出现的误判情况极少。

若把n改成更大,会导致玩家进入一个新场景后,若加速倍率比较小,比如加速0.1倍,可以使用较长一段时间的加速外挂。

因此n的选择和初始阈值的选择都是一个权衡。

附:运维log可以检测加速器外挂的使用,但log更多的是检查,而不是预防。我们这里实现的是预防,保证玩家无法使用加速器获得任何收益。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40937.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏反外挂技术原理讲解

永远在路上 没有破解不了的反外挂系统,反外挂是一个对抗过程,需要不断升级。我们反外挂小组会采取对抗方式提升防御,也会研究竞品来获取灵感。反外挂也是非常有意思的,可以学到很多很多底层知识。 善战者无赫赫之功 反外挂&#x…

各网游的外挂是如何做出来的?

每一个致力于学习黑客技术的人,最后都分为三种人。 第一种:入侵,各种入侵,玩的就是入侵的快感,或者恶作剧的喜感,或者那种有特殊“窥视”癖好的人……别误会,小编我是喜欢“恶作剧,…

干货!什么是游戏外挂,外挂的种类及实现原理

外挂,原指一切用来破坏游戏程序正常游戏数据和逻辑的工具或破解版。比如可以修改游戏内存数据的修改器,又比如可以修改网络数据包的抓包工具。这类外挂或多或少会影响游戏的内存数据、文件数据、网络数据,甚至代码逻辑。 但随着外挂市场的发…

游戏外挂怎么做?

文章目录 1.什么是游戏外挂2.外挂的分类及实现原理2.1 辅助类外挂2.2 专用插件类外挂2.3 通用工具2.4 内存修改器2.5 变速器2.6 按键精灵2.7 模拟器2.8 破解版 转载自:Anti-Cheat Expert 游戏安全专家 干货!什么是游戏外挂,外挂的种类及实现原…

哈夫曼树 例题

假设某棵二叉树有N个叶结点。给定这些叶结点的权值,求所有可能的二叉树中带权路径长度(WPL)的最小值。 注: 结点的带权路径长度(WPL):结点的权值乘以该结点的深度(假设根节点的深度…

svn更新/提交代码提示错误 , 进行清理下“破除写锁操作“

1.如果svn提交或者更新代码有--进行清理下"破除写锁操作"--此提示,一般情况下右键,然后选择进行确定就可以 2.如果还不行的话,在项目下的 .svn 文件夹里面新建文件夹,命名为tmp,然后重新更新,提交,就会发现问题解决了

2022年深圳杯数学建模A题代码思路-- 破除“尖叫效应”与“回声室效应”,走出“信息茧房”

问题重述: 在全新的信息传播格局下,如何破除“尖叫效应”与“回声室效应”,走出“信息茧房”,是当前迫切需要解决的现实问题,即如何从信息传输的顶层设计、推荐算法的公平性和广大网络用户的责任担当等方面&#xff0…

钉钉最新点赞破除限制方法(

我不是标题党! 首先,放图片((( 时间这里是录视频的时间,2021-8-27,不是标题党! 上方法! 主要原理:利用抓包抓到的点赞api端口,实现持续点击或…

亚马逊云科技 Build On -Serverless低代码平台初体验-快速完成vue前端订单小程序

文章目录 一、我所认识的低代码平台二、Serverless的使用场景三、拖拉跩实现build on 的Serverless1. 使用图像界面创作方法2. 拖拉跩模块实现搭建3. 实时测试流程是否正确4. 最终的设计和流程图 四、创建端到端的基于vue的前端图形化界面六、总结与活动链接 一、我所认识的低代…

一小段Python代码,破解加密zip文件的密码

Python 有一个内置模块 zipfile 可以解压 zip 压缩包。先来测试一波:创建一个测试文件,压缩,设置解压密码为123。 import zipfile# 创建文件句柄 file zipfile.ZipFile("测试.zip", r) # 提取压缩文件中的内容,注意密码…

开源治理工具选一个

随着开源技术在云计算、大数据、AI领域的不断运用,不断破除技术壁垒,让企业快速建立自身的应用,在开源软件基础一,自主研发部分代码,便可以推出企业自身品牌的产品,开源技术的应用极大的推动了云计算、大数…

机器人微控制器编程(CoCube)-破除定势

从课程到生活; 从书本到理想; 从程序到生态; 从个体到集群; 从特殊到一般; 从传统到现代; 从技术到科学; 从理论到工程; 从基础到高阶。 …… 课程归根结底,是为学生服务…

复制浏览器html代码吗,网页文字不能直接复制?只需简单几招即可轻松破除限制,想学吗?...

原标题:网页文字不能直接复制?只需简单几招即可轻松破除限制,想学吗? 想必大家在网上都遇到这样的问题,网页文字受到限制无法直接复制,这该如何是好呢? 既不想登录注册又想直接复制走内容&#…

LR低代码快速开发平台 高效调整企业组织架构

组织架构以及围绕组织架构的设计、实施和变革,是企业管理永恒的话题,它上承公司的业务战略和运营模式,下接业务流程和信息系统建设,重要性不言而喻。数字化变革浪潮之下,商业模式的颠覆、价值链的重塑都需要由相匹配的…

自己动手写编译器:通过语法编译构建语法树并实现中间代码生成

上一节我们手动构造了语法树,然后调用各个节点实现中间代码生成。语法树的构建由语法解析完成,本节我们要完成语法解析逻辑,在语法解析过程中构造语法树,然后再像上一节那样实现中间代码生成。 这里我们再次回顾一下左递归&#…

安卓原神QQ机器人搭建教程

1,下载安装Termux 下载地址:https://f-droid.org/packages/com.termux/ 滑到下面点击这个 2,打开Termux,安装Ubuntu 安装模拟权限git,python,执行下面命令 pkg install proot git python -y 3&#xff…

如何在windows电脑上完成原神签到、祈愿抽卡分析等功能

一款开源的游戏辅助工具——原神助手。支持原神签到、祈愿抽卡分析、查看便签状态和游戏详细数据等。 开发者自述也是偶然间接触到《原神》,于是一发不可收拾,爱上这款游戏了。 在游戏中,如果要查看角色信息等内容,就必须需要登…

不同服务器的ps4账号吗,原神PC与PS4互通数据吗 不同平台数据互通分析

原神最近上线了pc版本,那么,你知道PC与PS4互通吗?这是很多玩家关心的问题,不同的平台,数据能否互通呢?比如说,不同平台是否可以一起玩,不同平台帐号是否可以切换,下面就为…

如何在 Mac 上玩原神?简单三步流畅运行

该方法也是本人一点点摸索出来的,花了很久,已经帮大家踩过坑了,该方法是最简单方便的,而且画质高、运行流畅,甘雨姐姐我来了~ 注意此方法只支持 M 系列芯片 一、安装 playCover github 源码地址 :https:/…

指令微调数据集整理

文章目录 开源指令数据集斯坦福数据链家数据Baize(基于少量种子问题的对话数据) 垂直领域数据集医疗领域的英文数据医疗领域的中文数据法律领域中文数据 COIG数据集(可商用的中文数据集) 开源指令数据集 斯坦福数据 斯坦福52K英文指令数据:…