隨著硬體計算能力和演算法的進步,AI 自瞄漸漸浮現出來,我第一次聽到這個詞是在去年,正好前幾天看到 YOLOv7 推出的消息,就很好奇像我這種沒有自己訓練過模型,對於深度學習也沒什麼概念的人,多久時間能做出來。雖然製作過程中踩了不少坑,成果還是很令我滿意的。

外掛原理

在繼續今天的主題前,先解釋一下大部分遊戲外掛運作的原理

程式在執行時都會被載入到記憶體中,遊戲也不例外,當遊戲執行時,遊戲中出現的各種數據都以二進制的方式儲存在記憶體中,包含程式碼也是
因此,讀取記憶體並修改內容是大部分遊戲外掛的原理,通常會有幾個 base address,將其值加上不同的偏移量便可得到各種數據,當然,程式每次被載入時在記憶體中的位置是不固定的,但目前都是採用虛擬記憶體的技術,使得 base address 是固定的,如果遊戲沒有更新的話,基本上找到的 base address 都不會變

手法上來說,一般會挑選一些較固定可控的數據,透過其 address 往上找 base address,大部分 address 都是 base address 的值經過好幾次偏移得到的,這非常考驗能力和經驗,對於組合語言也要有一定的認識,逆向工程本就不是容易的事

找到 base address 及各種數據的偏移後,能做的事情就非常多了,可以直接讀寫數據,更進階的話,觀察遊戲內的一些觸發事件,找到處理事件的組合語言,利用工具修改就可以達到許多不可思議的功能

舉例來說,敵對子彈打到角色上會觸發事件,在該事件使人物扣血,那就可以利用血量的 address,找到哪裡改變了這個 address 的值,進而找到該部分的組合語言,又如前述,程式碼也是在記憶體中的,修改組合語言後程式碼在記憶體內的值也會修改,因此在遊戲執行時直接修改該位置的值即可達成修改組合語言的目的,比方說可以讓子彈打到角色身上不扣血等等,基本上大部分想的到的功能都可依此想法實做出來

而基於這種方式實現的自瞄比較單純,只要取得敵人位置,計算相對位置後模擬滑鼠訊號移動射擊即可

AI 自瞄

AI 自瞄的原理基本上和傳統自瞄原理是相同的,只是原本透過讀取記憶體取得敵人位置的步驟改成辨識圖片來定位敵人
雖然看起來只取代了一個步驟,但其實省去很多麻煩,就算先不考慮後續過偵測的問題,光是要找 address 就要花很大的力氣,並且通常隨遊戲更新,address 也會改變,更別說讀寫記憶體是很容易被偵測出來的,遊戲常常會崩潰,帳號很容易被鎖
而 AI 自瞄就很好的避免掉這些困難,而且訓練好的模型也不太需要更新

接下來先看一下基於 YOLOv7 實現的自瞄效果如何

基於 YOLOv7 自瞄 Demo

是在離線模式下 Demo 的,分數並不會上排行榜
這系列文章僅供學習研究之用,用於其他用途,任何後果請自行承擔

以我看到的數據,高手差不多 7 ~ 10 萬,職業選手差不多 11 ~ 13 萬左右,也有特意練習的人能打出更高的分數,可以看出效果是非常好的
並且受限於我的硬體性能和保持影片觀看性,我加了一些延遲,相信如果優化一下還能取得更高的分數

製作過程

上面展示的成果,研究加實作的時間不到兩天,只使用 50 張圖片做訓練,相較於傳統逆向開發的外掛,利用 AI 完成自瞄難度是非常低的,我會將實現的方式分為幾個步驟

  • 製作模型
    基本上製作模型是沒有任何難度的,花一些時間了解參數的意義及影響,標註好圖片,就可以直接產出模型了,並且訓練好後除非遊戲新增人物或多了一些影響判斷的東西,否則是不需要更改的

    甚至若沒有要求的話,用官方提供的模型就可以辨識出人物了,而一些場景較單純的遊戲,只需要極少的資料就可以有不錯的預測效果,像我這次選擇的遊戲,在標註好 10 張圖片時我有先訓練測試,效果其實和目前 50 張圖片訓練出來的相差無幾

  • 引入模型並預測
    製作好模型後,就可以在程式中載入自己的模型,遊戲過程中利用螢幕截圖的方式將圖片送進模型預測,就可以取得畫面上敵人的位置了

  • 移動滑鼠射擊
    這步驟也是最困難的,雖然已經取得了敵人的位置,但在 FPS 遊戲中是不支持絕對移動的,只能使用相對移動
    使用相對移動的話要考慮的事情就非常多了,圖片和遊戲解析度、遊戲滑鼠靈敏度、系統靈敏度等等
    這也在我這次開發過程中佔用最多時間,需要不斷嘗試,微調移動參數才能達到好的效果

對於 FPS 遊戲的危害

如前述,傳統遊戲外掛大部分都要讀取記憶體,而目前也有許多不錯的應對方法,但基於物件偵測的自瞄不需要對遊戲本身動任何手腳,這就使得要用非人工的方法反制變得非常困難,如果加入一些不穩定因素,人工辨別也會有一點難度。更極端一點,將遊戲畫面擷取下來,在其他主機做計算,並透過物理方式移動滑鼠,要偵測外掛的難度又更高,連透過特徵碼判斷的方式也會失效。並且根據我的經驗,逆向開發的外掛花費的時間得是好幾倍以上,更別說模型訓練好後在一些遊戲是可以共用的

AI 自瞄的缺點應該就是標註圖片比較花時間及性能要求較高,除此之外優點很大程度上大過缺點,對於 FPS 遊戲的危害絕對是非常大的