存在Punkbuster只是为了防止作弊,但是在启用Punkbuster的游戏中作弊很普遍。最终用户无法运行Modern Warefare 2,因为他们只能运行自己的服务器或进行任何Mod修改,并且欺诈行为不断发生。
对于每个客户端都在PC上运行的多人游戏,可以采取哪些措施来减少或消除作弊行为?
存在Punkbuster只是为了防止作弊,但是在启用Punkbuster的游戏中作弊很普遍。最终用户无法运行Modern Warefare 2,因为他们只能运行自己的服务器或进行任何Mod修改,并且欺诈行为不断发生。
对于每个客户端都在PC上运行的多人游戏,可以采取哪些措施来减少或消除作弊行为?
Answers:
这取决于他们的作弊方式,侧重于创建作弊的主要方式之一,将其他进程锁存在应用程序中并对其进行修改-您可以枚举所有其他进程,并钩住其内存操作方法以及其键盘/鼠标仿真方法。
Wallhacks通常是通过在您的过程和DirectX / GL库之间注入代码来编写的,以设置材料的透明性,以便可以看到它们。您可以向场景图形/剔除系统中添加一些代码,以明确地避免其他玩家/有用的实体掉在墙后(以防止这种作弊)。
如果您要使用多人游戏,并且希望防止在客户端/服务器之间修改数据包,那么可以通过自己的某种算法创建要发送的数据的校验和,并在另一端检查该校验和,这将是有效的。(出于各种质量检查目的,您可能最终都会这样做)。
对于大多数内存资源而言,也是如此,在帧的开头创建一个校验和,并在各个阶段进行验证,可以很方便地进行一些内存操作检测。
这是一个涉及很深的话题,但是希望这可以为您指明一个可以接受的方向。
在最极端的解决方案中,您基本上不会信任客户。对于MMO之类的游戏,用户不运行服务器,并且任何游戏逻辑都在服务器端处理。切勿授权客户说“我有X健康”或“我有X弹药”等。
如果您拥有一个逻辑昂贵的系统,并且必须在客户端上完成大部分操作以节省服务器周期,则可以实施概率作弊检测系统。每隔几分钟,它就会选择其他几个参与者来进行仔细检查并在服务器上进行一致性检查。由于作弊者很少将他们的作弊行为限制在短期和罕见的时间内,因此最终将被他们抓获。
这样做的另一个好处是,他们不会有快速的开发周期-如果服务器平均需要10个小时的游戏时间来关注您,那么每次您想看到的时间就是10个小时如果有什么用。而如果它做的工作,它甚至更长的时间,因为他们不知道如果服务器已经给他们竖起了大拇指,或只是还没有得到身边给他们。
针对第一人称射击游戏的瞄准辅助黑客也有很多类型,它们也可以通过插入图形库调用来工作。除了使墙壁透明之外,OGC反恐精英钩/ HL1还提供了多种选择。
如果在某个时刻将敌人的位置信息传递到具有广泛可用代码的较低层库中,则可以将这些调用挂接到其中,并使用位置,比例,旋转等数据来精确计算发射的最佳矢量对那个敌人。除内存和过程监控之外,像PunkBuster这样的反作弊系统通常还包括启发式检测(该玩家多久获得一次完美的射击,他们多频繁旋转180度才能一次击杀等)。
最终,在多人游戏中防止作弊的任务是玩猫和老鼠。随着新作弊技术的发展,新的反作弊方法也随之产生,然后,新的作弊技术就被避免使用新的反作弊技术。
正如Tetrad在回应中所说,“游戏安全性”的唯一硬性规定就是为客户提供尽可能少的信息,并尽可能少地信任客户。但是,不同类型的游戏会有不同的要求,这些要求可能会影响您遵守这些规则的程度。
在FPS游戏中,由于玩法的速度如此之快,因此通常不可能仅向客户端提供应该知道的有关此确切瞬间的数据。如果您不告诉客户拐角处有一个敌人,而玩家确实绕过拐角,则您必须在几毫秒内向他们发送该信息,否则就有可能让玩家被他们没有杀死的敌人杀死见过。
当前可用的针对这些问题的唯一“修复”可能是OnLive。由于该服务仅从安全地在数据中心运行的客户端提供音频和视频内容,因此作弊的唯一方法是从根本上创建一个可以分析传入视频流并据此采取行动的人工AI-这项任务很少,如果有的话,骗子就可以了。
上面的所有答案都很棒,但我还要补充一点:
某些游戏具有非常可靠的重播功能,该功能可以紧凑的格式保存游戏结束后每个游戏的重播,并以各种方式观看它-不同的玩家视角,实时统计UI等。
我非常熟悉的示例:《星际争霸2》(Starcraft 2)。暴雪阻止黑客的方法之一是在游戏重播时收到作弊证据。
在FPS中使用的一个示例是:如果您玩了一个游戏,并且怀疑对方欺骗了墙壁骇客,则观看了重播,然后看到在他的正常重播视野中,他不可能见过你,向拐角处投掷手榴弹,等等。
然后,您可以通过重播报告他,如果针对他的证据足够好,则将其禁止。据我所知,从事此事的公司在取缔禁令之前,只会采取严肃的证据,或采取多种手段证明同一行为。
因此,这不是一种反调试技术,它是一种用户报告系统,可以方便地人工辅助作弊。
这可能不是一个完整的答案,但是我在这里有一些建议。防止作弊的最佳方法之一是混淆或使用C / C ++。这样可以防止人们修改客户端代码。