【问题标题】:Obfuscation or hiding of server to client state updates混淆或隐藏服务器到客户端状态更新
【发布时间】:2010-10-28 08:58:00
【问题描述】:

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

  • 玩家 A 躲在一些朝西的灌木丛中
  • 玩家 B 正从东面偷袭玩家 A,或潜入玩家 A 身后

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

有没有办法在发送给客户端的信息中混淆或隐藏敌方玩家的状态更新?据我了解,加密对于实时解决方案不可行?即使服务器只能在玩家 A 的视野范围内发送玩家的状态更新,这仍然允许玩家 A 的 hack 显示玩家躲在伪装或掩护物体后面(大概是透明的)。

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

【问题讨论】:

    标签: security network-programming obfuscation information-hiding


    【解决方案1】:

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

    客户掌握在 敌人。

    另一个因素是人们会用经过修改的驱动程序替换他们的视频驱动程序,从而为他们带来优势(事物是不透明的或突出显示的,玩家不能“失明”,等等)。我不确定是否有任何游戏检查修改过的驱动程序。

    【讨论】:

    • 呵呵呵呵,恕我直言,如果你没有作弊,你就没有尝试! :D
    • 知道暴雪是否授权 Warden 用于其他游戏?谈论印钞许可证(除了《魔兽世界》)。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-16
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        相关资源
        最近更新 更多