有什么方法可以防止或减少在线多人游戏中的作弊行为?[关闭]


19

存在Punkbuster只是为了防止作弊,但是在启用Punkbuster的游戏中作弊很普遍。最终用户无法运行Modern Warefare 2,因为他们只能运行自己的服务器或进行任何Mod修改,并且欺诈行为不断发生。

对于每个客户端都在PC上运行的多人游戏,可以采取哪些措施来减少或消除作弊行为?



1
这本身并不是一个完整的答案,因此我不会将其列为一个完整的答案,但是,如果您除了传统的反作弊方法之外,还为玩家帐户增加一定数量的价值,我相信会有所帮助。例如,如果新玩家被降级为“ noob”服务器,直到他们获得足够的经验来访问游戏的其余部分,这将使黑客在每次被禁止后重新分配其帐户变得非常痛苦。可能仍然有一些黑客可以克服这一点,但是保护帐户/配对服务器比保护客户端容易得多。
刘易斯·

Answers:


18

这取决于他们的作弊方式,侧重于创建作弊的主要方式之一,将其他进程锁存在应用程序中并对其进行修改-您可以枚举所有其他进程,并钩住其内存操作方法以及其键盘/鼠标仿真方法。

Wallhacks通常是通过在您的过程和DirectX / GL库之间注入代码来编写的,以设置材料的透明性,以便可以看到它们。您可以向场景图形/剔除系统中添加一些代码,以明确地避免其他玩家/有用的实体掉在墙后(以防止这种作弊)。

如果您要使用多人游戏,并且希望防止在客户端/服务器之间修改数据包,那么可以通过自己的某种算法创建要发送的数据的校验和,并在另一端检查该校验和,这将是有效的。(出于各种质量检查目的,您可能最终都会这样做)。

对于大多数内存资源而言,也是如此,在帧的开头创建一个校验和,并在各个阶段进行验证,可以很方便地进行一些内存操作检测。

这是一个涉及很深的话题,但是希望这可以为您指明一个可以接受的方向。


甚至比将物体隐藏在墙下(仍然可以被黑客入侵)更好,根本不向客户提供有关该玩家位置的信息(或仅提供例如良好的3D音效所需要的位置)
Bart van Heukelom

17

在最极端的解决方案中,您基本上不会信任客户。对于MMO之类的游戏,用户不运行服务器,并且任何游戏逻辑都在服务器端处理。切勿授权客户说“我有X健康”或“我有X弹药”等。


4
如果您实际上有资源来运行专用服务器,那就太好了,但这是一种非常简单的查看方式。您很可能仍会在客户端上执行大量逻辑,而在服务器上执行逻辑的最小子集,并偶尔进行同步以执行基本规则。它也不一定能阻止所有客户端作弊行为,例如wallhacks /内存操纵来欺骗客户端以泄露有用的信息/等等
Rob Ashton 2010年

10

如果您拥有一个逻辑昂贵的系统,并且必须在客户端上完成大部分操作以节省服务器周期,则可以实施概率作弊检测系统。每隔几分钟,它就会选择其他几个参与者来进行仔细检查并在服务器上进行一致性检查。由于作弊者很少将他们的作弊行为限制在短期和罕见的时间内,因此最终被他们抓获。

这样做的另一个好处是,他们不会有快速的开发周期-如果服务器平均需要10个小时的游戏时间来关注您,那么每次您想看到的时间就是10个小时如果有什么用。而如果它的工作,它甚至更长的时间,因为他们不知道如果服务器已经给他们竖起了大拇指,或只是还没有得到身边给他们。


+1在性能方面,像IMO这样的随机方法是对更广泛问题的唯一现实答案。除了OnLive之外,也就是说,如果您仅定位美国。
工程师

5

针对第一人称射击游戏的瞄准辅助黑客也有很多类型,它们也可以通过插入图形库调用来工作。除了使墙壁透明之外,OGC反恐精英钩/ HL1还提供了多种选择。

如果在某个时刻将敌人的位置信息传递到具有广泛可用代码的较低层库中,则可以将这些调用挂接到其中,并使用位置,比例,旋转等数据来精确计算发射的最佳矢量对那个敌人。除内存和过程监控之外,像PunkBuster这样的反作弊系统通常还包括启发式检测(该玩家多久获得一次完美的射击,他们多频繁旋转180度才能一次击杀等)。

最终,在多人游戏中防止作弊的任务是玩猫和老鼠。随着新作弊技术的发展,新的反作弊方法也随之产生,然后,新的作弊技术就被避免使用新的反作弊技术。

正如Tetrad在回应中所说,“游戏安全性”的唯一硬性规定就是为客户提供尽可能少的信息,并尽可能少地信任客户。但是,不同类型的游戏会有不同的要求,这些要求可能会影响您遵守这些规则的程度。

在FPS游戏中,由于玩法的速度如此之快,因此通常不可能仅向客户端提供应该知道的有关此确切瞬间的数据。如果您不告诉客户拐角处有一个敌人,而玩家确实绕过拐角,则您必须在几毫秒内向他们发送该信息,否则就有可能让玩家被他们没有杀死的敌人杀死见过。

当前可用的针对这些问题的唯一“修复”可能是OnLive。由于该服务仅从安全地在数据中心运行的客户端提供音频和视频内容,因此作弊的唯一方法是从根本上创建一个可以分析传入视频流并据此采取行动的人工AI-这项任务很少,如果有的话,骗子就可以了。


3

上面的所有答案都很棒,但我还要补充一点:

某些游戏具有非常可靠的重播功能,该功能可以紧凑的格式保存游戏结束后每个游戏的重播,并以各种方式观看它-不同的玩家视角,实时统计UI等。

我非常熟悉的示例:《星际争霸2》(Starcraft 2)。暴雪阻止黑客的方法之一是在游戏重播时收到作弊证据。

在FPS中使用的一个示例是:如果您玩了一个游戏,并且怀疑对方欺骗了墙壁骇客,则观看了重播,然后看到在他的正常重播视野中,他不可能见过你,向拐角处投掷手榴弹,等等。

然后,您可以通过重播报告他,如果针对他的证据足够好,则将其禁止。据我所知,从事此事的公司在取缔禁令之前,只会采取严肃的证据,或采取多种手段证明同一行为。

因此,这不是一种反调试技术,它是一种用户报告系统,可以方便地人工辅助作弊。


0

这可能不是一个完整的答案,但是我在这里有一些建议。防止作弊的最佳方法之一是混淆或使用C / C ++。这样可以防止人们修改客户端代码。


值得一提的是,那里有很多去混淆器。还可以使用反射修改.Net(C#,XNA)游戏。据我所知,我认为C / C ++确实是一种很难篡改代码的方法。
user1306322

是的 我的意思是,混淆避免了容易反编译的代码不可读,并且C / C ++并不容易编译,它们都是不错的选择。
LiquidFeline 2013年

此外,如果您频繁修补游戏并更改可执行文件中的二进制偏移量或插入随机NOP,则没有黑客能够生存足够长的时间……
SirKnigget 2013年

@CPP_Person:实际上,C以易于编译而闻名。对于C ++,情况完全不同,从编译器的角度来看,这确实是一种复杂的语言。但是我不明白,为什么应该这么重要,编译某种编程语言有多么容易-您想防止人们编写作弊工具,而不是编写好的编译器-他们仍然会使用现有的C ++编译器-对我来说,反编译比使编译困难要有趣得多。
Kaiserludi 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.