2008-09-27 40 views
7

一個我們的下一個項目應該是一個基於微軟Windows遊戲(用C#編寫,與WinForm的圖形用戶界面和集成的DirectX顯示器控制),誰願意放棄獎品最好的球員客戶。這個項目的目標是運行幾年,包括錦標賽,階梯,錦標賽,玩家與玩家行動等等。防護自動化

這裏的一個主要問題是作弊,因爲如果玩家能夠 - 例如 - 讓一個定製的機器人爲他玩遊戲(更多的是在戰略決策方面而不是在打很多小時)。

所以我的問題是:我們有什麼技術possibilites探測機器人的活動?當然,我們可以跟蹤的發揮小時數,分析策略,以檢測異常等,但就這個問題而言,我會更想知道的細節,如

  • 如何檢測是否有其他應用程序做定期截圖?
  • 如何檢測其他應用程序是否掃描我們的進程內存?
  • 什麼是確定用戶輸入(鼠標移動,鍵盤輸入)是否是人爲生成且不自動的好方法?
  • 是否有可能檢測到另一個應用程序是否請求有關我們應用程序中控件的信息(控件的位置等)?
  • 還有什麼其他方式可以讓作弊者收集有關當前遊戲狀態的信息,將這些信息提供給機器人並將確定的動作發送回客戶端?

您的意見是高度讚賞!

+0

您可以輕鬆地將另一臺計算機掛接到相機以及假鍵盤/鼠標。哪一個會打敗所有人 – 2008-09-29 20:14:42

+0

你不需要另一臺相機 - 在虛擬機內部運行它,機器人將在外面跑步。 – 2010-07-02 21:40:53

回答

0

你應該看看什麼進入PunkBuster的,Valve反作弊,併爲一些指針其他一些反作弊的東西。

編輯:我的意思是,看看如何他們做到這一點;他們如何檢測這些東西。

+0

我們已經檢查過Punkbuster等人,但據我們瞭解,這些工具的主要目的是檢測已知的作弊,漏洞等。在我們的情況下,這是不適用的,因爲有限的用戶羣,它會更有可能遇到定製作弊。編輯:感謝您的新答覆。我明白你說的是什麼,但Punkbuster比如說(其實和這個領域的其他產品一樣),主要是作爲一種病毒掃描,尋找可疑的內存指紋,進程,對API的改變等等(另請參閱http://en.wikipedia.o – Grimtron 2008-09-27 08:41:59

5

只是一個想法如果'騙子'在虛擬機(如vmware)中運行您的軟件並且對該窗口執行屏幕截圖?我懷疑你可以爲此辯護。

你顯然不能抵抗'類比差距',例如騙子的系統使用高質量的相機制作外部屏幕截圖 - 我想這只是一個理論問題。

也許你應該調查國際象棋網站。國際象棋中有很多錢,他們也不喜歡機器人 - 也許他們已經提出了一個解決方案。

+0

關於虛擬機的事情 - 您可以使用Shader Model 2.0作爲遊戲,目前沒有虛擬機可以在硬件中運行。 – OregonGhost 2008-09-27 08:51:01

0

我不知道的技術細節,但Intenet的國際象棋俱樂部的BlitzIn計劃似乎已經集成程序切換檢測。這當然是爲了檢測運行一邊的國際象棋引擎的人,而不是直接適用於你的情況,但是你可能能夠推斷應用如果進程X在接下來的Y週期中佔用超過Z%的CPU時間,那很可能一個bot運行。

作爲比賽規則的一部分,除了「你不得在玩遊戲的時候運行其他任何事情以獲得獎品」。另外,「任何時候我們可能會因爲任何原因決定你使用機器人並取消你的資格」這個規則也有助於上面的啓發式方法(用於獲獎的ICC國際象棋錦標賽)。

所有這些問題很容易被上面的規則1解決:

* how to detect if another application makes periodical screenshots? 
* how to detect if another application scans our process memory? 
* what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated? 
* is it possible to detect if another application requests informations about controls in our application (position of controls etc)? 

我認爲一個好的方法,使難問題的破解是有遊戲狀態的唯一權威副本在你的服務器,只發送到客戶端並從客戶端接收更新,這樣你就可以嵌入到通信協議本身的客戶端驗證中(它沒有被破解,因此檢測規則仍然存在)。那麼,積極監控發現的新怪異行爲可能會讓你接近你想要的位置。

+2

那麼運行該軟件的舊計算機又如何?處理器的使用情況是一個非常模糊和模糊的方式來檢測自動化 – 2008-09-27 09:39:34

+0

它不得不絕對的工作,但相對於計算機本身。在任何情況下,超過啓發式,評論的其餘部分是最相關的,imo – 2008-09-27 10:56:23

3

對自動化的最佳保護是不需要磨削的任務。

話雖這麼說,檢測自動化的最佳途徑是積極參與的用戶和需要定期CAPTCHA樣測試(除了沒有圖像等)。我建議使用數千個簡單的一次性問題的數據庫,這些問題每隔一段時間就會提交給用戶。

但是,根據你的問題,我想說你最好的選擇是不要在C#中實現反自動化功能。您很少有機會從託管代碼中檢測寫得好的黑客/殭屍程序,特別是當所有黑客必須做的只是進入ring0以避免通過任何標準方法進行檢測。我推薦一種類似監獄的方法(可以下載的模塊,您可以隨時更新),並結合內核模式驅動程序,該驅動程序掛接所有的Windows API函數,並監視它們進行「不適當」的調用。但是,請注意,您會遇到很多誤報,因此您不必將自己的禁止系統建立在自動數據基礎上。在禁止之前,始終要對它進行人性化的審視。

1

我有PunkBuster的和這種softwar如何工作沒有深入的瞭解,但是這是我要走的路:

Iintercept調用該處理記憶的東西一樣ReadProcessMemoryWriteProcessMemory的 API函數等等。

你會發現,如果你的過程是參與通話,記錄它,和蹦牀回調到原來的功能。

這應該也適用於屏幕截圖,但您可能需要截取BitBlt函數。

下面是關於函數截取一個基礎教程: Intercepting System API Calls

7

我寫d2botnet,一個.net暗黑2自動化引擎而回,有事你可以添加到您的事情清單,注意是畸形的/無效/僞造的數據包。我假設這個遊戲將通過TCP進行通信。數據包嗅探和鍛造通常是遊戲(在線反正)自動化的第一種方式。我知道暴雪會檢測出畸形的數據包,但我試圖遠離d2botnet。

因此,請確保您檢測到無效數據包。加密它們。哈希它們。做點什麼來確保它們是有效的。如果你仔細想想,如果有人能夠確切地知道每個數據包意味着什麼來回發送,他們甚至不需要運行客戶端軟件,這使得任何基於進程的檢測成爲一個有爭議的問題。因此,您還可以添加某種基於數據包的挑戰響應,以便您的cleint必須知道如何響應。

2

在應用程序中監聽鍵盤和鼠標輸入的常用方法是使用SetWindowsHookEx設置窗口鉤子。 供應商通常會在安裝過程中嘗試保護他們的軟件,這樣黑客就不會爲他們的應用程序自動化並破解/查找串行。 Google術語:「Key Loggers」... 這是一個article,它描述了防止它的問題和方法。