我实际上并不是自己编写这个软件,但我突然想到我不知道如何解决这个问题。作为解释问题的最佳方式,我将描述一个假设的多人第一人称射击游戏的特定场景......

  • 玩家A躲在朝西的灌木丛中
  • 玩家 B 从东边偷偷靠近玩家 A,或者偷偷靠近玩家 A 后面

为这个游戏编写的一个流行的“黑客”是让玩家 A 有一个雷达向他显示玩家 B 的位置,即使他在屏幕上看不到玩家 B,而且游戏不支持雷达。这种黑客攻击是可能的,因为服务器正在向玩家 A 的客户端发送一定范围内(可能在玩家 A 的裁剪平面内)所有玩家的信息。对于服务器来说,尝试仅将关于玩家 A 视图框架内的玩家的信息发送到玩家 A 的客户端是不现实的(据我所知)。因为服务器必须将所有附近玩家的信息发送到玩家 A 的客户端,所以玩家 A 可以编写一个黑客程序,在他的屏幕上覆盖雷达,通过监视发送到客户端的数据并提取敌方玩家状态更新来填充雷达。我认为这些通常被称为“雷达”或“墙”黑客。

有什么方法可以在发送给客户端的信息中混淆或隐藏敌方玩家的状态更新吗?据我了解,加密对于实时解决方案不可行?即使服务器只能向玩家 A 的视图框架内的玩家发送状态更新,这仍然允许玩家 A 的黑客攻击显示隐藏在伪装或覆盖物体后面的玩家(这些物体大概是透明的)。

我真正能想到的唯一一件事就是实施某种类型的“punkbuster”解决方案。也就是说,让玩家 A 的客户端定期扫描非法进程。这个想法是任何流行的黑客行为都会受到监控。不受欢迎的黑客行为会影响到足够小的玩家群体,以至于他们太小而无法追捕。

有帮助吗?

解决方案

这是唯一的办法。除了朋克克星之外,你还应该做一些研究 典狱长 (除了维基百科之外,还有很多有趣的东西,我不会在这里链接)。这是一场非常有趣的战斗 网络世界设计法则 ...

客户掌握在敌人手中。

另一个因素是人们会用修改后的驱动程序替换他们的视频驱动程序,这会给他们带来优势(东西是不透明或突出显示的,玩家不能被“蒙蔽”,等等)。我不确定是否有任何游戏会检查修改后的驱动程序。

其他提示

简单的加密对于当今的硬件来说可能是可行的,但问题是为了让客户端访问加密的数据,它必须拥有密钥。如果客户端拥有密钥,作弊程序找到并检索它可能不会太困难。最好的方法是服务器仅在可能看到 B 的情况下才将 B 的位置发送给 A。作弊仍然是有可能的,但程度要小一些。

对于 B 隐藏但一小部分可能可见的情况,一种可能的解决方案是服务器简单地说有 某物 在B的位置。它可能是一块岩石或其他什么东西。问题是为了让客户端能够渲染 某物, ,服务器必须给出相当准确的描述。鉴于当今的多人游戏通过模拟服务器的行为来伪造低延迟,除非我们拥有超低延迟网络,否则这很可能是不可行的。

有一个名为“eqmon”的程序可以为《无尽的任务》游戏执行类似的操作。起初,游戏数据包完全未加密,包含整个关卡的所有角色(PC 和 NPC)。最终,他们最终使用加密来使窥探数据包变得更加困难,但 eqmon 通过暴力破解加密密钥来解决这个问题(每次进入关卡时服务器都会创建一个新密钥,因此有时需要几分钟的时间)解密密钥)。然后他们对其进行了更改,以便您的客户端仅收到您所在位置特定范围内的 PC 或 NPC 的更新。这使得 eqmon 对于在同一关卡中远距离露营和监视“稀有生成点”的帮助不大。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top