Open source 如何为开源项目生成(功能)校验和?

Open source 如何为开源项目生成(功能)校验和?,open-source,checksum,godot,Open Source,Checksum,Godot,我的一个朋友正在Godot做一个项目,这是一个简单的多人游戏,玩家通过IP互相连接。最近,他决定公开他的git回购协议,而不是将其保密;基本上是让全世界都能接触到它 然而,他很快意识到,通过公开项目文件,人们现在可以编译稍微修改过的代码版本,并且仍然可以连接到其他玩家。看到这怎么会被用来作弊(例如,对手的回合永远不会到来),他向我求助。由于我也是一个经常使用大策略的玩家,我想到的第一件事就是做一些类似校验和的东西来比较不同的版本。唉,这些游戏大多是封闭源码的,当他问我如果有人能够“硬编码”或强制

我的一个朋友正在Godot做一个项目,这是一个简单的多人游戏,玩家通过IP互相连接。最近,他决定公开他的git回购协议,而不是将其保密;基本上是让全世界都能接触到它

然而,他很快意识到,通过公开项目文件,人们现在可以编译稍微修改过的代码版本,并且仍然可以连接到其他玩家。看到这怎么会被用来作弊(例如,对手的回合永远不会到来),他向我求助。由于我也是一个经常使用大策略的玩家,我想到的第一件事就是做一些类似校验和的东西来比较不同的版本。唉,这些游戏大多是封闭源码的,当他问我如果有人能够“硬编码”或强制校验和匹配会发生什么时,我意识到了这一点

将封闭源代码组件用于启动器或游戏内在线身份验证是一个好主意吗?或者他还有其他方法可以考虑吗? 你不会被阻止作弊。 为了让在线游戏正常运行,服务器必须向客户端发送信息,这些信息可能被滥用。如果服务器将玩家位置发送给客户端,恶意客户端可能会截获这些消息,并利用这些消息构建所有对手的地图,或通过墙显示他们的位置

同样,服务器必须接受来自客户端的命令,并使用它们修改游戏状态。确定命令是否合法异常困难。如何区分高技能玩家和aimbot?一些AAA游戏使用反作弊解决方案,尝试,但仍然让骗子通过,同时禁止普通人

这与开源无关 好消息是,这与自由软件无关。只要你试图锁定代码,玩家就会破解它并找到作弊的方法。是关于DRM的,但给出了一个很好的概述,说明了为什么本质上不可能阻止聪明、坚定的人使用逆向工程技术

使用权威服务器 虽然作弊无法预防,但你可以限制它的有效性。你不能控制客户机,但你可以控制服务器,所以要做到这一点。与游戏结果相关的每个决策都应由服务器做出,而客户端只负责将玩家输入转发到服务器。这意味着,如果一个玩家想要“黑客”他们的本地副本,比如说,给他们的玩家500%的生命值,这只会让他们这边的事情搞砸——服务器仍然会表现得好像他们的玩家有正常的生命值一样

限制您发送的信息 虽然您的权威服务器阻止玩家修改游戏状态,但他们仍然可以滥用发送到客户端的信息。如上所述,服务器将必须向客户端发送有关玩家位置的信息,玩家可以使用此信息发现对手位置或创建aimbot。您可以通过发送客户端正常工作所需的绝对最小信息量来限制这一点。例如,服务器可能只发送客户端可以看到的球员的更新,而不是不断发送球员位置更新。这将阻止玩家有“x射线”视力,但仍然无法防止Aimbot(记住,即使是专有游戏也无法阻止这一点)

考虑你的威胁模型 只有知道服务器信息不是“游戏的一部分”时,玩家才能使用服务器信息进行欺骗。例如,如果你正在进行一场国际象棋比赛,玩家不能通过截取来自服务器的消息来“作弊”,因为这些消息不包含任何他们不应该知道的信息——根据规则,他们已经“允许”知道对手棋子的位置

当你看你的游戏时,试着找出什么是绝对需要保密的,以使所需的机制发挥作用,并使其余的公开知识。对于确实需要保密的位,尽可能限制发送它们

记住这一点,祝贺你的朋友创建了一个开源游戏。如果有的话,这意味着你将能够得到更多的帮助,使它尽可能防止作弊。祝你好运