将服务器混淆或隐藏到客户端状态更新

时间:2009-05-22 23:03:37

标签: security network-programming obfuscation information-hiding

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

  • 玩家A藏在面向西部的一些灌木丛中
  • 玩家B从东方偷偷击中玩家A,或者在玩家A后面潜行。

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

有没有办法在发送给客户的信息中混淆或隐藏敌方玩家的状态更新?据我所知,加密对于实时解决方案是不可行的?即使服务器只能在玩家A的视图框架内向玩家发送状态更新,这仍然允许玩家A的黑客显示隐藏在伪装或覆盖物体背后的玩家(这可能是一种轻微的透明)。

我唯一能想到的就是实施某种“punkbuster”解决方案。也就是说,让玩家A的客户定期扫描非法进程。这个想法是任何受欢迎的黑客都会受到监控。不受欢迎的黑客会影响足够小的玩家基础,因为他们太小而无法追踪。

3 个答案:

答案 0 :(得分:2)

这是唯一的方法。除了punkbuster,你应该对Warden进行一些研究(除了维基百科之外,还有很多有趣的东西,我不会在这里链接)。鉴于laws of online world design ......

,这是一场非常有趣的战斗
  

客户掌握在手中   敌人。

另一个要素是,人们会用改装的驱动程序替换他们的视频驱动程序,这些驱动程序具有优势(事物不透明或突出显示,玩家不能“蒙蔽”等)。我不确定是否有任何游戏会检查修改过的驱动程序。

答案 1 :(得分:2)

简单加密对于今天的硬件来说可能是实时可行的,但问题是,为了让客户端访问加密数据,它必须具有密钥。如果客户端有密钥,那么骗子程序找到并检索它可能不会太困难。最好的方法是服务器只能将B的位置发送到A,如果它完全可以看到B.它仍然可以作弊,但程度稍低。

B隐藏但可能看到一小部分的情况的可能解决方案是服务器简单地说在B的位置有某事。它可能是一块石头或诸如此类的东西。问题是,为了使客户端能够呈现某事,服务器必须提供相当准确的描述。鉴于今天的多人游戏通过模拟服务器的功能来假设低延迟,在我们拥有超低延迟网络之前,这很可能是不可行的。

答案 2 :(得分:1)

有一个名为“eqmon”的程序为游戏Everquest做了类似的事情。起初,游戏数据包完全未加密,并包含整个级别的所有角色(包括PC和NPC)。最终,他们最终使用加密来更难以窥探数据包,但是eqmon通过强制加密密钥来解决这个问题(每次进入关卡时服务器都会创建一个新密钥,因此有时需要几分钟解密密钥)。然后他们对其进行了更改,以便您的客户仅在您所在位置的某个范围内收到PC或NPC的更新。这使得eqmon对于在相同水平远距离露营和监视“罕见的产卵”没那么有用。