《反恐精英》 cs作弊器和反作弊的工作原理

 綜述:

  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。讓他們有新的東西可供破解。

來源:遊星空