單機與網遊的數據存儲、外掛與內掛

對於單機遊戲來說,所有數據都是在內存和硬盤上的,所以單機遊戲實際上是有內存修改器和存檔修改器兩種。只不過修改的位置不同,技術上來說都是大同小異,就是直接修改遊戲數據。製作技術不外乎兩種,一種是直接分析遊戲主程序對應的反彙編代碼,找出關鍵位置。另一種則比較簡單,是通過遊戲中數據的變化,來找到對應位置。比如金山遊俠中的內存搜索,就是通過搜索內存中某個數值的變化來確定內存地址從而修改數值的。(實際上只要把遊戲數據存儲成浮點類型,一票類似原理的修改器都跪了。。。)。存檔修改器也是類似,首先存個檔,然後消耗個數值,然後再存一個檔,比較兩個存檔的差異來確定要修改的位置。知道了要修改的內存或存檔地址之後,剩下的就是寫個程序修改對應內存或者存檔的位置就行了。基本上單機遊戲修改器就是這麼個流程。

網遊的數據都是存儲在服務器上,所以所謂外掛的原理其實也沒比單機複雜多少。比如有個網遊的基本架構如下:

實際上一般還有個賬戶服務器,用戶賬戶數據一般是跟遊戲數據分離開的,一個用戶賬戶是可以登錄若干個遊戲服務器的。但是這個跟本話題無關暫時省略掉。
比如你在遊戲中做了某樣操作,比如打個怪,或者開個寶箱,這時候,遊戲客戶端的任務就是把你這些操作,轉換成預先定義好的數據格式發送給遊戲服務器,然後遊戲服務器收到數據之後,瞭解了你的意圖,然後在遊戲服務器上做了一番比較和判斷之後,然後把結果發送給遊戲客戶端,你掉了XX血獲得YY經驗,打開寶箱得到ZZZ物品。客戶端收到服務器的指令之後,在你的畫面上把服務器的結果顯示出來,僅此而已。
這時候就能看出來了,你僅僅修改遊戲客戶端的數值是沒用的,因爲數值並沒有同步到遊戲服務器上,下次服務器給你發送數據的時候就會改回來。
那麼遊戲外掛是怎麼做的呢?關鍵就在於外掛會模擬客戶端發送數據參考下圖。

比如在客戶端我正常打怪,手動點擊一秒鐘打怪一次,但是外掛則會毫無節操地一秒鐘發送給服務器幾十哪怕上百次打怪的數據。於是有些服務器就會被騙過,從而客戶以更高的效率獲得經驗和獎勵。但是這種方法對外掛編寫者技術要求比較高,首先你得能分析的出來原來客戶端和服務器段通信的數據封包的格式,然後寫出模擬客戶端的外掛程序。其次最重要的是你得能騙得過服務器。像一秒鐘打怪幾十次的數據,服務器還是很容易判斷出你是在作弊的。而且對於這種嚴重破壞遊戲公平性的外掛來說,被發現的代價還是很大的。遊戲公司也是嚴厲禁止的。
騙不過服務器怎麼辦呢?於是有些外掛走上了另一條路,這條路上外掛不是模擬遊戲客戶端了,而是模擬遊戲的主體——人。也就是外掛部分或者全部代替人在遊戲中的作用。就像下面的圖示。

還用打怪來舉例子就是外掛給遊戲客戶端發送模擬指令,模擬用戶的打怪操作。然後用某種預先定義好的算法,更有效率的打怪,然後在HP低到一定程度的時候,自動回血。基本上只是一個自動代練的程序實現。這種外掛有些並沒有很大的破壞遊戲的公平性,遊戲官方也是睜一隻眼閉一隻眼的。

後來好多遊戲公司舉得,既然這種外掛並沒有怎麼破壞遊戲的公平性,那爲啥不自己做呢,能多賺點錢誰不樂意呢?於是有些遊戲就又提供了遊戲的掛機打怪功能,根據功能不同,免費或收費也不盡相同。於是這種官方提供的東西又被叫做內掛。。。

發佈了65 篇原創文章 · 獲贊 30 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章