標籤:

如何編寫遊戲作弊器?

pc上的很多遊戲都有相應的修改器,主機上也有金手指之類的修改器,還有早期pc上盛行的金山遊俠,請問如何製作一款遊戲修改器?


PC 一般就是監控內存找地址,然後 ReadProcessMemory + WriteProcessMemory 大法

主機的話,FC 上面的 Game Genie 是用電路攔截讀取特定 ROM 地址的行為,返回預先設置的內容,最多可以攔截三個地址


鎖內存是相對比較初級,比較簡單的辦法

但是有一些效果就實現不了了,比如說在沒有HP概念,一擊必死遊戲里怎麼實現無敵?(現在這種遊戲很少了……)

從鎖內存方法開始說:

你可以用很多作弊引擎找到具體地址(強烈推薦Cheat Engine,什麼都有,包括一個非常方便的調試器)

基本上很多遊戲都會用靜態變數存儲一些基本數值,比如說錢,血,藍,etc

可是……「我的引擎非常現代,我每一個變數都是malloc出來的,我要充分利用動態分配內存的優勢」,於是你沒轍了,莫說重新啟動遊戲,你可能下一關,重新開始,甚至讀個檔內存地址就變了,怎麼破?

於是你就需要一些更好的方法,你需要一些基本的彙編知識

雖然內存地址會變,但是(通常來說)操作這些地址的代碼的地址不會變吧?

於是你就需要祭出調試器了。掛到遊戲上,先搜出你想要修改的值,比如血,然後找到了地址,你用調試器監控這個地址,確定修改這個地址的代碼的地址,確定修改這個地址的代碼的指令,全部nop掉(這個比較簡單,如果你強迫症重可以重新寫幾條指令,提前ret掉),這樣無論地址如何變,修改這個地址的代碼已經被幹掉了,所以就無所謂咯

用這個方法可以實現很多效果,比如真正的無敵,可以迴避即死攻擊之類的

最後最高難度的你會遇到一種情況,那就是這遊戲可能使用C#之類的非Native語言寫的,遊戲代碼可能是JIT出來的!

這個……其實說實話,我也(暫時!)沒改成,途中研究結果就是只要能確定JIT代碼的基址,正常情況下(mono引擎)的函數代碼相對地址不會變,只要能確定JIT代碼的基址就能搞定剩下的事情。

以下是暫時有的想法但是還沒時間去嘗試的:

因為XPSP2之後有DEP,所以正常malloc/HeapAlloc出來的內存是不可以存放可執行代碼的,所以可以嘗試Hook一下VirtualAlloc和VirtualProtect,然後確定什麼地方用這兩個函數開闢了一個可執行代碼的內存區域。

也可以用一種非常缺乏美感的方法,就是記錄JIT之後的代碼段,在遊戲途中全盤搜索,覆蓋之……

Windows的話可以用OpenProcess打開遊戲的進程,然後用GetBaseAddressByName確定代碼的基址(現代Windows為了加強「安全性」,每次啟動遊戲的基址都會不一樣),然後用ReadProcessMemory和WriteProcessMemory來操作遊戲內存。

當年遊戲機的金手指,原理都一樣(就是上面那些,而且因為遊戲機幾乎不會用動態分配內存來存儲非資源數據,所以理論上更簡單,也不會有JIT),但是他們具體用的什麼方法來調試、搜索遊戲的內存就是個迷了……


作弊有好多種,按鍵精靈類型的就是模擬人的操作,裡面可能用了一些簡單的圖像識別匹配演算法,模擬點擊按鍵,這類作弊比較好維護,不用隨著遊戲版本更新而更新。還有一種比較常用的就是注入進去一個自己的dll,然後就可以操作進程內的內存了,這種方法需要高超的調試技能,利用調試找到關鍵call,然後dll內直接傳參數然後call,就可以實現作弊功能了,對於單機遊戲或者在客戶端計算的遊戲,還可以找到關鍵數據的內存地址進行修改,可以達到各種效果,比如dnf作弊,就可以改攻擊力什麼的,但是服務端有校驗,改得太大就會被發現了。dll注入的方式可以採用遠程線程注入,也可以採用輸入法注入,或者偽造dll等,具體就要看遊戲保護的強度了。手機碼字,有興趣以後再寫

最後回答下題主的問題,你可以利用CE來找關鍵數據的內存地址,一般都是找到基址然後找到各種偏移,寫個程序修改即可


自己編輯的話,還是要費一些時間的。還有就是你得還要細細研究遊戲。你要對某款遊戲很熟悉了,你才能開發某個作弊器。

我以前為我朋友搞了一套作弊器。

為什麼是為我朋友?事情是這樣子的,有一次他進菠菜裡面去玩了幾局就輸了幾萬塊錢。當時他心情是蠻心痛的。為了幫他撈回錢,我就幫他搞了一個遊戲的外G,我在這裡把我製作的大致流程分享出來~~並把這個外G公開出來,避免更多的人上當受騙。

進入遊戲,玩了幾局後,就發現這個遊戲有規律,那就是每次玩的時候,增加金幣的時間很少,幾乎大部分都是金幣在不斷的減少~~

慢慢分析出,這個遊戲有兩個重要的時期:

送分期和吸分期,送分期很短暫,所以屬於是增加金幣的;

而吸分期很長,這個就是會使你的金幣減少的狀態~~

為進一步分析這款遊戲,我開始對這個遊戲的數據進行分析~~

配合抓包工具

抓出具體的數據~~並把這些數據進行逆向分析

再通過一步嘗試

最後完成G的封包製作~~

完成後,開始玩遊戲

你會看到你的金幣在不斷的增加

類似這種的遊戲的還有很多

希望廣大朋友們,不要被套進去了。於是把這個外G分享分享給大家。

棋牌遊戲外G

密碼: hfw9

我會不定期的在我的公眾號里分享一些技術

技術營銷交流


照著cheat engine的tutorial搞一遍,基本上絕大多數單機自己搞個小外掛是沒什麼壓力的,跟你說的金山遊俠是差不多類型的軟體,同類型的還有個MHS也挺好用的.手游也有一些類似的修改內存的軟體,不過一般要root,沒怎麼用過只記得有個八門神器.

Cheat Engine

L. Spiro"s Memory Hacking Software

cheatengine開源,不過是freepascal寫的,MHS的早期版本也開源.

再深入一些就要學反彙編逆向驅動之類的麻煩事了.

不要問我網遊怎麼搞,我也不會.


早兩年初中的時候有做過 根本不是什麼難事吧 找基址 編寫到程序里改基址 不說了 百度一堆


推薦閱讀:

《電子遊戲軟體》的名人天師,風林等人的去向?
遊戲里的大佬有多受人尊敬?
一個25歲的人開始做遊戲客服,各位前輩怎麼看?
為什麼那麼多遊戲有黑魂傳火的彩蛋?

TAG:遊戲 |