| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发工具 -> 游戏修改器(一)瞬移 -> 正文阅读 |
|
[开发工具]游戏修改器(一)瞬移 |
目录 一、概述????????第一次尝试写游戏修改器教程,有些忐忑,纠结了好久,不知道写什么游戏好,最后决定找一个二十年前的老游戏,比较简单,很容易上手。游戏修改器的知识都是和内存、汇编这些相关,而这些知识也算是比较枯燥的了。我希望出这样的一些教程,能够激起大家学习内存相关知识的兴趣。第一次写这样的文章,希望大家能够看懂理解并自己实现吧。 最后只想再说一句:游戏修改器最基础的概念就是内存,一切操作都是基于内存!!! 二、工具????????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? ????????由于各种原因已经好久没有更新过文章了,本来早就打算出几篇游戏修改器的教程,由于需要写毕业论文、找工作等各种原因,一直没有完成,光这篇文章我就硬憋了两天才完成。希望能给大家学习指针内存等知识带来一些兴趣吧。学习之路太过漫长,每次学一些新知识,我就想着学完这些应该能成够入门了,学完才知道,自己还差得远呢,接下来会了解的新的知识我又会产生相同的想法,不知道猴年马月我才能入门啊。我也经常在论坛看网上的高手分享技术,属实羡慕,我也不指望能成为一个高手了,只期望成为一个中手吧(中国之手,国家之手) 哈哈哈。有空我还会继续出修改器的其他功能,总之,希望大家能够看懂这一章节并完成自己的修改器。 ????????学习过程中还有很多不足,还望朋友们指正! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/14 14:57:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |