一種基於網絡協議的在線遊戲反外掛系統及方法與流程
2023-04-29 00:56:51 2

本發明涉及一種基於網絡協議的在線遊戲反外掛系統及方法,屬於計算機遊戲領域。
背景技術:
一般的網路遊戲面對的最嚴峻的問題就是外掛問題,指主要通過網絡技術篡改服務端與客戶端正常的通信,達到篡改正常數據,或者完成不正常操作,獲取不正當收益的目的。這種外掛技術嚴重破壞了遊戲的公平與平衡性,造成大量玩家流失,對網路遊戲的開發與運營商造成了大量的直接與間接經濟損失。
大多數加密方案假定一個可信的發送者和一個可信的接收者要通過一個不可信的通道進行通信。一般發送者不會故意去欺騙接收者,但這恰恰是在線遊戲設計者所要面對的問題。一些玩家是不能信任的,或者更糟,他們完全可以訪問加密算法和通過客戶端程序進行的所有通信。
技術實現要素:
針對現有技術的不足,本發明的技術方案提供了一種基於網絡協議的在線遊戲反外掛系統和方法,對一般遊戲反外掛實現的現狀與造成的原因加以深入分析,分析網絡系統有哪些流程上的特點,總結了一套在線遊戲反外掛的網絡協議技術,以達到保護遊戲服務端與客戶端數據安全,維護正常的遊戲秩序的目的。
本發明的技術方案包括一種基於網絡協議的在線遊戲反外掛系統,其特徵在於,該系統包括:協議交互模塊,用於使用網絡協議完成客戶端與服務端的報文數據交互,其中伺服器和服務端可以是發送端,還可以是接收端;反篡改攻擊模塊,用於對客戶端與服務端的報文數據交互進行校驗和操作,校驗出被篡改的報文數據;反重放攻擊模塊,用於分別在客戶端與伺服器部署標識碼生成器生成對應的唯一標識碼,對比接收端與發送端的唯一標識碼,若不匹配則進行對應的處理;反綜合攻擊模塊,用於在報文數據增加無關隨機數據。
根據所述的基於網絡協議的在線遊戲反外掛系統,所述報文包括:管理信息的包頭以及包含要進行通信的實際數據的有效負載。
根據所述的基於網絡協議的在線遊戲反外掛系統,所述協議交互模塊還包括:協議定義子模塊,用於完成客戶端及伺服器之間的報文數據交互,以及對任何對發送端的有效負載序列進行的修改進行檢測;協議實現子模塊,用於使用接口在發送端與接收端之間創建雙向連接,對每個方向,對象維護四個線性疊加隨機數生成器作為協議狀態機。
根據所述的基於網絡協議的在線遊戲反外掛系統,該系統還包括反逆向工程攻擊模塊,其特徵在於,該模塊用於執行:當遊戲發布時刪除所有代碼中的符號和調試信息;將緩衝區加密及緩衝區解密與其他網絡代碼進行合併;初始化時,生成所述協議實現子模塊運行時所需的隨機數;在遊戲不同的客戶端版本添加不同的加密機制。
根據所述的基於網絡協議的在線遊戲反外掛系統,所述反篡改攻擊模塊中的校驗和包括:發送端計算報文的校驗和並且將之與報文一起發送給接收端,接收端根據收到的報文重新計算校驗和,如果計算得到的校驗和與發送者的校驗和不匹配,則報文為篡改攻擊,進一步將報文破壞並且刪除。
根據所述的基於網絡協議的在線遊戲反外掛系統,所述反重放模塊包括:使用第一標識碼生成器在發送端的報文中添加唯一標識碼,對應地在接收端使用第二標識碼生成器進行對應的唯一標識碼,進而將發送端生成的唯一標識碼添加至報文並發送至接收端,接收端對發送端發送的標識碼進行接收並與自身生成的標識碼進行對比,若無法匹配則將報文進行對應的處理。
本發明的技術方案還包括一種基於網絡協議的在線遊戲反外掛系統的方法,該方法包括:使用網絡協議完成客戶端與服務端的報文數據交互,其中伺服器和服務端可以是發送端,還可以是接收端;對客戶端與服務端的報文數據交互進行校驗和操作,校驗出被篡改的報文數據;分別在客戶端與伺服器部署標識碼生成器生成對應的唯一標識碼,對比接收端與發送端的唯一標識碼,若不匹配則進行對應的處理;在報文數據增加無關隨機數據。
本發明的有益效果為:防止服務端客戶端網絡通訊數據被篡改,禁止非法操作,杜絕非正當遊戲收益,保障玩家的公平性與遊戲世界的穩定性,保障遊戲運營的良好安全,保障網路遊戲的開發與運營商正常的商業收入的目的。
附圖說明
圖1所示為根據本發明實施方式的總體流程圖;
圖2所示為根據本發明實施方式的協議實現機製圖;
圖3所示為根據本發明實施方式的反逆向工程攻擊流程圖。
具體實施方式
為了使本發明的目的、技術方案和優點更加清楚,下面結合附圖和具體實施例對本發明進行詳細描述。本發明的基於網絡協議的在線遊戲反外掛系統和方法適用於客戶端遊戲、手機遊戲、網頁遊戲。
圖1所示為根據本發明實施方式的總體流程圖。其包括定製協議報文包頭、加載協議有效負載,進而執行反篡改報文攻擊、反報文重放攻擊、反綜合技術攻擊及反逆向工程攻擊。其具體如下(1)-(5)。
(1)其中協議定義包括定製網絡謝謝以及報文結構。協議設計主要針對於有一個或多個不可信客戶端與一個可信中央伺服器的客戶/伺服器類型在線遊戲。對客戶/伺服器模式的遊戲來說作弊的結果很嚴重,因為作為惟一可信實體的伺服器維護著遊戲狀態並驗證所有客戶端命令。如果遊戲狀態被長久地保持住,一個成功的欺騙行為會使數以千計的玩家受到影響。
在客戶/伺服器類型系統下考慮協議安全特性。客戶端和伺服器通過網絡通道發送可靠(通常是tcp)或不可靠(udp)的報文來進行通信。雖然客戶端也可以與其他客戶端直接進行通信(通常用於聊天或語音),假設只有在客戶端和伺服器之間的通信數據才需要得到保護。
每個報文包括兩個部分:包含管理信息的包頭,和包含要進行通信的實際數據的有效負載。網絡協議的目標是將發送者的原始有效負載發送到接收者。任何對發送者的有效負載序列進行的修改都應該被檢測到。只處理有效負載的發送,將報文的順序和可靠性問題交給低層協議棧去解決。
對定製協議的實現。使用一個c++類對象封裝了在發送者和接收者之間的一個雙向連接。對每個方向,對象維護4個線性疊加隨機數生成器作為協議狀態機。它們被初始化為靜態值,伺服器在其第一個報文中將隨機數種子發送給客戶端。
圖2所示為根據本發明實施方式的協議實現機製圖,該類將通過以下機制使用狀態機,如下(a)-(d)所示:
(a)異或報文頭部的長度欄位。
(b)一個防止報文重放攻擊的消息序列號。
(c)決定每個報文中垃圾數據的長度。
(d)生成對有效負載進行異或操作的隨機位。一個單獨的隨機數生成器生成實際的垃圾數據。在調試期間,則可以將垃圾數據設置為固定常數以便於調試。
(2)反篡改報文攻擊
大多數針對協議的黑客攻擊都是偶發的:他們嘗試更改報文的字節看看會發生什麼。針對此類攻擊的第一線防禦是一個簡單的校驗和。校驗和是通過組合報文中每個字節得到的一個短數字。發送者計算報文的校驗和並且將之與報文一起發送給接收者。接收者根據收到的報文重新計算校驗和;如果計算得到的校驗和與發送者的校驗和不匹配,則報文被破壞並且應該被丟棄。校驗和的計算範圍必須包含包括包頭在內的整個報文,以使接收者可以像檢測有效負荷一樣檢測包頭的有效性。
一個完美的校驗和算法能對任意修改過的報文計算出不同的值。當然如果這個完美的校驗和算法太長則會變得根本不實用。哈希函數具有相同的設計目標並可以構造極好的校驗和。特別是實用的單向哈希函數,它可以將輸入不規則地映射到一個很寬的範圍,以致通過哈希值來重新構造輸入的任意一個部分在實際中不可能辦得到。md5算法就是一個經過廣泛測試,可以公開使用的單向哈希函數,並且對於遊戲它的速度也足夠快。
(3)反報文重放攻擊
在報文重放攻擊中,惡意用戶從客戶端捕獲報文(通常通過報文監聽)然後多次發送。通常使用報文重放以超過遊戲允許的速度來執行命令,即使客戶端有時間檢測。例如客戶端可以使用一個計時器每秒向伺服器發送一個特定命令,不管玩家以何等頻率執行此命令。使用報文重放,一個單獨用戶可以每秒發送相同的命令幾行次。
系統設計者可以通過在伺服器端也設置一個類似的每秒一次的計時器來阻止這種攻擊。但因為可變的網絡延遲,這種防範措施實際上是不可行的。雖然它能檢測大部分報文重放攻擊,但變化的網絡延遲可能導致報文同時抵達伺服器端,導致合法的命令序列被拒絕。當然不希望的安全機制將合法玩家當成欺騙者。
要預防報文重放,每個報文需要包含一些狀態信息,因此即使相同的有效負荷也要有不同的位模式。一個隨著每個報文發送而累加的計數器之類的方法就可以做到,儘管這種策略使攻擊者能夠很容易的預期。一個較好的方法是使用一個狀態機為連續的報文生成連續的識別號。一個快速並且足夠重要的計算方法是常用於系統庫中的線性疊加隨機數生成器。這樣的生成器以下列方式操作:state=(state+a)*b。這裡的a和b是仔細挑選出來的整數。
發送者和接收者都為他們的連接保持一個線性疊加隨機數生成器。當發送一個報文時,發送者生產一個隨機數並將之添加到報文中,同時步進隨機數生成器。接收者使用自己的生成器檢查收到報文中的隨機數,如果數字不匹配則表示報文已經被篡改;如果數字匹配,則接收者也步進隨機數生成器以準備接受下一個報文。
這個策略有兩個重要之處。首先是發送者和接收者如何初始化並同步他們的狀態機。他們可以使用相同的固定種子啟動各自的狀態機,這樣一來初始報文流的位模式總是一樣,因而會成為可被分析的漏洞。替代辦法是,由伺服器使用隨機生產的種子值初始化其狀態機,並在其第一個消息中將之發送給發送者。
第二個重要之處是如何在通信中保持狀態機的同步。在一個可信連接中,包永遠不會丟失,因此同步是可以有保障的。當報文被丟棄或重新排序,無論如何,情況將變得更加重要。如果消息被丟失,發送者的狀態機將比接收者的狀態機多步進一次;後來的報文即使合法也將都被拒絕。一個簡單的解決方案是使用一個在每個報文中發送的真實序列號(大多數遊戲總是包含這個序列號,以通過不可信傳輸層協議提供可信連接)。通過這個序列號,接收者可以決定需要步進它的狀態機多少次以適合當前報文。如果應用程式允許無序發送,較老的狀態機狀態必須被保存以便在被打亂次序的報文抵達後使用。多數運行時庫中的隨機函數可以被作為隨機數來源。
(4)反綜合技術攻擊理想情況下,為了阻擾對有效負載的分析,兩個具有同樣有效負載的報文在其位模式上應該有儘可能少的相關性。一個簡單的消除兩個集合之間相關性的方法是將其數據與一系列隨機位進行異或操作。假設在前面描述的報文重發預防中,發送者和接收者已經同步了隨機數生成器。因此發送者可以為每個報文生成一個隨機數序列,並將之與報文有效負載進行異或操作;接收者生成相同的數字序列並以相同的方式獲取原始數據。
事實上兩個具有相同長度的報文可能給攻擊者一個報文編碼相似數據的線索。要進一步幹擾攻擊者,每個報文可以包含一些可變長度的隨機垃圾數據,其僅用來改變報文長度。垃圾數據長度也由另外一個同步狀態機決定。發送者檢測其狀態機決定需要生成並插入多少字節的隨機數作為垃圾數據到發送的報文中。接收者只需要忽略垃圾數據。增加垃圾數據總量可以進一步隱藏有效負荷,但需要消耗額外的帶寬。一般來說應用程式的帶寬都是有限的,因此垃圾數據的平均長度應該大大小於有效負荷的平均長度。
(5)反逆向工程攻擊
客戶端包括完整的加密算法,總是可以進行逆向工程;這是很難解決的問題,也是任何阻止協議篡改的機制的根本弱點。可以採用以下的一些步驟防止逆向工程,如2所示:
當公開發布時刪除所有代碼中的符號和調試信息;
不要將緩衝區加密和解密放在一個獨立的函數中;而要將之與其他網絡代碼合併到一起。這是一個值得以可維護性換取安全性的地方;
運行時計算「魔術數」(例如初始化隨機數種子),而不是將其值直接保存在可執行文件中;
在每個版本的客戶端中包含一個好的加密機制,甚至包括早期測試版。如果任意一個客戶端版本缺乏加密,用戶就可以記錄從該客戶端發出的未加密報文流,並可以使用其知識攻擊後續版本的加密機制。
以上所述,只是本發明的較佳實施例而已,本發明並不局限於上述實施方式,只要其以相同的手段達到本發明的技術效果,都應屬於本發明的保護範圍。在本發明的保護範圍內其技術方案和/或實施方式可以有各種不同的修改和變化。