專(zhuān)利名稱(chēng):一種防止在網(wǎng)絡(luò)游戲中使用外掛的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)游戲領(lǐng)域,尤其是涉及一種防止在網(wǎng)絡(luò)游戲中使用外掛的方法。
背景技術(shù):
在網(wǎng)絡(luò)游戲領(lǐng)域,外掛是指某些人利用自己的電腦技術(shù),專(zhuān)門(mén)針對(duì)一個(gè)或多個(gè)網(wǎng)絡(luò)游戲,通過(guò)改變網(wǎng)絡(luò)游戲軟件的部分程序,制作而成的作弊程序。用戶(hù)利用外掛這種作弊手段可以輕易得到其他正常用戶(hù)無(wú)法得到,或必須通過(guò)長(zhǎng)期運(yùn)行程序才能得到的游戲效果,表現(xiàn)有許多種,比如在角色扮演游戲中,使用外掛者比正常用戶(hù)奔跑快、攻擊威力加大、獲得更多的游戲道具等,從而對(duì)游戲本身和正常用戶(hù)都造成嚴(yán)重影響,這種使用外掛侵犯他人權(quán)利的行為是法律所不允許的,但是,目前還沒(méi)有有效的防止在網(wǎng)絡(luò)游戲中使用外掛的措施。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服了現(xiàn)有技術(shù)的缺陷,提供一種防止在網(wǎng)絡(luò)游戲中使用外掛的方法,該方法具有防范外掛嚴(yán)密、使用更新靈活的優(yōu)點(diǎn)。
本發(fā)明所述的防止在網(wǎng)絡(luò)游戲使用外掛的方法的基本原理是在客戶(hù)端加入腳本引擎,登陸后從獨(dú)立的腳本服務(wù)端下載編譯成字節(jié)碼的檢測(cè)腳本和相關(guān)數(shù)據(jù),然后啟動(dòng)腳本獨(dú)立運(yùn)行;所述的腳本負(fù)責(zé)與腳本服務(wù)端建立通訊UDP協(xié)議,這里的UDP協(xié)議的基本包結(jié)構(gòu)為command={word cmd ;//command typelong seq;//cmd sequence number
wordlen;//length of databyte[len] data;//command data}然后執(zhí)行兩種操作定時(shí)信號(hào)和環(huán)境檢測(cè)。所述的定時(shí)信號(hào)操作用于保證客戶(hù)端腳本的存在,其需要定時(shí)向服務(wù)端發(fā)送規(guī)定的按特定規(guī)律變化的標(biāo)志信號(hào),服務(wù)端檢查信號(hào)的有效性;所述的環(huán)境檢測(cè)主要是對(duì)客戶(hù)端運(yùn)行環(huán)境的檢查,包括進(jìn)程信息、線(xiàn)程信息、模塊列表、模塊信息、內(nèi)存特征檢查等,檢測(cè)內(nèi)容由服務(wù)端指定;為保證腳本的存在,腳本必須與游戲關(guān)聯(lián)起來(lái),沒(méi)有腳本,客戶(hù)端就無(wú)法正確運(yùn)行,由于目前腳本的win32模塊(win32api/win32process)不提供某些重要的API,因此,本發(fā)明將用C/C++編寫(xiě)部分執(zhí)行底層操作的腳本模塊,需要包裝的API庫(kù)包括DEBUG API,Tool Help API以及Kernel32.dll中與進(jìn)程線(xiàn)程相關(guān)的API,上述的客戶(hù)端的腳本引擎和模塊是可以從正常更新途徑更新的,為防止外掛修改,所述的腳本模塊和引擎都必須檢查摘要是否合法。
要達(dá)到有效防止外掛的目的,必須首先檢測(cè)到外掛程序,這里,所述的外掛檢測(cè)實(shí)際就是找到外掛程序和正常客戶(hù)端的差異,通常,比較明顯的差異就是外掛程序中調(diào)用模塊中的加解密函數(shù)時(shí)的調(diào)用堆棧不同,更大的差異則是外掛程序的進(jìn)程空間和客戶(hù)端完全不同。本發(fā)明的外掛檢測(cè)的思路就是在模塊中找到加解密函數(shù)的調(diào)用堆棧和計(jì)算進(jìn)程空間中特定偏移位置的代碼的校驗(yàn)和,利用調(diào)用堆棧和校驗(yàn)和可以發(fā)現(xiàn)外掛與客戶(hù)端的特征,發(fā)現(xiàn)特征后,可以通過(guò)正常的游戲數(shù)據(jù)包,將特征發(fā)送到服務(wù)端,由服務(wù)端與客戶(hù)端的特征比較,發(fā)現(xiàn)外掛后就可以進(jìn)行處理。為防止外掛程序模擬特征,特征數(shù)據(jù)需要與游戲數(shù)據(jù)一起加密,防止外掛篡改。
本發(fā)明所述的防止在網(wǎng)絡(luò)游戲使用外掛的方法的特點(diǎn)是協(xié)議加密的更新,包括算法和密鑰的更新變得非常簡(jiǎn)單,只需要更換存放在服務(wù)端的客戶(hù)端匯編模塊和/或服務(wù)端加解密動(dòng)態(tài)鏈接庫(kù)。加解密模塊中可以加入外掛檢測(cè)功能,由于模塊可以隨時(shí)更新,反外掛措施也可以隨時(shí)更新,避免被外掛程序發(fā)現(xiàn)和模擬。在更新外掛檢測(cè)時(shí),已經(jīng)實(shí)現(xiàn)在不更新服務(wù)端加解密動(dòng)態(tài)鏈接庫(kù)和重啟服務(wù)的情況下,僅更新客戶(hù)端模塊,進(jìn)一步增加了反外掛措施的更新頻度,由于更新在后臺(tái)進(jìn)行,用戶(hù)不會(huì)察覺(jué),客戶(hù)端不存在加密部分,外掛開(kāi)發(fā)者無(wú)法進(jìn)行靜態(tài)分析。
下面參照附圖和具體實(shí)施方式
對(duì)本發(fā)明的防止在網(wǎng)絡(luò)游戲使用外掛的方法作進(jìn)一步詳細(xì)說(shuō)明。
圖1是本發(fā)明的應(yīng)用系統(tǒng)結(jié)構(gòu)圖;圖2是本發(fā)明的應(yīng)用流程圖;圖3是本發(fā)明的具體實(shí)施示意圖;具體實(shí)施方式
圖1是本發(fā)明的應(yīng)用系統(tǒng)結(jié)構(gòu)圖,由圖可知,本發(fā)明的防止在網(wǎng)絡(luò)游戲使用外掛的方法在實(shí)施時(shí),其系統(tǒng)結(jié)構(gòu)包括游戲用戶(hù)、客戶(hù)端、游戲更新下載服務(wù)器、游戲認(rèn)證服務(wù)器、游戲世界服務(wù)器、游戲數(shù)據(jù)庫(kù)和反外掛服務(wù)器。所述的客戶(hù)端和所述的服務(wù)器端實(shí)現(xiàn)協(xié)商調(diào)用接口,主要是指調(diào)用加解密函數(shù)的接口,并且都需要使用C/C++編寫(xiě)部分執(zhí)行底層操作的腳本模塊而成的API庫(kù),所述的服務(wù)端在客戶(hù)端要求下載加解密模塊時(shí),需要從存放在服務(wù)端指定目錄下的多個(gè)模塊中隨機(jī)選擇一個(gè)傳送給客戶(hù)端,這里的模塊加入了游戲開(kāi)發(fā)項(xiàng)目,在本系統(tǒng)結(jié)構(gòu)中,如果要實(shí)現(xiàn)反外掛功能,需要在客戶(hù)端發(fā)送到服務(wù)端的全部或部分?jǐn)?shù)據(jù)包中增加附加字段,以容納外掛特征信息,服務(wù)端發(fā)送到客戶(hù)端的部分?jǐn)?shù)據(jù)包中也要增加字段或使用序列號(hào)傳送外掛檢查信息;如果要實(shí)現(xiàn)反方法加速類(lèi)通用加速工具的功能,需要在服務(wù)端發(fā)送到客戶(hù)端的部分?jǐn)?shù)據(jù)包中增加字段或使用序列號(hào)傳送服務(wù)端時(shí)間戳;如果要實(shí)現(xiàn)反封包加速工具的功能,需要在客戶(hù)端發(fā)送到服務(wù)端的全部數(shù)據(jù)包中增加字段或使用序列號(hào)傳送客戶(hù)端時(shí)間戳。
圖2所示的是本發(fā)明的防止在網(wǎng)絡(luò)游戲使用外掛的方法的具體應(yīng)用流程首先進(jìn)行客戶(hù)端更新,并且在客戶(hù)端加入腳本引擎,登陸后從獨(dú)立的腳本服務(wù)端下載編譯成字節(jié)碼的檢測(cè)腳本和相關(guān)數(shù)據(jù),在客戶(hù)端發(fā)送到服務(wù)端的全部或部分?jǐn)?shù)據(jù)包中增加附加字段,以容納外掛特征信息,而且在服務(wù)端發(fā)送到客戶(hù)端的部分?jǐn)?shù)據(jù)包中也要增加字段或使用序列號(hào)傳送外掛檢查信息,在所述的服務(wù)端發(fā)送到客戶(hù)端的部分?jǐn)?shù)據(jù)包中增加字段或使用序列號(hào)傳送服務(wù)端時(shí)間戳,在客戶(hù)端發(fā)送到服務(wù)端的全部數(shù)據(jù)包中增加字段或使用序列號(hào)傳送客戶(hù)端時(shí)間戳。然后,啟動(dòng)腳本獨(dú)立運(yùn)行,所述的腳本負(fù)責(zé)與腳本服務(wù)端建立通訊協(xié)議,為了保證腳本線(xiàn)程的存在,需要加入HeartBeat定時(shí)信號(hào),基本思路是服務(wù)端下發(fā)一個(gè)數(shù)據(jù),客戶(hù)端腳本根據(jù)規(guī)定算法和當(dāng)前狀態(tài)得到一個(gè)計(jì)算值返回服務(wù)端,服務(wù)端再檢查計(jì)算值是否正確,所述的加入HeartBeat定時(shí)信號(hào)通過(guò)一種最簡(jiǎn)單的算法來(lái)實(shí)現(xiàn),就是服務(wù)端下發(fā)一個(gè)隨機(jī)數(shù),腳本用自己的校驗(yàn)和加上隨機(jī)數(shù)產(chǎn)生一個(gè)摘要,返回給服務(wù)端,后續(xù)的HeartBeat定時(shí)信號(hào)用隨機(jī)數(shù)作為種子產(chǎn)生下次發(fā)送時(shí)隨機(jī)數(shù)。然后進(jìn)行檢測(cè)操作,這主要是對(duì)客戶(hù)端運(yùn)行環(huán)境的檢查,包括進(jìn)程信息、線(xiàn)程信息、模塊列表、模塊信息、內(nèi)存特征、計(jì)算指定偏移位置和長(zhǎng)度的代碼校驗(yàn)和、模塊列表以及外掛/木馬/病毒程序特征碼等等,服務(wù)端解密函數(shù)檢查這些信息并得出是否使用了外掛的結(jié)論,一旦確認(rèn)使用了外掛,就立即將用戶(hù)加入封號(hào)列表,等待一段時(shí)間以后執(zhí)行強(qiáng)制下線(xiàn)和封號(hào)懲罰。
圖3所示的是本發(fā)明的一個(gè)具體實(shí)施例,以網(wǎng)絡(luò)游戲七劍為例,首先在網(wǎng)游方面,客戶(hù)端使用/Oy-編譯選項(xiàng),保證客戶(hù)端程序中的函數(shù)均使用幀指針,服務(wù)端和客戶(hù)端適當(dāng)增大網(wǎng)絡(luò)收發(fā)包的緩沖區(qū),本發(fā)明需要在數(shù)據(jù)包尾部增加字段記錄(8個(gè)字節(jié)),以記錄前面獲得調(diào)用堆棧和環(huán)境檢查信息并發(fā)送到服務(wù)端,4個(gè)字節(jié)用于記錄調(diào)用堆棧、4個(gè)用于記錄內(nèi)部序列號(hào)和校驗(yàn)和等信息,然后,客戶(hù)端和服務(wù)端調(diào)用加解密函數(shù)庫(kù),執(zhí)行加密函數(shù)時(shí),會(huì)以一定規(guī)律在數(shù)據(jù)包中加入命令(服務(wù)端)和檢測(cè)結(jié)果(客戶(hù)端),然后,用戶(hù)登陸游戲服務(wù)器時(shí),游戲服務(wù)將向用戶(hù)發(fā)送隨機(jī)選擇的動(dòng)態(tài)加解密模塊,從而實(shí)現(xiàn)通訊數(shù)據(jù)包的可靠高效的加密和解密,通過(guò)回溯客戶(hù)端調(diào)用鏈,得到加密和解密函數(shù)的調(diào)用堆棧,然后,執(zhí)行服務(wù)端加密函數(shù)在數(shù)據(jù)包中發(fā)送的命令,通過(guò)分析配置文件和服務(wù)配置文件,檢查客戶(hù)端的進(jìn)程環(huán)境,最后,中心分析服務(wù)端解密函數(shù)檢查這些信息并得出是否使用了外掛的結(jié)論。
以上所述的僅是本發(fā)明的優(yōu)選實(shí)施方式。應(yīng)當(dāng)指出,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以作出若干變型和改進(jìn),這些也應(yīng)視為屬于本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種防止在網(wǎng)絡(luò)游戲中使用外掛的方法,其特征在于包括以下步驟首先進(jìn)行客戶(hù)端更新,并且在客戶(hù)端加入腳本引擎,登陸后從獨(dú)立的腳本服務(wù)端下載編譯成字節(jié)碼的檢測(cè)腳本和相關(guān)數(shù)據(jù),在客戶(hù)端發(fā)送到服務(wù)端的全部或部分?jǐn)?shù)據(jù)包中增加附加字段,以容納外掛特征信息,而且在服務(wù)端發(fā)送到客戶(hù)端的部分?jǐn)?shù)據(jù)包中也要增加字段或使用序列號(hào)傳送外掛檢查信息,在所述的服務(wù)端發(fā)送到客戶(hù)端的部分?jǐn)?shù)據(jù)包中增加字段或使用序列號(hào)傳送服務(wù)端時(shí)間戳,在客戶(hù)端發(fā)送到服務(wù)端的全部數(shù)據(jù)包中增加字段或使用序列號(hào)傳送客戶(hù)端時(shí)間戳,并且啟動(dòng)腳本獨(dú)立運(yùn)行;然后,服務(wù)端下發(fā)一個(gè)數(shù)據(jù)以加入定時(shí)信號(hào),客戶(hù)端腳本根據(jù)規(guī)定算法和當(dāng)前狀態(tài)得到一個(gè)計(jì)算值返回服務(wù)端,服務(wù)端再檢查計(jì)算值是否正確,后續(xù)的定時(shí)信號(hào)用隨機(jī)數(shù)作為種子產(chǎn)生下次發(fā)送時(shí)隨機(jī)數(shù);最后,服務(wù)端解密函數(shù)開(kāi)始對(duì)客戶(hù)端運(yùn)行環(huán)境進(jìn)行檢查,并得出是否使用了外掛的結(jié)論,一旦確認(rèn)使用了外掛,就立即將用戶(hù)加入封號(hào)列表,等待一段時(shí)間以后執(zhí)行強(qiáng)制下線(xiàn)和封號(hào)懲罰。
全文摘要
一種防止在網(wǎng)絡(luò)游戲中使用外掛的方法,其步驟為在客戶(hù)端加入腳本引擎,并且從獨(dú)立的腳本服務(wù)端下載編譯成字節(jié)碼的檢測(cè)腳本和相關(guān)數(shù)據(jù),然后在傳送的數(shù)據(jù)包中增加容納外掛特征信息的附加字段,然后在服務(wù)端下發(fā)一個(gè)數(shù)據(jù)以加入定時(shí)信號(hào),然后服務(wù)端解密函數(shù)對(duì)客戶(hù)端運(yùn)行環(huán)境進(jìn)行檢查,并得出是否使用了外掛的結(jié)論。該方法具有防范外掛嚴(yán)密、使用更新靈活的優(yōu)點(diǎn)。
文檔編號(hào)G06F19/00GK1744525SQ200510104918
公開(kāi)日2006年3月8日 申請(qǐng)日期2005年9月22日 優(yōu)先權(quán)日2005年9月22日
發(fā)明者車(chē)欠軍 申請(qǐng)人:車(chē)欠軍