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