cs作弊器和反作弊的工作原理

2010-08-28 10:47:45来源:西部e网作者:

  Cheating-Death(以下简称C-D)

  和其他反作弊软件的主要不同之处在于它不是*侦测已知作弊软件的特征,而是尝试让作弊不那么有效,并防止作弊者获取信息来防止作弊。在大多数情况下,作弊因此被阻止。

  侦测作弊的观念

  侦测作弊听起来简单——如果你注意到某人正在作弊,那么就把他踢出去。问题在于没有一种普遍的,可*的方法去把作弊软件和别的正常的软件区分开。因此,反作弊软件被迫以已知作弊软件的特征为线索搜寻作弊者。服务器端的反作弊软件正是这样工作:一旦发现某个作弊软件,就把它的使用者踢掉。

  此方法的问题在于作弊软件的作者很容易就可以修改他们的作品,使其变得不一样。同样,如何编写自己的作弊器的信息很多,所以新作弊软件层出不穷。要与之对抗,反作弊软件采用更新已知作弊软件列表的方法。当一个新作弊器公布后,列表立即更新。现在服务器端的反作弊软件使用不间断更新的作弊器列表,发现一个,踢掉一个。

  可见,这并不是一个特别好的方法。事实上,这方法相当不可*,因为它需要一个重要的条件为补充——惩罚。通常的惩罚是在服务器上禁止某玩家。言外之意是即或无法抓住所有作弊的人,你至少能阻止以往作弊的人进入服务器。这也能告诫试图作弊的人。现在反作弊软件拥有不断更新的作弊软件列表和作弊者名单,一旦发现有作弊器或有过去曾作弊的人存在,它就踢掉他。

  你或许认为这的确可行,但事实上不太有效。问题在于如果你在一个服务器上禁止了某人,他们只需进入另外的服务器即可。目前有一些全球作弊者数据库正在运作,其中一个甚至整合进了反作弊软件。然而,许多问题出现了:这样做合法吗?数据库由谁维护?作弊者的名字在数据库中保留多久?如果某人没有作弊却被放进数据库,怎么办?如果你不知情但你的孩子或朋友在你的机子上尝试作弊器,怎么办?反作弊软件出错导致错误的侦测怎么办?如果一个服务器要禁止某人,而另一个却不希望如此,怎么办?谁将负责判断这一切的一切?

  所有这些问题都对作弊者数据库的功能性和公平性提出了质疑:可能出错的地方很多,维护也很消耗精力。综上所述,侦测作弊的概念瑕疵百出,必须更新。

  《半条命》如何工作

  那么如何不侦测作弊软件的特征就能阻止作弊?要明白这点,必须首先了解一些《半条命》(以下简称HL——译者)多人游戏运作的原理。当你玩HL的时候,你的电脑成为一个客户端(Client)。客户端负责收集你的键盘和鼠标指令,并绘在屏幕上。客户端和服务器相连。服务器注意所有客户端的状态。它发给客户端信息,告诉它每个人在哪里,在做什么。

  客户端由两部分组成,引擎和客户端MOD。引擎处理和服务器的连接,在屏幕上绘图,并获取键盘和鼠标输入的信息。MOD部分处理和你玩的某个特定游戏相关的事情。每个游戏都有自己的MOD。如果你装了HL和CS,那么就会有一个HL的MOD,还有一个CS的MOD。但是只会有一个引擎。所有的MOD都使用相同的引擎。

  引擎和MOD互动使你机子上的游戏顺利运行。大多数作弊软件的原理是他们把自己楔入引擎和MOD之间。引擎和作弊器“对话”,作弊器再把信息传递给MOD。同样,MOD和作弊器“对话”,作弊器再传给引擎。引擎和MOD仍然相关联,表面上看一切都好,其实两者实际上在通过作弊软件“交流”。这些作弊软件通常被叫做“客户端钩子”(”clienthooks”)。

  既然作弊软件栖身于引擎和MOD之间,它可以做它想做的任何事情。常见的事情是在屏幕上画出额外的信息,或是让你瞄得更准。但是它同样可以让你像个白痴一样转着圈跑,丢掉你的武器,或者自杀。完全取决于作弊软件的作者想做什么。

  另外一种正在变得流行的做法是把作弊软件伪装成3D驱动程序(OpenGL或D3D)。当游戏引擎以为一切正常时,作弊程序正分析渲染数据,然后再把它传给真正的驱动程序。(它把自己“裹wraps”在真正的驱动程序外围。)虽然作弊器用此方法得到的信息不如直接介入引擎和MOD之间获得的信息多,但是也足够分析出正被绘制的任何目标的位置。同传送鼠标和键盘事件的程序连接起来,此类作弊软件也能有很高的效率。他们更难被阻挡,因为介入引擎和驱动程序之间的途径比介入引擎和MOD之间要多得多。这些作弊软件通常被称为“包装工”(“Wrapper”)。

  防止作弊

  有两个基本的问题需要解决。第一个是引擎提供给MOD有关其他玩家位置的详细数据。第二是必须和引擎绘图的做法一致。

  MOD确实不需要知道玩家的确切位置。它仅仅需要知道一个玩家大概在什么位置。为了有效瞄准,作弊软件需要知道玩家的准确位置。如果引擎并不告诉MOD玩家的准确位置,而是只告诉大概的位置,自动瞄准将会失效。

  第二个问题是要和引擎绘图的方法一致。它由后向前绘图。比如,如果一个玩家站在墙后,引擎先画出玩家,然后画出前面的墙。通常情况下,这样做效果很不错。问题出在如果一个作弊器已经使墙变得透明,你将能看见透明强后面的玩家。这种形式的作弊叫“穿墙”(wallhacking)。如果引擎不画出不可见的玩家,那么透视将失效——使用穿墙程序得到的只是一堵堵透明的墙而已。


  Cheating-Death如何工作

  C-D的工作方式是把自己楔入引擎和作弊软件之间。这正是C-D和别的反作弊软件的不同之处。它不会在游戏外运行,而是介入到游戏内部。以下是C-D的做法:

  如果C-D侦测到某玩家对你不可见,它会把这个玩家的位置“挪”到你背后。这样做的好处在于:首先,它使“穿墙”失效。即使你让墙变得透明,也无法看见其后的敌人,直到敌人的某部分在屏幕上为可见。

  第二,它使雷达和ESP方块作弊失效。ESP方块画在玩家顶部,会透过墙显示。如果一个玩家蹲在墙的另一面,玩家的位置将会在墙上用ESP方块标记出来。即使你看不见玩家,ESP方块也能给你他们的准确位置。

  另外,C-D通过使MOD掌握的玩家位置信息不精确,从而毁掉ESP,自动瞄准或其他类似作弊功能。它并不影响“碰面判定”(collision detection),因为这是由引擎完成的,而引擎仍掌握精确数据。

  最后,C-D监控一些引擎的数据中常被作弊软件介入修改的地方。如果C-D发现某处被改动,它会断开玩家的连接。这样做使作弊器无法获得它们需要的关键数据,并使得它们不得不改变获取信息的途径——它们将无法简单地使自己看起来正常就能骗取数据,而不得不寻求更困难的方法。

  客户端的解决方案

  我们意识到我们无法阻止破解者破解C-D。运行在客户端的任何东西都有可能被破解。我们最新版本的C-D最终也将被破解,况且编写作弊软件的人非常聪明。然而当它被破解时,我们将改变行事方法并发布新版本德C-D。让他们有新的东西可供破解。
关键词:cs