如何为开源项目进行(功能性)校验和?

问题描述 投票:2回答:1

我的一个朋友正在Godot中开发一个项目,Godot是一个简单的多人游戏,玩家可以通过IP相互连接。最近,他决定将其git repo公开,而不是将其保密。本质上使其可以被全世界使用。

然而,他很快意识到,通过将项目文件公开,人们现在可以编译经过稍微修改的代码版本,并且仍然可以连接到其他播放器。看到如何利用它作弊(例如对手的回合永远不会来),他向我寻求帮助。由于我也是大战略的常客,所以我想到的第一件事就是制作诸如校验和之类的东西,以便在不同版本之间进行比较。 las,其中大多数游戏都是封闭源代码,当他问到有人能够“硬编码”或强制校验和匹配时会发生什么,我意识到了这一点。

将封闭源组件用于启动器或游戏中在线身份验证是一个好主意吗?还是他可以考虑其他方法?

open-source checksum godot
1个回答
2
投票

您不会阻止作弊。

为了使在线游戏正常工作,服务器具有将信息发送给客户端,并且该信息可能被滥用。如果服务器将播放器位置发送给客户端,则恶意客户端可能会拦截这些消息并使用其构建所有对手的地图,或者通过墙壁显示其位置。

类似地,服务器必须接受来自客户端的命令,并使用它们来修改游戏状态。确定命令是否合法非常困难。您如何区分高技能的玩家和瞄准机器人?一些AAA游戏使用了尝试的反作弊解决方案,但在禁止普通玩家的同时仍然允许作弊者通过。

这与开源无关

好消息是,这几乎与免费软件无关。在尝试锁定代码的过程中,玩家will会破解并找到作弊的方法。 This question是关于DRM的,但是很好地概述了为什么基本上不可能阻止聪明而有决心的人进行逆向工程技术。

使用权威服务器

虽然无法防止作弊,但是您可以限制其有效性。您无法控制客户端,但是can控制服务器,因此将其设置为authoritative。与游戏结果相关的每个决定都应由服务器做出,而客户负责的只是将玩家输入转发到服务器。这意味着,如果玩家想通过“给”玩家500%的生命值来“入侵”他们的本地副本,这只会使事情变得更糟-服务器仍将像玩家的正常数量那样操作健康。

限制您发送的信息

虽然您的权威服务器阻止玩家修改游戏状态,但他们仍然可以滥用发送给客户的信息。如上所述,服务器将have将有关玩家位置的信息发送给客户端,玩家可以使用它来发现对手位置或创建瞄准机器人。您可以通过发送客户端正常工作所必需的绝对最小信息量来限制此情况。例如,服务器可能只发送客户端可以看到的播放器更新,而不是持续发送播放器位置更新。这将防止玩家具有“ X射线”视力,但仍无法防止瞄准机器人(请记住,即使是专有游戏也无法防止这种情况)。

考虑您的威胁模型

玩家仅可使用服务器信息来作弊,前提是该信息的知识不是“游戏的一部分”。例如,如果您正在玩国际象棋游戏,玩家将无法通过拦截来自服务器的消息来“作弊”,因为这些消息不包含任何他们不应该知道的信息-他们已经被“允许”知道规则规定对手的位置。

[当您查看游戏时,请尝试找出什么绝对是[[需要],以使所需的机制正常工作,并使其余的知识广为人知。对于确实需要保密的位,请尽可能限制发送它们。

谨记在心,祝贺您的朋友创建了一个开源游戏。如果有的话,这意味着您将能够获得更多帮助,以使其尽可能防作弊。祝你好运!
© www.soinside.com 2019 - 2024. All rights reserved.