我们玩的游戏本质上来说是一个好玩的程序,既然是程序,那它就有规则,商店里物品的价格是你看到的五十一百、一百七十五,而你拥有的阳光不过是某个内存地址中不断跳动的数字。游戏设计师定义了这套经济学, 你种下一颗向日葵,阳光从五十变成零,程序定死了一株向日葵花,五十阳光。但如果我说这套经济学是可以被推翻的呢?我们只需要用一行会编指令,就可以把所有的阳光消耗全部改成一。 今天这期视频,我就带你一起扒开游戏的大脑定位,呐喊叩见阳光的指令,手写一个游戏小外挂,把价格踩在脚下,实现真正的阳光自由。当季游戏运行时,所有动态数据,比如阳光植物或僵尸的血量,其实都是存储在内存中的。 举个例子,我们种下一颗植物,阳光就会减少,内存里对应的数据也会随之改变。 我们今天就借助业内大名鼎鼎的 c e, 顺藤摸瓜,精准定位到阳光在内存中的真实地址。我们就使用原版的植物大战僵尸版本号如下来做一期实战演示。首先打开 c e, 选中植物大战僵尸的进程,点击附加, 在右侧输入当前的阳光数值,点击首次扫描。接着回到游戏,随便种一颗植物,让阳光减少, 切回 c e, 点击再次扫描看,现在只剩下一个结果了, 我们可以修改这个数值测试一下。 回到游戏,阳光的点数也跟着变了,说明我们找对了,这就是阳光所在内存中的地址。接下来是重头戏,右键点击这个地址,选择找出写入该地址的来源,回到游戏,再次种下一颗植物, 面板上会跳出一条 m o v 指令, m o v 就是 英文 move 移动的缩写。用大白话来说,这条指令的意思很简单,就是把 esi 盒子里的东西塞进 e d i 抽屉的某个特定格子里, 它有点像编程语言里的赋值操作,但又不完全一样。这里我们先挖个坑,后面会专门出一期视频来详细拆解。会编指令复制这个地址, 点击停止,注意这里一定要关闭 ce, 现在记下这个内存地址,打开 x 三二 debug 调试器,注意看游戏是三十二位的,所以这里我们一定要用对应位数的调试器。点击文件附加,找到游戏进程, 按下快捷键, ctrl 加 g, ctrl 加 v 粘贴,直接跳转到刚才找到阳光地址的位置, 接着点击左侧红色按钮,在这里下一个断点,回到游戏,再次消耗一次阳光,程序就会啪的一下停在这里。 大家知道,在游戏的代码里,阳光其实就是一个数字,当你种下一颗向日葵时,程序会翻开它的阳光账本,做一个减法操作。我们今天的终极目标就是 揪出这个做减法的动作。那问题来了,怎么在这堆代码里找到扣除阳光的指令呢?其实很简单,因为程序是从上往下执行的,我们只需要顺着断点往上找 看,这里有一条 sub, e s i 逗号 e b x, 这个 sub 就是 英文单词 subject 的 缩写,它就是我们要找的幕后黑手。点击继续执行, 在 sub 这一行的位置下一个断点,再次回到游戏中一颗植物,可以看到断点正常停下, 点击这一行,注意这个位置。 e b x 有 一个值,是一个十六进字数,打开计算器,把这个数转成十进字,看看,刚好对应植物的价格。 那么问题来了,我们是不是可以修改 e、 b、 x 的 值,把它改成一呢?这样不就达到我们的目的了吗?每次种植植物都扣一点阳光,这样做可以吗?这里直接说答案,不行,我们可以来试试看,直接修改这个 x、 b, 把它改成一,点击这一行,按 空格弹出对话框,删除 x b, 把它改成十六进字的一, 点击继续执行。可以看到 x debug 底下出现了一个报错, 我们解除附加试试看。哦豁,程序闪退了,并出现了一个致命错误,所以我们直接这样暴力修改肯定是不行的。那该怎么办?我们要明白为什么会这样?这里就涉及到会编里一个非常核心的概念,机器码长度。在会编里, sub esi 逗号零叉零一,这条指令对应的机器码是八三, e e 零一刚好占三个字节,但是原来的那条指令只占两个字节,当你强行用三字节的指令去覆盖原来只有两字节的位置时,多出来的那个字节就会越界。 这就好比什么呢?机器马就像是斜死在马路上的车位,原来那个车位只允许停一辆宽两米长的车,你非要强行塞进去一辆宽三米长的车,结果就是多出来的车头直接怼进了隔壁的车位, 把别人停在那里的车给刮蹭了。程序的逻辑全乱了,游戏当然就崩溃了,所以这样简单粗暴的暴力修改肯定是行不通的。那到底该怎么优雅的实现修改呢?既然暴力修改会撞坏隔壁的车,那我们换个思路。 前面我们说过,原来的指令 sub e s i 逗号 e b x 刚好是两个字节。那我们能不能自己量身定制一条同样是两个字节,又不会破坏原程序的指令, 完美的把它替换掉呢?哎,答案是,当然可以。这里我们就要请出两位黄金搭档。第一位是 d e c e s i 指令,它的意思是让 e s i 里的寄存器的值减一,这条指令的长度刚好是一字节, 那是光有它还不行,还差一个一字节才能凑够原来的两字节。这时候第二位搭档 nope 指令就闪亮登场。 nope 指令的全称是 no operation, 翻译成大白话就是啥也不干,专门用来占车位。长度刚好也是一字节。我们把 d e c e s i 和 nope 组合在一起,一加一刚好等于二,这样我们不仅能够完美地凑够原来的两个字节,还巧妙地避开了越界崩溃的风险。接下来我们来验证一下,在 x 三二的 bug 里, 把原来的代码替换成这两条新的指令, 点击继续执行。回到游戏,再种一颗植物试试看,阳光只扣减了一点, 我们成功了。知道了这个过程,我们就来写一波代码吧。把刚才逆向调试的过程打包成一个专属的小外挂。首先打开 wechat studio, 新建一个空项目, 找到解决方案管理器,右键选择添加新项目,在弹出的模板列表里选择动态链接库。哎,也就是大家常说的 d l l 文件, 为了保持项目干净,我们把系统默认生成的那些文件删掉,只保留核心的 d l l 那 文件。 这里有一个小细节,熟悉 c 加加的同学可以直接保留默认的点 c p p 后缀。不过因为主播个人对 c 语言更加熟悉,所以我们这里手动把后缀改成了点 c。 咱们今天就用 c 语言来编写这个外挂。 在正式开始敲代码之前,我们还需要结合这个 d l l 项目做一个关键的小配置,这一步非常重要,大家跟着我一步一步来。 首先在解决方案管理器里右键 dl 项目名称,选择最底下的属性。 接着在左侧的树状菜单中找到 c 杠 c 加选项,在它前面的小箭头点击展开,然后找到预编一头,最后在右侧的预编一头下拉菜单里 把它改成不使用域编辑头文件,然后点击保存。为什么要改这个呢?这里简单的科普一下。因为 vs 默认会开启域编辑, 如果不关掉它,我们等会写 c 语言代码的时候,可能会报错,说找不到某个库之类的文件,把它关掉,避免后续的麻烦。接着在原来的空项目里新建一个文件,输入 index 点 c。 看到这里,我想观众朋友们应该已经明白我要做什么了,没错,就是 dl 注入。如果不明白 dl 注入是什么,可以看我晚期的视频。那么什么是 dl 注入呢?为什么要用它? 简单的来说,我们的终极目标就是强行让游戏加载我们刚刚自定义的这个 dl, 一 旦注入成功,我们的代码就会像特洛伊木马一样直接潜入游戏的内部,在他的内存里执行。 只有拿到了游戏的最高权限,我们才能随心所欲的修改它的底层逻辑,真正的实现我们刚才说的种花只扣一点阳光。 代码如下,首先定义一个查找进程 id 的 函数,接着在游戏进程里开辟一块新内存空间,然后调用 right process memory 把自定义的 dl 写入到游戏进程里。 要用 windows 系统的 load library 函数来加载 d l l。 最后创建远程县城,让游戏来执行我们的 d l l。 接下来看 d l l 梦碟 c。 首先获取游戏在内存中的 g 地 址,使用 g 地址加偏移量,找到刚才那条萨布指令的地址。接下来是 d e s 和 no 指令对应的自解码,这个自解码可以在 x 三二 d bug 中这个位置看到 程序的基地址,可以在预制面板中找到偏移量,可以使用 sub 的 地址减去基地址来计算,这是一个固定的值。这里给大家通俗的解释一下什么是基地址和偏移量。我们可以把程序在内存中的运行想象成搭成地铁。 假设你今天从人民路去奥体中心,是从第六节车线上车的,明天你从奥体中心回家,依然还是习惯从第六节车厢上车。在这个过程中,无论这趟地铁停靠在哪个站台。哎,这就好比游戏每次启动时系统分配的基地址 可能都不一样。第六节车厢距离第一节车厢的位置永远是固定不变的,这段固定的距离在逆向工程中被称为偏移量。所以不管游戏怎么改变基地址, 我们只需要记住这个相对距离就行了。在代码里,我们只需要用当前获取的动态基地址加上这个固定的偏移量,就能像导航一样精准不误地找到那条 saf e s i 逗号 e x b 指令的绝对地址。 最后通过解锁权限、偷梁换柱、重新上锁。这三步一气呵成,我们就能够神不知鬼不觉地修改游戏的核心逻辑。现在重新启动一下游戏,编一项目, 在 d l 梦点 c 的 这个位置下一个断点,把游戏添加到附加进程中,调试 找到 inject 点 c 点 exe 运行,可以看断点正常停下, 点击继续执行。种一颗植物试试,可以看到消耗已经是一点阳光了,这说明我们的代码已经被游戏成功执行了,这就是游戏底层模改的全部技术细节了。
粉丝3700获赞1.6万


氪金没必要白嫖,我教你。今天要分享的神器是 c e 万能游戏修改器,支持手机和平板全部兼容。教程简单易懂,跟着步骤小白也能学会。首先点赞分享本条视频, 然后复制一下,在手机应用里找到这个,打开它,等待两秒就会弹出资源包,没有弹出的就会视频重新分享。复制进去后,在工具箱里面找到这个保存下。

首先我们来到 c e 的 官网,网址我们会放在评论区,我们先点击下载,下载 c e 的 本体,然后点这里往下拉,找到中文简体的汉画包,双击下载,我们等待一会, 双击打开,点试默认语言,选择英文等等,再做修改, 点下一步,这里注意一下,这个是捆绑包软件,我们点拒绝,然后等待安装完成, 然后我们打开 c 盘里的这个文件夹,双击打开看,找到 c e 的 文件夹, 找到语言,然后把我们刚刚下载下来的汉化包解压, 解压后的文件夹拖到里面去,点继续 右键这个文件,选择打开方式,选择记事本,打开,将末尾的新号改成刚刚拖进来文件的名字,复制一下 保存关闭,再打开,可以看到已经可以了。


还有兄弟问我 c e 修改器怎么用,我今天一次讲完以后不讲了。好吧,我不是传给你这个 c e 修改器了吗?你打开,你先解压出来, 加出来之后你找到我看一下,找到这个这个 c 什么什么 e, 这个好,进去之后把其他的全关了,就留这一个啊,然后打开游戏。 好, 我们切到这个 c 修改器,然后呢?左上角这不有一个小电脑的标志吗?点开,点开之后找到这个游戏这个进程,这个游戏进程,然后点打开 之后呢,我们要修改这个游戏币的数据,对不对?好,从数值这输入一千五,这是根据你自己游戏币来的啊,我这个游戏币是一千五,所以你就输入一千五了, 然后他会出现很多结果。好,我们下一步要做的啊,就是在游戏中改变这个游戏币的这个数值。 好,现在是九百一十二。好,我们切到这个 c e, 然后再在这个一千五这把一千五删了,然后再找到,再输入九幺九幺二, 这不出来五个数值吗?把这五个数值啊,把这五个数值全选上,双击会选到下边来啊,把五个全选上, 好,下一步啊,就是修改数据了啊,这个数值在数值这双击,他会输入新的数值,就是你想要修改的游戏币多少钱,比如说咱修改五个八,好,五个八, 一样的啊,把这剩下的这四个数据全都修改成一样的,全都修改成五个八 好了,修改完之后啊,不用管他了,然后回到游戏,现在还是九幺二,你随便点一下。 ok, 这样就修改成功了啊,以后不要问我了,我已经讲完了,像这个 这个生命啦、心智了什么的,这个等级也是可以修改的,也是可以修改的。找到九,然后改变它的数值,完了之后就修改就行了,就这个东西就修改就行了啊?
