遊戲修改器的製作原理?

很多單機遊戲都有修改器,是因為遊戲數據都儲存在本機上,那麼為什麼網路遊戲不能用遊戲修改器,難道沒有個人遊戲數據是儲存在本機上的嗎?比如我網路遊戲上的人物裝備,寶寶屬性,這些大量的數據遊戲公司真的有必要全部儲存嗎?

關於電影《明日邊緣》和最近玩網遊產生的聯想,以洗寶寶為例,我洗寶寶前後的數據完全可以根據遊戲的運行模式生成,而聯網可以讓我與其他玩家共同構成遊戲系統,如果聯網只是這些,那麼遊戲修改就可以實現,如果聯網還有實時傳輸動態數據的功能那麼怎麼才能攔截這些數據,即實現等我洗出好寶寶在回傳數據?


相關:遊戲研發技術,做過外掛,也防過外掛。

一句話概括遊戲修改器的原理:在既定的遊戲邏輯基礎上,插入新的邏輯或者修改邏輯對應的數據。

這樣是不是太抽象了?來,咱先介紹一下遊戲修改,或者說外掛的類型和原理。

1. 輸入模擬

模擬用戶的輸入,例如鍵盤、滑鼠、重力感應、搖桿等等。這種是最簡單的方式,並且,嚴格地說,這並不算外掛,只是輔助軟體。最著名的軟體要數PC上的按鍵精靈,早期網遊的掛機外掛,幾乎都是按鍵精靈變種而來的。

這種外掛的防護方法最簡單也最困難。簡單在,只需驗證玩家是否是機器人,也就是驗證碼就能解決。難在不影響用戶體驗。還記得當年的盛大冒險島里,打著Boss突然出來,讓人虎軀一震的驗證碼么?(好像暴露年齡了?)

2. 修改文件數據

就是修改遊戲過程中存在本地的數據。特別對於單機遊戲而言,玩家的金幣數、等級啥的,肯定得存在硬碟上的某個地方。但可能是加了密,不過只要存儲在本地,一定就能破解,對,一定。對應的嘛,XX存檔修改器之類的就是了。

什麼,你問我有沒有不把數據存到本地的單機遊戲?

---還記得當年FC的通關密碼么?

順帶回答題主的問題

a. 難道沒有個人遊戲數據是儲存在本機上的嗎?

有,存儲分兩類,一類是無關數據,比如你上次退出某個界面時,游標放在哪個按鈕上,這種無關痛癢的數據。另一類是遊戲數據,對,比如你的攻擊力、防禦力,為了提升計算速度、節省流量,這些東西可能會存儲在本地,但服務端一般都會做一次校驗,除非做遊戲的人腦袋秀逗了。

b. 這些大量的數據遊戲公司真的有必要全部儲存嗎?

有,遊戲,特別是網遊,數據表,或者說配置表,數量大到你難以想像。而且這些數據通常靜態數據,也就是大家都一樣,對服務端來說也不會是太大的壓力。舉個例子吧,如果你的寵物成長沒有隨機性,那麼同一個寵物同一個等級的所有數據都是一樣的。

3. 修改內存數據

程序運行過程中,數據都是在內存里的。通過搜內存,即可直接修改遊戲數據(如果遊戲沒做防護措施的話)。常見的,金山遊俠、八門神器,甚至金手指,都是此類原理。

4. 截包

對於網遊來說,數據都是封裝在一個一個數據包里,發送到伺服器的。只要截取從你電腦發出去的遊戲包,找到對應的數據,修改即可。但實際上,這是最困難的修改方式。原因很簡單,數據包是加密的,而且和本地數據的加密不同的是,數據包通常用的是非對稱加密演算法,例如RSA,不理解的可以擴展閱讀一下:RSA演算法原理(一)

懶得讀的這裡解釋一下,非對稱加密演算法的特點是,加密密碼和解密密碼不一樣,天知道服務端用的是什麼密碼解密。

5. Hook

hook的意思是鉤子,可以這麼解釋,原來有一個函數,會返回你現在的金錢數,然後你把這個函數勾住,換成你自己的函數,返回一個99999999的金錢,是不是發財啦?

玩PC遊戲的看下遊戲目錄下,是不是能發現很多DLL文件?這些就是遊戲里的一個一個函數,也許其中某一個,就放著返回你的金錢數的函數。

對於盜版軟體的破解,這也是常用手法之一。

6. 其他

只有想不到,沒有做不到。自己去發現,也能有驚喜。例如,修改系統時間加金幣啥的。


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

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

實際上一般還有個賬戶伺服器,用戶賬戶數據一般是跟遊戲數據分離開的,一個用戶賬戶是可以登錄若干個遊戲伺服器的。但是這個跟本話題無關暫時省略掉。

比如你在遊戲中做了某樣操作,比如打個怪,或者開個寶箱,這時候,遊戲客戶端的任務就是把你這些操作,轉換成預先定義好的數據格式發送給遊戲伺服器,然後遊戲伺服器收到數據之後,了解了你的意圖,然後在遊戲伺服器上做了一番比較和判斷之後,然後把結果發送給遊戲客戶端,你掉了XX血獲得YY經驗,打開寶箱得到ZZZ物品。客戶端收到伺服器的指令之後,在你的畫面上把伺服器的結果顯示出來,僅此而已。

這時候就能看出來了,你僅僅修改遊戲客戶端的數值是沒用的,因為數值並沒有同步到遊戲伺服器上,下次伺服器給你發送數據的時候就會改回來。

那麼遊戲外掛是怎麼做的呢?關鍵就在於外掛會模擬客戶端發送數據參考下圖。

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

騙不過伺服器怎麼辦呢?於是有些外掛走上了另一條路,這條路上外掛不是模擬遊戲客戶端了,而是模擬遊戲的主體——人。也就是外掛部分或者全部代替人在遊戲中的作用。就像下面的圖示。

還用打怪來舉例子就是外掛給遊戲客戶端發送模擬指令,模擬用戶的打怪操作。然後用某種預先定義好的演算法,更有效率的打怪,然後在HP低到一定程度的時候,自動回血。基本上只是一個自動代練的程序實現。這種外掛有些並沒有很大的破壞遊戲的公平性,遊戲官方也是睜一隻眼閉一隻眼的。後來好多遊戲公司舉得,既然這種外掛並沒有怎麼破壞遊戲的公平性,那為啥不自己做呢,能多賺點錢誰不樂意呢?於是有些遊戲就又提供了遊戲的掛機打怪功能,根據功能不同,免費或收費也不盡相同。於是這種官方提供的東西又被叫做內掛。。。


修改器按照原理分有好幾種,我說說我稍微了解的幾種。

第一種就是最簡單的存檔修改器,著名例子是仙劍四的秋天修改器。當然那個做得已經比較友好了,質量效應2的存檔修改器看著則很有逼格,因為根本看不懂哪個值對應哪種屬性。

第二種是網遊裡面的使用API發送指令模擬動作,例如按鍵精靈一類的,不屬於很惡劣的修改器。

第三種是CE修改器這樣,通過改變遊戲時間達到某種修改效果。也不是性質很惡劣的修改器。

第四種是修改遊戲內存,CE修改器和手機上的八門神器也有這種功能,通常我們用的FPS修改器什麼鎖血啊子彈無限啊貌似都是這種。

還有一些惡性的修改器,大多是用於網遊:

加速外掛,貌似原理是修改時鐘頻率;

攔截+封包+轉發,欺騙伺服器;

盜號木馬。這個就不用說了,夠得上違法了吧。

我非專業人士,如有錯誤請指正。

呃,沒看到補充說明是專門問網遊外掛的……

網遊外掛的攔截封包是最多的,簡單來說就是把你的電腦應該發送給伺服器的信息修改了再發送出去。一般這種外掛應該看到了就給你踢出去吧。


有的

亞洲第一個MMORPG:《夢幻之星在線》的數據就是保存在本地的。但是那機器破解起來非常困難,我敢說大部分還沒退休的工程師都不認識它儲存數據的硬體,記得好像是鐵氧體晶元……不過用硬碟儲存數據的遊戲,敢在本地保持數據的就很少了。

PC上的網遊也聽說過數據在本地的,但是忘記是哪個奇葩了。


張三華先生的答案已經很全面了,不過其實模擬用戶輸入這種只能算robot功能,實際原理來說就這麼幾種:

1、內存修改,CheatEngine為代表,什麼八門神器、金山遊俠也是這類,對抗法則為內存加密,但是要對付基於趨勢的邏輯搜索則比較麻煩點,加密後的映射必須無方向性,而且內存加密演算法也不能過於複雜,免得影響效率。

2、修改本地文件系統,文件系統加密。

其實1+2最根本的對抗措施為本地數據只有展示意義,就是最多自己爽而已。

3、Hook,hook對於某些設計的遊戲是可以真正做到作弊的,比如hook碰撞檢測函數。這點上,c系比起java等有先天優勢。不管怎麼樣,正常情況下,破解者看到的是在反編譯一個加殼、混淆、去除了函數映射信息的exe文件後的亂名函數表,如何找到自己需要的函數,這是一個水平問題。

4、關於其它,補充一個方案吧:在面對一個設計時嚴格按照伺服器處理全邏輯、客戶端只負責展示,網路包加密無法破解的遊戲,如何處理?這是一個綜合性的工作。首先,獲得去殼後、可反編譯、調試的客戶端,進行反編譯,建立工程。因為反編譯得到的是一些亂碼函數名,無法分析,所以需要一些分析工具來進行架構分析,至少有調用棧。然後調試這個程序,進行一些嘗試性的操作,來了解一些亂名函數的作用。常見的,比如說有意觸發網路性發包操作,那麼,你一定能找到一個發包函數,一個加密函數。接下來,雖然你無法解密網路包的加密,但是卻可以取得加密前的數據字串。分析這個字串,了解其意義,修改它,然後用hook的辦法讓客戶端發送你修改後的網路包。嗯,上面說起來簡單,其實 反編譯分析 找到加密函數 明文協議分析 都是困難的事情........


盛大代理的冒險島,不知道現在是什麼情況了,幾年前我還在玩的時候,角色受到的傷害是有客戶端參與判定的,於是無敵外掛滿天飛.玩家和怪的位置也是有客戶端判定的,於是瞬移和吸怪外掛也滿天飛.


很多單機遊戲都有修改器,是因為遊戲數據都儲存在本機上,那麼為什麼網路遊戲不能用遊戲修改器,難道沒有個人遊戲數據是儲存在本機上的嗎?比如我網路遊戲上的人物裝備,寶寶屬性,這些大量的數據遊戲公司真的有必要全部儲存嗎?

網路遊戲的絕大多數數據都是在儲存於伺服器上面的,本地客戶端主要存儲的只是貼圖,貼圖,以及貼圖。大量的位置、傷害等計算都由伺服器完成。

以回合制遊戲(mhxy)為例:

所有跟數據相關的內容全部在伺服器存儲。

你這邊的操作會以一定的頻率上傳到伺服器,伺服器收到數據,進行計算,再回傳到客戶端。

你在本地修改數據,只能修改顯示出來的數字(好多遊戲計算的數據和顯示的數據存於兩個不同的地址)。但是一旦回傳跟伺服器發生矛盾,你這邊屬於數據異常,判定你使用外掛,或者直接將本地數據修改為伺服器數據。

這些數據當然有必要由遊戲公司存儲!!因為那都是由人民幣/時間換來的,可以兌現的東西。

(你要是能用金山遊俠修改點券、修改遊戲幣,再兌現,遊戲公司喝西北風?)

(人物屬性和寶寶屬性變相的為遊戲幣、點券的體現)

關於電影《明日邊緣》和最近玩網遊產生的聯想,以洗寶寶為例,我洗寶寶前後的數據完全可以根據遊戲的運行模式生成,而聯網可以讓我與其他玩家共同構成遊戲系統,如果聯網只是這些,那麼遊戲修改就可以實現,如果聯網還有實時傳輸動態數據的功能那麼怎麼才能攔截這些數據,即實現等我洗出好寶寶在回傳數據?

至於你說的洗寶寶,實際過程是這樣的:

你上傳洗寶寶操作==》伺服器收到,將寶寶屬性隨機生成並存儲於伺服器==》將寶寶屬性回傳給你的電腦==&>你的電腦顯示出來數據。

其實你的電腦從頭至尾只有傳輸功能沒有計算功能。


很多單機遊戲都有修改器,是因為遊戲數據都儲存在本機上

對但是單機也有加密,有一些單機遊戲加密更是到現在都無法修改

那麼為什麼網路遊戲不能用遊戲修改器,難道沒有個人遊戲數據是儲存在本機上的嗎?

有部分數據在本地,但是只要聯網,就會有校驗..

不匹配比如我網路遊戲上的人物裝備,寶寶屬性,這些大量的數據遊戲公司真的有必要全部儲存嗎?

存儲而且可以修改的話,工作室淘寶什麼的都出來了..


於電影《明日邊緣》和最近玩網遊產生的聯想,以洗寶寶為例,我洗寶寶前後的數據完全可以根據遊戲的運行模式生成,而聯網可以讓我與其他玩家共同構成遊戲系
統,如果聯網只是這些,那麼遊戲修改就可以實現

又不是單機,哪有SL大法....封包也有校驗,更有邏輯數值

如果聯網還有實時傳輸動態數據的功能那麼怎麼才能攔截這些數據,即實現等我洗出好寶寶在回傳數據?

wpe或者其他封包,直接攔截,但是大部分洗寶寶啥的都是在伺服器處理,給你一個反饋

你就算本地改了,一聯網就恢復了


大遊戲當然有必要存數據了。。。估計你能控制的只有那句話顯示高几個像素吧。。。

你的感覺是洗出好的才發送

事實

你想洗

客戶端向伺服器發生xxx洗

伺服器判斷能不能,不能就告訴客戶端

能的話就洗,保存數據然後發你一份

你的想法

大概。。。可以去參考下掩耳盜鈴的故事。。。


裡面全是指針的妙用嗎


上面說的還不夠全面.

遊戲伺服器是把重要信息存到了伺服器上 , 但並不是所有數據.

以QQ酷跑為例,你每跳一下數據是不會立刻上傳的,因為來不及. 如果立即上傳, 你網路不好的時候,你會跳不動. 但實際情況是,你網路不好的情況下,只有載入和完成時會有等待. 這說明很多操作和反饋都是離線的, 但啟動是要下載的結果是需上傳的. 這就給外掛和作弊器提供了空間. 當然可能有類似中間過程數據上傳等反作弊手段,但還是有作弊空間的. 因為遊戲過程是離線的,而作弊器的作用時間可能就會影響遊戲結果.

還看過文章說把玩家A的數據放在玩家B或更多的玩家去驗證. 以CF為例, 上傳了操作數據要是都給騰訊恐怕它是吃不消的. 最好的辦法是, 玩家A打了一槍, 操作傳給其他玩家, 其他玩家的數據里A的子彈就少了一發. 要是發現其他玩家跟A的數據不一致,那就是A在作弊了. 如果是這種方式,就可以做一個聯網協同的作弊器共同修改,所有玩家把A的子彈鎖死.

上面寫的挺亂,大意就是不是所有信息都上傳,一是因為來不及,二是因為伺服器吃不消. 所以在本機的數據就有被篡改的可能,就看遊戲程序有沒有辦法甄別假數據, 如何甄別.

以上都是個人想法,並未做任何驗證!!!!!!!!!!!!!!!!!!!!!! 請大家自行理解判別!


樓主玩夢幻西遊的,鑒定完畢


將來是雲遊戲的天下,不攻陷伺服器大本營難以作弊。


改內存地址


記得以前有個叫 龍族 的網遊,可以用金山遊俠修改


製作外掛麻煩嗎?


貌似上面大部分人都只在分析MMO類型的RPG網遊,這種網遊確實不太好作弊,除了自動打怪之類的。

但其他類型網遊,比如射擊類,動作類,MOBA類,就拿射擊類來說,許久來一直無法完美解決作弊的有自動瞄準,全圖透視等,因為這種類型的遊戲比較複雜,有些數據是在本地的。


網遊絕對是伺服器存儲你的角色、物品信息,

就算不用反作弊,也不能你換個機子東西就沒了。。

如果是單機遊戲,修改本機數據就好了;網遊得去黑別人伺服器呢。


推薦閱讀:

目前常用的市場數據分析軟體有哪些?
目前中國大陸收入最高的一億人的人均年收入是多少?
參加POINT.數據分析師特訓營(北京)是什麼體驗?
為什麼需要數據分析人員而不能全部由機器和演算法完成數據分析工作?
在 Android 中有哪幾種數據存儲方式?

TAG:遊戲 | 網路遊戲 | 遊戲開發 | 數據 | 遊戲外掛 |