【科普】为什么LOL等MOBA类网游很少有外挂?外挂、脚本、BUG有什么区别?

您所在的位置:网站首页 moba类fps游戏 【科普】为什么LOL等MOBA类网游很少有外挂?外挂、脚本、BUG有什么区别?

【科普】为什么LOL等MOBA类网游很少有外挂?外挂、脚本、BUG有什么区别?

2024-07-03 10:01| 来源: 网络整理| 查看: 265

最近看到了一个 LOL 的 BUG 集锦视频,评论和弹幕有很多人在刷曾经遇见的外挂,然而实际上 LOL 等 MOBA 类网游几乎是没有外挂的。

作为一款已经运营了近十年的现象级网游,LOL 从未像绝地求生、H1Z1 等游戏一样被外挂推上风口浪尖,十年来鼎盛时期的 LOL 热度完全可以比肩如今的 PUBG,其外挂市场与吃鸡相比也应该有过之而无不及,但这么多年来,外挂仿佛只存在于人们的口口相传中,至少我从未亲眼见过。

回想当年 LOL 开测宣传的时候,“无外挂”是 TX 重点宣传的特色之一,难道鹅厂的反外挂能力真的有这么强,能做到几乎完全杜绝外挂吗?考虑到国内外挂作者在吃鸡中上天入地的神仙能力,这显然是不现实的。实际上,这一类游戏没有外挂的原因,是外挂作者根本无从下手。

LOL 官方的悬赏寻找外挂活动

本文就将用尽量易懂的文字简单地科普一下这一类游戏没有外挂的原因,学疏才浅还请轻喷。

外挂、脚本与BUG

通常将玩家电脑上运行的游戏程序称为客户端。

首先我们当然要先明确何为外挂。游戏外挂没有权威的定义,但核心有一点,就是通过对本地的客户端游戏程序进行攻击、破解,修改数据等来谋取利益:例如吃鸡的“锁血”外挂,很可能就是通过对游戏程序的数据进行修改来实现锁血等等影响竞技公平的效果。又如一些 RPG 游戏的外挂,攻击破解游戏程序,修改角色伤害等等数据起到各种效果。还有一部分网游外挂通过代替或伪装客户端程序向游戏服务器发送恶意数据来实现。

举个简单的栗子,某技能的 CD 为 5 秒,每次按 R 发动技能客户端都会向服务器发送一条“RUA!”的消息,随后技能就可以成功释放。但是无论你以多快的频率按 R ,客户端都设定为每 5 秒才响应你一次。这时,外挂程序便可以通过攻击客户端程序,把“5秒”这个数值改为“0.01秒”;也可以通过截获客户端发送消息的目标地址,自己伪装成客户端程序不停的发送“RUA!”的消息,实现无 CD 的效果。

而脚本则指的是辅助甚至代替玩家进行操作的程序,其与外挂的的区别就在于不对游戏程序进行攻击,例如 LOL 等游戏的鼠标宏、连点器等,以程序代替玩家迅速完成一系列键鼠操作;或者早些年射击游戏中一些实现手法比较拙劣的“锁头挂”,在游戏画面中寻找角色头部图像并自动将鼠标移动至合适位置。这些程序本身不会攻击破解游戏程序,不修改程序的各种数据,仅仅代替玩家完成操作。当然不可否认的是使用脚本也会对游戏环境(特别是竞技类游戏)造成恶劣影响。

BUG 即游戏程序的漏洞,与外挂相似的一点是通常游戏程序本身的数据都有一定的异常,但区别在于这些异常是游戏程序在无恶意攻击的情况下自发出现的,是可遇不可求的。BUG 的范围很广,大多数 BUG 往往都只是低概率地随机触发、且只简单的影响游戏体验(此处@某游戏公司),如卡出地形等。而有些 BUG 则能够 100% 复现且能被玩家利用而获取利益,最常见的例如许多游戏中都曾有过的卡箱子(或仓库等)双倍刷物品,许多枪战网游中都存在的“卡地形”类 BUG,即通过一定操作将游戏角色的位置移动到地形障碍(如箱子、墙、岩石)的内部,实现躲避攻击等等目的。像这样恶意利用 BUG 影响其他人游戏体验的行为毫无疑问也是可耻的。

某手游的卡地形BUG(图源百度)

而在一些 LOL 视频中许多看似外挂的操作,其实大部分都是出现在测试服、由于 BUG 引起的,测试服的游戏版本未经过完善的测试,因此更容易出现 BUG。这其中较为有名的有火男1级平A变大招、乌迪尔1级秒人等等。 

无论是什么类型的游戏,其开发过程都很难做到万无一失,少量 BUG 的存在是比较正常的事情,在各网游官网的版本更新日志中也能够看到开发商不断修复 BUG (以及制造BUG)的公告(如下图)。只不过大多数的游戏 BUG 数量、触发几率和影响范围都较小,而且负责任的开发商也会对玩家反馈的 BUG 及时修复,因此只会小范围、小幅度的影响游戏体验。

LOL版本更新公告中的 BUG 修复条目“零外挂”的原理

了解了外挂及其工作原理,为了回答开篇的问题,我们还需要了解 LOL 中一局游戏的流程。

通常一场 LOL 对局涉及 10 位玩家,再将为玩家们提供服务的服务器抽象为一台设备,可以认为共有 11 台设备参与。

11 台设备(图标源:findicons.com)

在游戏过程中,玩家的所有操作,例如技能释放、物品购买、移动,甚至细化至鼠标和键盘的具体操作,都将由客户端程序通过网络发送至游戏服务器。服务器获取到了所有玩家的操作序列后,会根据游戏逻辑进行计算,如检验操作序列是否合法、计算游戏中一些数据(例如位置、血量、金钱、英雄属性等等)的变化等;随后再将更新后的游戏数据发送回每一位玩家的客户端程序。玩家的客户端程序获取到服务器发来的数据后,经过一些简单的处理,就会根据最新的数据渲染出玩家所看到的游戏画面。在这个过程中,数据在玩家与服务器之间的来回传输消耗的时间就是游戏的延迟(Ping)。

过程示意图

这个过程与大多数网络游戏基本一致,但有一点非常重要的区别:LOL 中对游戏数据的所有的计算都是在服务器中进行的,客户端中不进行任何计算;而玩家电脑上的 LOL 客户端,只负责向服务器发送玩家的操作数据,以及根据服务器发回的数据渲染画面。这样的特性通常被称为“强服务器逻辑”。除了网游外,一部分宣传“零外挂”的单机游戏对战平台也是采用这样的逻辑计算方式。

说到这里,外挂难以起效的原因也已经比较明显了:在玩家电脑上运行的外挂,只能对玩家电脑上的游戏客户端程序进行破解和修改,而对服务器端则根本无可奈何。对于几乎只负责通信和显示的客户端程序,无论如何修改其中的数据,其起效范围都仅限于玩家自己的设备而已,仅仅是掩耳盗铃,对其他玩家来说没有任何实际效果。例如,早些年某知名工具提供的“皮肤体验”功能,其实就是在本地修改了客户端程序的数据(有可能仅仅通过替换文件实现,没有修改客户端数据),因此同一房间中的其他玩家无法看到其效果。

再回到上一节中“RUA!”的栗子,如果前述游戏升级为了“强服务器逻辑”,此时在客户端程序中“5秒”这个数值就不复存在了,如果有也只是用作显示而已,修改它也将没有任何的意义。而第二种实现无 CD 的方法,即不断向服务器发送“RUA!”的信息,也将失去效果:由于检验技能是否冷却完毕的计算完全位于服务器中,因此客户端将不会再向服务器发送“玩家成功施放技能”的信息,而只会发送“玩家请求释放技能”的请求信息,这样无理的请求自然会被服务器拒绝,不断发送请求信息也只相当于不断按下 R 键,没有任何效果。

正因如此,像在 LOL 中秒杀防御塔、把双抗改到999、锁血、无限金钱等等这些传说中的神仙外挂,其实从理论上来讲根本就没有可能存在,至多利用服务器端的 BUG 来实现一些类似外挂的效果。而且在 LOL 这样一款玩家众多、强调竞技公平的游戏中,如此严重的 BUG 一旦被发现立刻就会被反馈到开发商处,在正式服中很难长久的存在,在测试服中倒是有高一些的概率出现严重的BUG,尽管预防和发现 BUG 本身就是测试服的意义所在。

LOL 中 BUG 画面(视频链接在文末)

相应地,如果对游戏逻辑的计算全部放在本地的客户端中,只将计算结果汇报给服务器、服务器作弱验证甚至不验证后就会接受并转发给各个玩家,则叫做“客户端逻辑”。显然,这样的网游非常的不安全,极易遭到外挂的攻击,外挂程序只需要破解掉本地的客户端程序肆意修改数据,就能在游戏中为所欲为了。实际上几乎没有网游采用这种不安全的计算方式。

局限性

这样的计算方式并没有被所有网络游戏采用,说明其一定存在着相当的局限性。

部署这样的计算方式,首当其冲的就是服务器资源。客户端逻辑相当于将每位玩家的电脑都用作算力来进行游戏逻辑的运算,庞大的运算量被分散到了众多玩家的电脑中,极大的减轻了服务器的压力;而像 LOL 这样的计算方式,则将全部运算量都包揽到了服务器上,不仅计算资源消耗巨大,资源消耗随着玩家数量增长而增长的幅度也非常大。

显然游戏的数据量越大,服务器资源消耗越大,这也是为什么 FPS/TPS 等游戏无法采用这种方式彻底杜绝外挂的原因。吃鸡类游戏、FPS/TPS游戏中数据量庞大、数据变化快,且吃鸡类游戏还要同时维护多达百人的游戏同步,将逻辑计算和数据合法性验证交给服务器会带来极大的资源消耗,同时也会对服务器和玩家的网络速度有过高的要求,没有选择采用这样的方式也是无奈之举。而像 LOL、Dota2、王者荣耀这样的游戏,数据量合适,便可以采用这种方式,从根源上杜绝大部分的外挂。

而大多数的游戏采用的方式都是将部分逻辑放在服务器计算、部分逻辑放在客户端程序计算,并在服务器端对客户端发来的结果进行多重验证防止恶意修改。无论如何,客户端程序都是完完全全任由玩家的外挂随意宰割的,即使采用多种加密和保护措施,也只能不同程度的拖慢被攻破的速度,很难从根本上避免被修改;服务器端的验证也无法做到滴水不漏。因此,无论怎样防护,这样的游戏理论上都有制作外挂的可能,尤其是吃鸡这种人气的游戏,外挂市场极为庞大、外挂作者也为数众多,开发商的防护强度和更新速度难以应对如此众多外挂团队的不断破解,自然造成了外挂肆虐的局面。

一些例外

外挂虽然无法对保存在服务器上的数据进行修改,但也许可以帮助玩家利用服务器的BUG,例如 LOL 中曾经盛传的“炸房挂”。虽然没有亲身遭遇过这种神器,但我个人还是倾向于认为所谓“炸房”应该仅仅是由于服务器宕机或卡顿导致的、不可由玩家主动触发的效果,导致“炸房”发生时的优势方怀疑对方破坏竞技公平而以讹传讹神化出的存在。但不可否认,从理论上其的确有可能是通过向游戏服务器发送一些非法数据主动触发或利用服务器漏洞使其崩溃宕机而实现的,只不过技术上的难度较大,且其还是完全依赖服务器只会短暂存在的 BUG,难以持续存在。

此外,前面提到王者荣耀也可以采用这个模式(具体是不是我并不确定),但前不久王者荣耀“全图挂”(即能够实时看到全部敌方英雄的具体位置)也传的沸沸扬扬。个人猜测,王者荣耀可能是由于无战争迷雾模式的存在,使得服务器发送给客户端的数据实际包含了每个英雄的位置信息,而在有迷雾模式下开发商偷懒只在客户端对敌方英雄做了隐藏,被外挂作者发现后便针对性的做出了这样一款外挂。不过大家不必担心,如果王者荣耀的确采用了这个模式的话,只需要做一些简单修改就可以从根本上杜绝“全图挂”的出现,而不会像吃鸡一样游戏版本反复更新外挂却一直存在。

科普就到这里,由于 up 并不是游戏行业的从业者(更不是外挂行业的从业者),对提到的一些游戏也没有非常深入和完备的了解,文中难免有所疏漏,还请大家轻喷多多指正。

全文原创,希望转载注明出处。最后跟大家分享一下我看到的这个视频。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3