游戏修改器(一)瞬移
目錄
一、概述
二、工具
三、實現(xiàn)步驟
四、總結(jié)
一、概述
????????第一次嘗試寫游戲修改器教程,有些忐忑,糾結(jié)了好久,不知道寫什么游戲好,最后決定找一個二十年前的老游戲,比較簡單,很容易上手。游戲修改器的知識都是和內(nèi)存、匯編這些相關(guān),而這些知識也算是比較枯燥的了。我希望出這樣的一些教程,能夠激起大家學(xué)習(xí)內(nèi)存相關(guān)知識的興趣。第一次寫這樣的文章,希望大家能夠看懂理解并自己實現(xiàn)吧。
最后只想再說一句:游戲修改器最基礎(chǔ)的概念就是內(nèi)存,一切操作都是基于內(nèi)存!!!
二、工具
????????Cheat Engine 7.2
????????x32dbg
????????Visual Studio 2019
????????使用Windows MFC開發(fā)
三、實現(xiàn)步驟
????????我們知道,在cs1.6這個FPS游戲中,每個人物的定位都是由坐標定位的,這個通常都是為笛卡爾坐標系。所以首先需要找到人物的坐標位置。
(1)搜索人物坐標
????????①首先模糊搜索float型未知的初始值(開始不知道是什么類型時,把整形、float、
double都嘗試就能找到)
????????
?????????② 設(shè)置搜索快捷鍵,這個設(shè)置成自己習(xí)慣的按鍵(若和游戲按鍵沖突會造成不太方便)。
?????????③在游戲中平地上隨意走動,鼠標隨意晃動,搜索未變動的數(shù)值,跳躍搜索變動的數(shù)值,落地后再搜索一次變動的數(shù)值,接著搜索未變動的數(shù)值。重復(fù)上述步驟,直到無法再排除。
????????刪除上面的綠色地址,這些為靜態(tài)地址,首先排除。接著將剩余的地址添加到地址列表,將其一條條鎖定,最后能夠?qū)ふ业絻蓚€地址鎖定后人物無法跳躍。其中一個地址存放的為z坐標增量,另一個地址存放的為z坐標的值,被鎖定后人物都無法跳躍。?
?????????查看相關(guān)內(nèi)存可知x y z的坐標和x y z軸增量。
?????????附:這是一個動態(tài)地址,在重啟游戲后會申請地址,所以需要找到它的指針映射集。使用指針掃描功能,重啟游戲,重新找到人物坐標,就能找到它的指針和偏移。(注意指針掃描功能保存的文件夾和文件名都不能有中文)最后找到的大部分都可以使用。通過重復(fù)的讀取內(nèi)存加偏移的方式能夠訪問x y z坐標。這個步驟在瞬移的實現(xiàn)中并沒有使用,下次使用并介紹其他功能時候再做介紹。
?????????④接著找出是什么訪問了該指針指向的地址
⑤查看每一條所在匯編程序,查看指令所訪問的地址。這一處指令是只訪問我們坐標的指令。?
?
(2)Inline Hook
????????①使用Inline Hook,在此處修改程序執(zhí)行的流程。
被修改指令:
????????D8 40 10 ??????????????- fadd st(0),dword ptr ds:[eax+10]
????????D9 CA? ? ? ? ? ? ? ? ? ?- fxch st(0),st(2)
????????8B 44 24 04 ?????????- mov eax,dword ptr ss:[esp+4]
跳轉(zhuǎn)指令:(使用了6個字節(jié),覆蓋了三條指令,跳轉(zhuǎn)回的地址為三條指令后的地址)
?
????????②設(shè)置標志位,并設(shè)置全局快捷鍵,當按下某個鍵時保存當前位置,當移動到某個位置時,按下另一個全局快捷鍵,瞬移到保存的位置。我的是實現(xiàn)為按下F8 設(shè)置一個標志位,跳轉(zhuǎn)到上述地址處,通過[eax+0x8]、[eax+0xc]、[eax+0x10]訪問x、y、z坐標并保存,當按下F9時,設(shè)置另一個標志位,判斷標志位,若被置位,則加載保存的地址,實現(xiàn)瞬移。
????????我設(shè)置這個標志位是搜索很多0的數(shù)據(jù),搜索到后調(diào)用VirtualProtectEx函數(shù)修改頁面屬性為可讀可寫可執(zhí)行,這些地址用來存儲標志位和我們保存的地址。
????????③使用x32dbg 完成Flag的判斷并保存和加載人物坐標的匯編代碼。
?????????④將上述shellcode放入目標地址,使用跳轉(zhuǎn)指令覆蓋原指令并跳轉(zhuǎn)到此處,在這段shellcode后面添加跳轉(zhuǎn)回被覆蓋指令的下一條指令的地址處。
?調(diào)試上述程序,中斷查看局部變量,pRemoteBuf為cs1.6進程申請的地址(跨進程申請內(nèi)存)。
????????⑤查看cs1.6游戲中,中斷到被修改指令處。?
?????????⑥跟蹤進入pRemoteBuf,單步調(diào)試
????????⑦ 最后返回到了 mp.dll + 8E8C4。?
????????⑧按下 F8 ,查看目標內(nèi)存地址,成功儲存了當前人物坐標。
????????⑨人物隨意移動到一個地點,按下 F9 ,人物瞬移到儲存的位置。成功!
?
四、總結(jié)
????????最后,一張圖總結(jié)實現(xiàn)思路:
最后附上我的視頻介紹:
????????鏈接?:百度網(wǎng)盤 請輸入提取碼
????????提取碼?:P46A?
????????由于各種原因已經(jīng)好久沒有更新過文章了,本來早就打算出幾篇游戲修改器的教程,由于需要寫畢業(yè)論文、找工作等各種原因,一直沒有完成,光這篇文章我就硬憋了兩天才完成。希望能給大家學(xué)習(xí)指針內(nèi)存等知識帶來一些興趣吧。學(xué)習(xí)之路太過漫長,每次學(xué)一些新知識,我就想著學(xué)完這些應(yīng)該能成夠入門了,學(xué)完才知道,自己還差得遠呢,接下來會了解的新的知識我又會產(chǎn)生相同的想法,不知道猴年馬月我才能入門啊。我也經(jīng)常在論壇看網(wǎng)上的高手分享技術(shù),屬實羨慕,我也不指望能成為一個高手了,只期望成為一個中手吧(中國之手,國家之手) 哈哈哈。有空我還會繼續(xù)出修改器的其他功能,總之,希望大家能夠看懂這一章節(jié)并完成自己的修改器。
????????學(xué)習(xí)過程中還有很多不足,還望朋友們指正!
總結(jié)
以上是生活随笔為你收集整理的游戏修改器(一)瞬移的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米5安卓使用微信X5 Blink内核调
- 下一篇: Java本地缓存技术选型(Guava C