對於單機遊戲來說,所有資料都是在記憶體和硬碟上的,所以單機遊戲實際上是有記憶體修改器和存檔修改器兩種。只不過修改的位置不同,技術上來說都是大同小異,就是直接修改遊戲資料。製作技術不外乎兩種,一種是直接分析遊戲主程式對應的反彙編程式碼,找出關鍵位置。另一種則比較簡單,是透過遊戲中資料的變化,來找到對應位置。比如金山遊俠中的記憶體搜尋,就是透過搜尋記憶體中某個數值的變化來確定記憶體地址從而修改數值的。(實際上只要把遊戲資料儲存成浮點型別,一票類似原理的修改器都跪了。。。)。存檔修改器也是類似,首先存個檔,然後消耗個數值,然後再存一個檔,比較兩個存檔的差異來確定要修改的位置。知道了要修改的記憶體或存檔地址之後,剩下的就是寫個程式修改對應記憶體或者存檔的位置就行了。基本上單機遊戲修改器就是這麼個流程。
網遊的資料都是儲存在伺服器上,所以所謂外掛的原理其實也沒比單機複雜多少。比如有個網遊的基本架構如下:
實際上一般還有個賬戶伺服器,使用者賬戶資料一般是跟遊戲資料分離開的,一個使用者賬戶是可以登入若干個遊戲伺服器的。但是這個跟本話題無關暫時省略掉。
比如你在遊戲中做了某樣操作,比如打個怪,或者開個寶箱,這時候,遊戲客戶端的任務就是把你這些操作,轉換成預先定義好的資料格式傳送給遊戲伺服器,然後遊戲伺服器收到資料之後,瞭解了你的意圖,然後在遊戲伺服器上做了一番比較和判斷之後,然後把結果傳送給遊戲客戶端,你掉了XX血獲得YY經驗,開啟寶箱得到ZZZ物品。客戶端收到伺服器的指令之後,在你的畫面上把伺服器的結果顯示出來,僅此而已。
這時候就能看出來了,你僅僅修改遊戲客戶端的數值是沒用的,因為數值並沒有同步到遊戲伺服器上,下次伺服器給你傳送資料的時候就會改回來。
那麼遊戲外掛是怎麼做的呢?關鍵就在於外掛會模擬客戶端傳送資料參考下圖。
比如在客戶端我正常打怪,手動點選一秒鐘打怪一次,但是外掛則會毫無節操地一秒鐘傳送給伺服器幾十哪怕上百次打怪的資料。於是有些伺服器就會被騙過,從而客戶以更高的效率獲得經驗和獎勵。但是這種方法對外掛編寫者技術要求比較高,首先你得能分析的出來原來客戶端和伺服器段通訊的資料封包的格式,然後寫出模擬客戶端的外掛程式。其次最重要的是你得能騙得過伺服器。像一秒鐘打怪幾十次的資料,伺服器還是很容易判斷出你是在作弊的。而且對於這種嚴重破壞遊戲公平性的外掛來說,被發現的代價還是很大的。遊戲公司也是嚴厲禁止的。
騙不過伺服器怎麼辦呢?於是有些外掛走上了另一條路,這條路上外掛不是模擬遊戲客戶端了,而是模擬遊戲的主體——人。也就是外掛部分或者全部代替人在遊戲中的作用。就像下面的圖示。
還用打怪來舉例子就是外掛給遊戲客戶端傳送模擬指令,模擬使用者的打怪操作。然後用某種預先定義好的演算法,更有效率的打怪,然後在HP低到一定程度的時候,自動回血。基本上只是一個自動代練的程式實現。這種外掛有些並沒有很大的破壞遊戲的公平性,遊戲官方也是睜一隻眼閉一隻眼的。
後來好多遊戲公司舉得,既然這種外掛並沒有怎麼破壞遊戲的公平性,那為啥不自己做呢,能多賺點錢誰不樂意呢?於是有些遊戲就又提供了遊戲的掛機打怪功能,根據功能不同,免費或收費也不盡相同。於是這種官方提供的東西又被叫做內掛。。。
對於單機遊戲來說,所有資料都是在記憶體和硬碟上的,所以單機遊戲實際上是有記憶體修改器和存檔修改器兩種。只不過修改的位置不同,技術上來說都是大同小異,就是直接修改遊戲資料。製作技術不外乎兩種,一種是直接分析遊戲主程式對應的反彙編程式碼,找出關鍵位置。另一種則比較簡單,是透過遊戲中資料的變化,來找到對應位置。比如金山遊俠中的記憶體搜尋,就是透過搜尋記憶體中某個數值的變化來確定記憶體地址從而修改數值的。(實際上只要把遊戲資料儲存成浮點型別,一票類似原理的修改器都跪了。。。)。存檔修改器也是類似,首先存個檔,然後消耗個數值,然後再存一個檔,比較兩個存檔的差異來確定要修改的位置。知道了要修改的記憶體或存檔地址之後,剩下的就是寫個程式修改對應記憶體或者存檔的位置就行了。基本上單機遊戲修改器就是這麼個流程。
網遊的資料都是儲存在伺服器上,所以所謂外掛的原理其實也沒比單機複雜多少。比如有個網遊的基本架構如下:
實際上一般還有個賬戶伺服器,使用者賬戶資料一般是跟遊戲資料分離開的,一個使用者賬戶是可以登入若干個遊戲伺服器的。但是這個跟本話題無關暫時省略掉。
比如你在遊戲中做了某樣操作,比如打個怪,或者開個寶箱,這時候,遊戲客戶端的任務就是把你這些操作,轉換成預先定義好的資料格式傳送給遊戲伺服器,然後遊戲伺服器收到資料之後,瞭解了你的意圖,然後在遊戲伺服器上做了一番比較和判斷之後,然後把結果傳送給遊戲客戶端,你掉了XX血獲得YY經驗,開啟寶箱得到ZZZ物品。客戶端收到伺服器的指令之後,在你的畫面上把伺服器的結果顯示出來,僅此而已。
這時候就能看出來了,你僅僅修改遊戲客戶端的數值是沒用的,因為數值並沒有同步到遊戲伺服器上,下次伺服器給你傳送資料的時候就會改回來。
那麼遊戲外掛是怎麼做的呢?關鍵就在於外掛會模擬客戶端傳送資料參考下圖。
比如在客戶端我正常打怪,手動點選一秒鐘打怪一次,但是外掛則會毫無節操地一秒鐘傳送給伺服器幾十哪怕上百次打怪的資料。於是有些伺服器就會被騙過,從而客戶以更高的效率獲得經驗和獎勵。但是這種方法對外掛編寫者技術要求比較高,首先你得能分析的出來原來客戶端和伺服器段通訊的資料封包的格式,然後寫出模擬客戶端的外掛程式。其次最重要的是你得能騙得過伺服器。像一秒鐘打怪幾十次的資料,伺服器還是很容易判斷出你是在作弊的。而且對於這種嚴重破壞遊戲公平性的外掛來說,被發現的代價還是很大的。遊戲公司也是嚴厲禁止的。
騙不過伺服器怎麼辦呢?於是有些外掛走上了另一條路,這條路上外掛不是模擬遊戲客戶端了,而是模擬遊戲的主體——人。也就是外掛部分或者全部代替人在遊戲中的作用。就像下面的圖示。
還用打怪來舉例子就是外掛給遊戲客戶端傳送模擬指令,模擬使用者的打怪操作。然後用某種預先定義好的演算法,更有效率的打怪,然後在HP低到一定程度的時候,自動回血。基本上只是一個自動代練的程式實現。這種外掛有些並沒有很大的破壞遊戲的公平性,遊戲官方也是睜一隻眼閉一隻眼的。
後來好多遊戲公司舉得,既然這種外掛並沒有怎麼破壞遊戲的公平性,那為啥不自己做呢,能多賺點錢誰不樂意呢?於是有些遊戲就又提供了遊戲的掛機打怪功能,根據功能不同,免費或收費也不盡相同。於是這種官方提供的東西又被叫做內掛。。。