Answers:
这是一个有趣的问题,但是我认为您在这里问错了问题。让我从检测被黑客入侵的客户端方法开始:
如果您的客户端是在用户端执行的,则他可以使用您的代码执行他想做的任何事情(直到这对他来说太复杂了,但总会有人更聪明)。您可以做的所有事情,例如在客户端和服务器之间对消息进行硬编码加密,创建客户端证书,甚至使客户端计算其校验和,只要有足够的时间,都将被反编译和破解。我曾经看到过软件加密狗随附的软件,该软件加密狗具有应用程序代码的一部分,但是为了能够执行它,软件加密狗首先检查了该应用的crc,如果它没有调温..当然,一段时间之后,软件加密狗被黑了同样,如果您进行软件更新,则需要重新发送加密狗。
除此之外,用户还可以使用自己的客户端进行欺骗-例如,通过模拟鼠标的移动和点击来进行欺骗。
所以问题应该是-如何检测机器人玩家?
在这里,您有几个选择-测量单击之间的时间,测量鼠标移动的速度-鼠标是否从A点精确地移动到B点多次并击中了相同的坐标?用户移动是否可以重复?如果当用户正在收集的资源耗尽时,用户是否要执行其他操作还是要在原地等待数小时?最终,您最终要编写模式识别代码。
在多人网络游戏中,存在哪些技术可以尝试确保用户与官方客户端应用程序连接,而不是与某些被黑客入侵的客户端应用程序连接?
我认为这不是解决此问题的正确方法,或者至少不是您应该关注的唯一问题。
确保只向每个客户端发送特定于客户端的信息(例如,客户端不需要知道例如怪物会掉落什么,杀死它们之后仅发送信息,并且仅发送给指定的客户端)
在服务器端进行大多数计算(定位等)。客户正在做自己的计算,但BUT永远只能发送自己的操作,而不能发送自己的值。服务器必须检查此动作是否有效以及它将如何影响游戏。
1和2通常与预测结合在一起。客户端和服务器尝试预测某些行为。例如,客户端每隔x秒或ms移动一次播放器。由服务器接收更正
向用户收费而不是为客户收费,这样,用户可能会拥有破解版本,但没有账户就无法玩。
使用2可以确保没有金钱黑客,位置黑客或墙壁黑客等。但是对于许多公司而言,机器人一直是一个问题。甚至像暴雪这样的大公司也遇到了麻烦。您可以做的是限制每个帐户的可玩时间,以使某人每月不能在线超过540个小时。我记得一个机器人,它使用怪兽的颜色值+鼠标输入来获得XP。另一种方法是提供一个附加程序,该程序检查其他正在运行的应用程序和内存访问,但这带来了一些新问题。
编辑:
非常适合初学者的文章:http : //gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/
没有真正的万无一失的方法来保证“官方客户端”正在运行;任何这样的机制都将依赖于验证代码将某种“秘密”信息传送回服务器,如果有足够的时间,可以对其进行反向工程。当防黑客软件告诉服务器客户端正常时,基本上就是这种情况。
编辑:在上面详细说明一下,请考虑验证客户端的代码。它有两个非常困难的工作:检查是否正在使用原始代码(没有其他东西可以动态地/在运行时(!)干扰原始代码),以及以这种方式将该结果传递回服务器。该通信不能被伪造。第一部分非常困难,而第二部分则完全不可能。
如果您可以定期更新客户端和服务器,则可以定期将机密信息关闭,以使破解者难以跟上。但是,除非您更改密码的编码/实现方式,否则它很可能会很快再次被破解。因此,从根本上讲,这是您与想要破解它的人之间的武器竞赛-谁有更多的时间和金钱来解决问题。
接受了那部分之后,我们还有什么可以做的?在一个完美的世界中,具有无限的计算能力和带宽,您可以简单地在客户端和服务器之间连续传输状态,并使服务器对客户端发生的事情进行完美的模拟。然后可以使用该模型来验证客户端声称要执行的操作。这不会检测是人类还是机器人在玩游戏,但是它将能够验证客户是否主张通过墙进行射击或其他无法想象的动作。
服务器上拥有足够的数据也是检测异常行为的第一步-可能对人类来说太快了,等等。显然,完美的模拟情况通常是不可行的,但是可以使用某种按比例缩小的估计模型很多情况。
您没有指定游戏类型,所以我将非常倾向于RPG / MMO游戏。但是其中很多可以而且确实适用于FPS,策略和动作游戏。像暴雪这样的大型多人游戏公司在其游戏中处理此问题的方式是:
然后,它们出现在游戏中(如果可能的话,对于像《星际争霸2》这样的相同游戏则不是),或者以其他方式观看/与玩家谈论他们的行为。或至少应该这样处理。暴雪对此非常好,但是历史上其他MMO公司都没有。
检查非显而易见的漫游器并不容易,但是要遵循的一些基本规则包括
问题在于,您的游戏越受欢迎,而减少游戏中乏味的机器人就越有成果,人们使用和创建这些机器人的可能性就越大。限制鼠标移动速度,给点击添加随机的人性化变化,甚至使机器人以人为的速度犯错,打开和关闭菜单的各个部分,按下错误的按钮,然后关闭窗口,在键盘和鼠标可以像人类一样减轻手部疲劳。(您甚至没有意识到自己做到了)
因此,当某人或机器人长时间重复执行某项操作时,最后一步实际上必须是人类mod出现在玩家面前并与他们交谈。如果他们在那里并且用人类的回答来回应,那他们就是人类。通常情况下,mod会要求玩家停一会儿,或者跟随他们到某个地方并执行其他操作,随着时间的推移,篮球圈变得越来越复杂。
弦乐
当然,最终有人会通过图灵测试创建与真实人没有区别的机器人。而且有很多机器人作家致力于实现这一目标。
当我第一次开始编程并为Ultima Online创建无用的bot时,我自己对这个想法迷上了迷,它会出现在城镇并模仿NPC。这些命令非常简单,因此很容易制作,只需按几个键就可以朝不同的方向前进,并看着聊天记录中自己的名字,并通过AI的网络版本将消息传递给ALICE。我不记得是哪个,它可能不再存在。
/切线
问题是,您需要确定在哪里画线。如果您无法让大量的主持人与系统识别为机器人的人交谈,则最好让社区将人们标记为机器人,然后在足够的时间做完之后,将玩家踢一个小时。不禁止,只是踢。对于大多数玩家而言,真正的问题是机器人会占用其他人类玩家可能正在使用的资源。如果小怪很稀少(如《仙境传说》在线版中的问题),那么漫游机器人并清理整个敌人区域并同时捡起(或不捡)物品的机器人很普遍,它们会破坏其他人的游戏。因此,您可以通过这种方式来减少管理军的费用。
最后,您还可以将机器人作为游戏空间的现实生活,并鼓励机器人的使用。这就需要围绕机器人,培训师和帮助程序的最终和普遍使用来设计游戏。我想说的是大约10年前有一个MMO做到了,但是我不记得是哪个。它意味着游戏的结束,因为MMO十分沉重,这意味着我们有95%的玩家在任何给定时间都离开了键盘,摧毁了整个社区。如果您走这条路线,请当心。
避免通过重复执行任务来获得用户可以从中获胜的游戏功能,尤其是在类似浏览器的游戏中。导致重复任务的游戏功能,不仅使其他用户因为没有时间去做而生气,也使游戏更容易上手(也就没那么有趣了!)
如果给定的游戏功能是可以提升的,那么为什么游戏中仍然存在该功能?该功能显然是在要求用户构建机器人。
游戏的目的是通过给玩家合理的娱乐量来进行游戏,通常是通过一系列非平凡的选择。确实可以决定面对非平凡选择的能力将人与机器人区分开来。最终,无需搜索机器人,而是在可以实现机器人的游戏中进行搜索,然后由您自己实现,以供所有人使用。这样,您就可以避免游戏玩家执行无聊的任务,从而节省了他们的时间,同时又可以从根本上与机器人打架:如果没有可移植的游戏功能,那么怎么会有机器人呢?
我的底线是:我要说的是,游戏必须具备的最小复杂度有一个门槛。通过添加非平凡的选择,使您的游戏超过该阈值,这最终会增加用户体验。
无论如何,也许这种范例在当今已经不复存在了……但是我仍然相信这是一款出色的游戏。
现有的答案已经很好,但是我想指出的是,如果您的检查费用很高(例如:运行整个游戏服务器端以确保客户端不会作弊),那么您可以选择仅执行其中的一些操作时间。
例如,您只能检查特定区域或特定玩家的动作(一段时间后随机更改),或者仅排成一排,随机选择要验证的动作(而忽略其他动作)。也许可以找出谁可能在作弊(主要是寻找最成功的人)并验证他们在服务器上的行为。
确保服务器在验证动作或不进行动作时没有放弃。始终发送标准响应,直到您准备采取行动为止(并且在验证时和不在验证时都不要花费更长的时间发送响应)。
这样,您可以仅使用可以节省的服务器电源就获得很好的防作弊保护(尽管显然,您越接近验证每个动作,就可以更好地防止作弊)。
编辑:我误解了这个问题。我将其解释为“防止盗版/被盗用的密钥”,而不是“被盗用的软件可以发送信息,为玩家赚取10亿美元”。
如今,大多数游戏的价值都与数据库中的帐户相关联,因为可以修改客户端可以发送给服务器的任何内容。这可能是最简单,最有效的方法。
随着高速互联网和P2P文件传输的盛行,公司已经从本地存储在客户端的cd-key切换为链接到其服务器上的帐户的密钥。由于没有人可以下载客户端,因此不再有“官方”或“非官方”客户端软件。但是,只有拥有有权玩游戏的帐户,您才能玩游戏。
这对公司也有好处,因为他们不需要花费太多的时间来生产软件的物理副本。