MMO的反作弊问题和解决方案?[关闭]


14

大多数在线游戏都遭受这个问题的困扰,并且有一些软件公司可以解决这个问题,但是从最近的情况来看,我发现大多数公司都在努力避免那些程序创建自己的系统(暴风雪与守望者,永恒之塔与自己的支票等等) ...),但要防止这种情况是非常困难的情况...

只是想说我作为社区Wiki提出了另一个问题主题,专门用于发布应用程序,它是功能,而在此问题背后的想法不是列出这些内容,而是更多地了解您的尝试,沿途问题以及可能的解决方案,一段代码(如果应用)等等。

你们为了(尝试)防止此类行为而使用了哪种保护措施:

  1. 反作弊软件 (请说明您所遇到的问题,原因和可能的问题,例如aion由于大量的兼容性问题而在Beta阶段停止使用GameGuard并遭到用户的抱怨)
  2. 您自己的代码?(您通常会执行哪种类型的验证来确定恶意玩家,例如speedhack,针对速度+最后位置来验证新位置等)。
  3. 没有,我不在乎吗?(您想分享任何个人原因或意见吗?)

与您要发布的问题相关的任何有趣的代码?

随意修改我的英语语言文章,真是太好了吗?**


1
标签已制作。如果您希望它包含大量答案,请使其成为社区Wiki。它将允许多个人编辑单个答案,而不是人们不断地重申它们。
杰西·多尔西

1
举一个如何可能有益的例子。看看这个:gamedev.stackexchange.com/questions/480/...
杰西·多尔西

感谢您的评论和链接,我现在将检查出来,以我的观点来看,这种游戏开发问题是一个很好的讨论话题,但是对于我相信的MMO游戏,大多数我还是不确定,社区当时很小,我害怕被这样一个问题开头所困扰,所以我不确定,谢谢您创建标签:)
Prix

Answers:


22

不幸的是,阻止人们作弊确实很困难,这就是为什么创建像Punkbuster这样的软件来试图抓住其中的一些人的原因。

对于MMO,您可以做的最大事情就是不信任客户发送给您的任何东西。客户不能告诉您玩家已经移到了哪里,对玩家造成了多大的伤害,等等。相反,您应该将控制输入发送到服务器,确认它是可行的(按“攻击”按钮例如,在1秒内1000次无效),然后在服务器上更新仿真。然后,您会将游戏新状态的相关部分发送回客户端。

在验证用户输入时,还可以在其输入中查找趋势。如果您不允许使用宏,则可以通过注意用户在过去30分钟内以完美的1秒间隔在完全相同的像素坐标处单击同一按钮来捕获它们。

客户本身就是人们作弊的主要场所,因此Punkbuster之类的程序可以减少wallhacks,瞄准机器人等的攻击。除此之外,不信任客户并验证客户发送给您的任何内容都将有助于减少作弊。


谢谢您的贡献,我希望看到更多的人在努力。确实,这是一个非常难解决的问题...还有一些人为了阻止反作弊引擎而对游戏进行严厉打击,这是从它那里调用的……这会使事情变得更加艰难……除非您在线上GM验证给定的人或您所说的其他验证。您对社区Wiki的问题有何看法?我应该保持原样还是要进行一些更改以使其适合它;
Prix

除非您正在寻找特定的答案,否则可能是社区Wiki。
肖恩·詹姆斯

有关Punkbuster如何工作以获取更完整答案的更多详细信息?
克里斯·劳埃德

好的答案-没有“一种方法可以全部统治”-大多数游戏都有多个“攻击向量”。通常,风险评估比什么都重要,即如果有人可以欺骗系统X等,对社区的影响是什么
zebrabox 2010年

我相信,即使拥有最强大的反欺诈程序,黑客攻击也是不可避免的。如果技术上离线但不在线,则作弊是可以的。在线玩游戏更加公平。是这样吗?
David Dimalanta,

8

正在记录。服务器上发生的所有事情都应该记录下来,最好是来自客户端的一切都记录下来。客户端本质上是不可信的,但是即使记录不可信的数据也可能很有启发。

一旦一切都记录下来,作弊检测就成为分析数据的问题。一些作弊行为是显而易见的(值超出可接受范围,例如能够在角色之间移动的速度远远超过化身通常所允许的速度),而其他作弊行为则更加隐蔽(例如,瞄准机器人可以在人为的短时间内完成像素的完美瞄准)。有些甚至更难检测到(例如wallhacks),但是尽可能多地记录可以自动和手动检测。上面有各种各样的文章,但是通常在自动检测中很容易发现作弊,因为它们是如此的可预测/可重复,而人类玩家却无法做到。

由于绝对不可能记录所有内容,因此分层日志很有用。例如,用户作弊的报告,或检测作弊可能性的简单基本日志记录(得分远高于统计曲线),足以标记特定的客户/帐户/ CD-密钥以进行更详细的日志记录,然后在无合理怀疑的情况下用来证明有人在使用作弊手段。

当您发现作弊时,您要做的完全是另一回事。事实之后的帐户禁止是好的,尤其是当您具有足够可靠的自动检测机制时。提前禁止既会警告作弊者被检测到,也由于不确定的检测机制而冒着误报的风险。禁止太晚会冒着破坏他人游戏体验的风险。这是一个非常灰色的区域,需要开发人员做出判断。


2

假设游戏中的所有重要工作都在服务器端进行,则作弊的可能性很小或没有。如果要限制宏化或使人们讨厌包编辑,请让程序定期扫描其过程中处于活动状态的模块。例如,如果找到WpeSpy.dll,您将知道它们已附加WPE。对其他常用工具执行此操作。可以解决这个问题,这是一场激烈的竞争,也是一个失败的原因,但是,如果您的游戏规模较小,则可以很容易地将搞砸的人数减少大约十倍...这可能很好对你来说足够了。


感谢您的贡献,您是否使用过任何防作弊软件,或者是否需要解决此类问题?如果是这样,很高兴听到这一消息。
Prix​​ 2010年

2
我没有使用任何第三方反作弊软件,不是。但是,当我第一次开始对在线RPG进行编码时,当客户端发送“攻击”时,我的服务器只是将其称为“攻击”,而不是将请求放入队列中。这些是防止作弊最重要的。速攻,在服务器上进行所有计时,因此它们几乎没有优势,还会发送时间戳,如果漂移太大,您会知道它们正在使用一个。标记他们的帐户,但不要立即踢他们-立即反馈对于某人了解您的软件检测到的东西是一种很好的方式。
詹姆斯·贝灵格

1
我喜欢这一部分but also send timestamps, and if you get too much drift, you'll know they are using one. Mark their account, but don't kick them immediately -- immediate feedback is a great way for someone to know what your software detects.,最近我正在研究标记用户的时间戳和警告系统,目前我已将播放器列在我现在正在处理的列表中,如果某些用户滥用率很高,它将向以下用户发送警报:在线通用汽车进行验证...
Prix
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.