防止非官方客户端参与网络游戏的技术?


22

在多人网络游戏中,存在哪些技术可以尝试确保用户与官方客户端应用程序连接,而不是与某些被黑客入侵的客户端应用程序连接?

我意识到可能没有确定的方法可以做到这一点,但是我对可以用来减轻问题的技术很感兴趣。

我对可以用于基于Web的游戏的任何技术特别感兴趣,但是我想大多数可以普遍应用。

谢谢!


一些人认为通用云游戏指日可待。它完全解决了这个问题。
Laurent Couvidou 2012年

Answers:


13

这是一个有趣的问题,但是我认为您在这里问错了问题。让我从检测被黑客入侵的客户端方法开始:

如果您的客户端是在用户端执行的,则他可以使用您的代码执行他想做的任何事情(直到这对他来说太复杂了,但总会有人更聪明)。您可以做的所有事情,例如在客户端和服务器之间对消息进行硬编码加密,创建客户端证书,甚至使客户端计算其校验和,只要有足够的时间,都将被反编译和破解。我曾经看到过软件加密狗随附的软件,该软件加密狗具有应用程序代码的一部分,但是为了能够执行它,软件加密狗首先检查了该应用的crc,如果它没有调温..当然,一段时间之后,软件加密狗被黑了同样,如果您进行软件更新,则需要重新发送加密狗。

除此之外,用户还可以使用自己的客户端进行欺骗-例如,通过模拟鼠标的移动和点击来进行欺骗。

所以问题应该是-如何检测机器人玩家?

在这里,您有几个选择-测量单击之间的时间,测量鼠标移动的速度-鼠标是否从A点精确地移动到B点多次并击中了相同的坐标?用户移动是否可以重复?如果当用户正在收集的资源耗尽时,用户是否要执行其他操作还是要在原地等待数小时?最终,您最终要编写模式识别代码。


4
您的漫游器检查技术可在几分钟之内被击败,并在漫游器操作周围增加一些噪音。
AsTeR 2012年

对此+1 鉴于预防是不可能的(并且如果真的确定某个人,他们甚至可以进一步破解他们的驱动程序,这将凸显这一事实),那么您的重点肯定应该放在检测上。我还要补充一点,任何可能围绕游戏建立的合理社区都可能最终会维持治安,因此您也可以在提供有助于此目的的工具方面投入一些工作。
Maximus Minimus 2012年

2
单靠程序预防是不可能的,这就是为什么类似《魔兽世界》这样的游戏会有大量的管理员来检查执行重复性操作的人,并向他们提问以证明他们是人类。
DampeS8N 2012年

1
@AsTeR这些只是向正确方向推进的一些想法。有许多文章和演示文稿更深入地解决了这个问题,例如:iis.sinica.edu.tw/~swc/pub/bot_trajectory.html
Kamil,

5
“所以问题应该是-如何检测机器人玩家?” 我不同意,有多种方法可以在没有机器人的情况下作弊。例如,让客户端获取太多信息或信任客户端。
Matsemann 2012年

9

在多人网络游戏中,存在哪些技术可以尝试确保用户与官方客户端应用程序连接,而不是与某些被黑客入侵的客户端应用程序连接?

我认为这不是解决此问题的正确方法,或者至少不是您应该关注的唯一问题。

  1. 确保只向每个客户端发送特定于客户端的信息(例如,客户端不需要知道例如怪物会掉落什么,杀死它们之后仅发送信息,并且仅发送给指定的客户端)

  2. 在服务器端进行大多数计算(定位等)。客户正在做自己的计算,但BUT永远只能发送自己的操作,而不能发送自己的值。服务器必须检查此动作是否有效以及它将如何影响游戏。

  3. 1和2通常与预测结合在一起。客户端和服务器尝试预测某些行为。例如,客户端每隔x秒或ms移动一次播放器。由服务器接收更正

  4. 向用户收费而不是为客户收费,这样,用户可能会拥有破解版本,但没有账户就无法玩。

使用2可以确保没有金钱黑客,位置黑客或墙壁黑客等。但是对于许多公司而言,机器人一直是一个问题。甚至像暴雪这样的大公司也遇到了麻烦。您可以做的是限制每个帐户的可玩时间,以使某人每月不能在线超过540个小时。我记得一个机器人,它使用怪兽的颜色值+鼠标输入来获得XP。另一种方法是提供一个附加程序,该程序检查其他正在运行的应用程序和内存访问,但这带来了一些新问题。

编辑:

非常适合初学者的文章:http : //gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


是的,我同意这不是我们唯一需要关注的问题。我们已经在做这些事情中的大多数,但是在客户端不可避免的暴露了一些元素。
UpTheCreek 2012年

@UpTheCreek您能告诉我们您最关心的是什么吗?机器人,更改数据,向客户端或从客户端发送需要保护的信息类型。正如您已经注意到的那样,确保客户端安全无济于事并非易事,但也许我们可以通过消除根源来帮助您更好地工作。

对我们来说,这是在服务器端检查/模拟与服务器成本之间取得平衡的一种情况。我们无法包含我们想要的所有内容。我已经考虑了很多,但是我想看看是否有任何巧妙的技巧可以更好地保护客户端:)客户端是基于javascript的,因此您可以想象它比普通用户更容易破解!
UpTheCreek

4

没有真正的万无一失的方法来保证“官方客户端”正在运行;任何这样的机制都将依赖于验证代码将某种“秘密”信息传送回服务器,如果有足够的时间,可以对其进行反向工程。当防黑客软件告诉服务器客户端正常时,基本上就是这种情况。

编辑:在上面详细说明一下,请考虑验证客户端的代码。它有两个非常困难的工作:检查是否正在使用原始代码(没有其他东西可以动态地/在运行时(!)干扰原始代码),以及以这种方式将该结果传递回服务器。该通信不能被伪造。第一部分非常困难,而第二部分则完全不可能。

如果您可以定期更新客户端和服务器,则可以定期将机密信息关闭,以使破解者难以跟上。但是,除非您更改密码的编码/实现方式,否则它很可能会很快再次被破解。因此,从根本上讲,这是您与想要破解它的人之间的武器竞赛-谁有更多的时间和金钱来解决问题。

接受了那部分之后,我们还有什么可以做的?在一个完美的世界中,具有无限的计算能力和带宽,您可以简单地在客户端和服务器之间连续传输状态,并使服务器对客户端发生的事情进行完美的模拟。然后可以使用该模型来验证客户端声称要执行的操作。这不会检测是人类还是机器人在玩游戏,但是它将能够验证客户是否主张通过墙进行射击或其他无法想象的动作。

服务器上拥有足够的数据也是检测异常行为的第一步-可能对人类来说太快了,等等。显然,完美的模拟情况通常是不可行的,但是可以使用某种按比例缩小的估计模型很多情况。


+1。我在这里提到要经常更改秘密的想法,这意味着黑客将不得不重复他们的工作。复杂的秘密将使其变得更好,例如。一种会根据服务器发送的内容进行更改。
Kylotan '11年

4

您没有指定游戏类型,所以我将非常倾向于RPG / MMO游戏。但是其中很多可以而且确实适用于FPS,策略和动作游戏。像暴雪这样的大型多人游戏公司在其游戏中处理此问题的方式是:

  1. 在服务器端进行所有计算和游戏操作时,客户端只是一个哑终端和图形引擎。因此,如果玩家使用的是其他客户端,那么从游戏角度来讲这并不重要,他们就无法欺骗游戏的物理原理。
  2. 通过寻找明显的计算机动作(例如,重复单击事件和鼠标移动)来检查明显的机器人程序/客户端。
  3. 检查不明显的机器人程序/客户端,并在游戏主持人中警告该问题。

然后,它们出现在游戏中(如果可能的话,对于像《星际争霸2》这样的相同游戏则不是),或者以其他方式观看/与玩家谈论他们的行为。或至少应该这样处理。暴雪对此非常好,但是历史上其他MMO公司都没有。

检查非显而易见的漫游器并不容易,但是要遵循的一些基本规则包括

  • 寻找那些变化很小,一次又一次执行相同动作的玩家。它可能坐在MMO的一个资源节点上,并在其重生时进行耕种,或者它可能在FPS中的健康/弹药包之间循环运行,并且从未偏离特定路径并且始终使用同一支枪。(FPS中的次优机器人很少见,但是如果您的游戏有一个阶梯可以攀升,那么像一些现代FPS一样,玩家的才能更重要的是游戏数量,机器人将再次变得有价值)
  • 寻找在RTS中一遍又一遍执行完全相同的抢冲或策略的玩家。星际争霸中有某些建造指令,当由机器人执行时,几乎是无与伦比的。
  • 寻找已经收集了大量资源并且现在不断地磨出一件物品的玩家。这是Ultima Online中的一个大问题。

问题在于,您的游戏越受欢迎,而减少游戏中乏味的机器人就越有成果,人们使用和创建这些机器人的可能性就越大。限制鼠标移动速度,给点击添加随机的人性化变化,甚至使机器人以人为的速度犯错,打开和关闭菜单的各个部分,按下错误的按钮,然后关闭窗口,在键盘和鼠标可以像人类一样减轻手部疲劳。(您甚至没有意识到自己做到了)

因此,当某人或机器人长时间重复执行某项操作时,最后一步实际上必须是人类mod出现在玩家面前并与他们交谈。如果他们在那里并且用人类的回答来回应,那他们就是人类。通常情况下,mod会要求玩家停一会儿,或者跟随他们到某个地方并执行其他操作,随着时间的推移,篮球圈变得越来越复杂。

弦乐

当然,最终有人会通过图灵测试创建与真实人没有区别的机器人。而且有很多机器人作家致力于实现这一目标。

当我第一次开始编程并为Ultima Online创建无用的bot时,我自己对这个想法迷上了迷,它会出现在城镇并模仿NPC。这些命令非常简单,因此很容易制作,只需按几个键就可以朝不同的方向前进,并看着聊天记录中自己的名字,并通过AI的网络版本将消息传递给ALICE。我不记得是哪个,它可能不再存在。

/切线

问题是,您需要确定在哪里画线。如果您无法让大量的主持人与系统识别为机器人的人交谈,则最好让社区将人们标记为机器人,然后在足够的时间做完之后,将玩家踢一个小时。不禁止,只是踢。对于大多数玩家而言,真正的问题是机器人会占用其他人类玩家可能正在使用的资源。如果小怪很稀少(如《仙境传说》在线版中的问题),那么漫游机器人并清理整个敌人区域并同时捡起(或不捡)物品的机器人很普遍,它们会破坏其他人的游戏。因此,您可以通过这种方式来减少管理军的费用。

最后,您还可以将机器人作为游戏空间的现实生活,并鼓励机器人的使用。这就需要围绕机器人,培训师和帮助程序的最终和普遍使用来设计游戏。我想说的是大约10年前有一个MMO做到了,但是我不记得是哪个。它意味着游戏的结束,因为MMO十分沉重,这意味着我们有95%的玩家在任何给定时间都离开了键盘,摧毁了整个社区。如果您走这条路线,请当心。


3
在您的最后一段中,SOE的《星球大战星系》是一个MMO的示例,它具有非常强大的游戏内脚本/宏语言,但它并没有太多机器人问题。最终发生的事情是,编写了一些更乏味的游戏必需品(例如,大多数星际港口在全自动的治疗者抛光机器人之前都有许多玩家),并且通常以这种方式进行低级XP研磨太。国际海事组织把这一切都大量地添加到了游戏中,杀死了它的是一些令人难以置信的错误决定和游戏更改,几乎没有警告或沟通。
GAThrawn 2012年

3

避免通过重复执行任务来获得用户可以从中获胜的游戏功能,尤其是在类似浏览器的游戏中。导致重复任务的游戏功能,不仅使其他用户因为没有时间去做而生气,也使游戏更容易上手(也就没那么有趣了!)

如果给定的游戏功能是可以提升的,那么为什么游戏中仍然存在该功能?该功能显然是在要求用户构建机器人。

游戏的目的是通过给玩家合理的娱乐量来进行游戏,通常是通过一系列非平凡的选择。确实可以决定面对非平凡选择的能力将人与机器人区分开来。最终,无需搜索机器人,而是在可以实现机器人的游戏中进行搜索,然后由您自己实现,以供所有人使用。这样,您就可以避免游戏玩家执行无聊的任务,从而节省了他们的时间,同时又可以从根本上与机器人打架:如果没有可移植的游戏功能,那么怎么会有机器人呢?

我的底线是:我要说的是,游戏必须具备的最小复杂度有一个门槛。通过添加非平凡的选择,使您的游戏超过该阈值,这最终会增加用户体验。

无论如何,也许这种范例在当今已经不复存在了……但是我仍然相信这是一款出色的游戏。


1
+1对抗作弊的唯一有效方法是设计游戏,使作弊首先无效。
API-Beast 2012年

我的最后一句话是对的,因为我什至没有一个人感到惊讶,甚至没有想到这是一种可能性……
豪尔赫·雷涛

2

现有的答案已经很好,但是我想指出的是,如果您的检查费用很高(例如:运行整个游戏服务器端以确保客户端不会作弊),那么您可以选择仅执行其中的一些操作时间

例如,您只能检查特定区域或特定玩家的动作(一段时间后随机更改),或者仅排成一排,随机选择要验证的动作(而忽略其他动作)。也许可以找出谁可能在作弊(主要是寻找最成功的人)并验证他们在服务器上的行为。

确保服务器在验证动作或不进行动作时没有放弃。始终发送标准响应,直到您准备采取行动为止(并且在验证时和不在验证时都不要花费更长的时间发送响应)。

这样,您可以仅使用可以节省的服务器电源就获得很好的防作弊保护(尽管显然,您越接近验证每个动作,就可以更好地防止作弊)。


1

好吧,我认为没有“终极解决方案”。您可以对数据包进行编码,并为接收数据包的服务器提供一些规则。例如,您可以将最大的现实/允许的移动设置为+1,而不是像骗子/黑客那样将其设置为5或更高只是为了更快。只需考虑一下黑客可以做些什么,使其比其他玩家更好,并为此制定规则。


0

最简单的方法实质上是使客户端成为哑终端。一切都在服务器上完成,客户端只是将命令发送到服务器。这样,服务器可以完全控制所有内容。

但是,这可能不是最适合您的情况,因为服务器必须执行更多的计算,并且用户体验将变得平淡无奇。因此,您留给客户端执行的逻辑越多,用户体验就越好,但是安全性就越差。因此,您必须找到可以接受的中间立场。

同样,仅向客户端发送其“应”知道的内容。例如,如果敌方玩家在墙后,请勿将该信息发送给客户端,否则被黑客入侵的客户端将能够识别此信息(请参阅:wallhack)。


-1

编辑:我误解了这个问题。我将其解释为“防止盗版/被盗用的密钥”,而不是“被盗用的软件可以发送信息,为玩家赚取10亿美元”。

如今,大多数游戏的价值都与数据库中的帐户相关联,因为可以修改客户端可以发送给服务器的任何内容。这可能是最简单,最有效的方法。

随着高速互联网和P2P文件传输的盛行,公司已经从本地存储在客户端的cd-key切换为链接到其服务器上的帐户的密钥。由于没有人可以下载客户端,因此不再有“官方”或“非官方”客户端软件。但是,只有拥有有权玩游戏的帐户,您才能玩游戏。

这对公司也有好处,因为他们不需要花费太多的时间来生产软件的物理副本。


我不是投票否决您的人,但对我而言,这实际上并没有提供任何保护。听起来您正在谈论只允许授权用户连接-这很容易处理。但是问题是,没有什么可以阻止拥有有效帐户的人对消息进行反向工程,并编写自己的被黑客户端。
UpTheCreek

-1这不能回答问题,拥有在线帐户并不能防止某人与被黑客入侵的客户端建立联系,例如,可以自动执行游戏中的操作。wow完全基于在线,并且仍在不断被黑客入侵。为了防止这场暴风雪使用他们的“病房”反作弊软件,这是处理有问题的示例
dreta 2012年

Arg,您说得对。我误解了这个问题。
奥林·麦格雷戈
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.