来源:互联网转载 | 更新日期:2023-09-04 19:46:14
Cheat Engine ,简称CE,是逆向工程师常用的几大神器之一,也是游戏汉化、破解以及外挂编写中常用的工具,其功能包括:内存扫描、十六进制编辑器、调试工具,可以进行反汇编调试、断点跟踪、代码注入等诸多高级功能。
它还附带了调试器、反汇编器、汇编器、变速器、作弊器生成、Direct3D操作工具、系统检查工具等。
支持 lua 语言,可以实现自己定义的逻辑功能,而不仅仅是简单的锁定数据。也可以在代码注入的同时注入 lua 插件,使游戏进程与 CE 进程进行交互。 CE 的大部分功能都可以通过 lua 来操作。
它还支持 D3D Hook 功能,可以在游戏中显示十字准星,也可以绘制功能菜单,同时也可以对 D3D 的调用栈进行跟踪调试。
自带变速功能,通过 Hook 游戏相关函数改变游戏速度。
自带了一个 Trainer 的功能,可以将自己在 CE 中实现的功能单独生成一个 exe 文件,并可以使用 lua 创建比默认样式更加复杂的窗体或功能。
下载链接:https://www.cheatengine.org/downloads.php
点击后即可自动跳转到下载安装文件,点击下载完成的exe文件,选择语言为English,分别点击next -> accept直到安装完成即可。
安装完成后,在官网页面下载中文汉化包并解压
右键点击桌面CE图标,选择“打开文件所在位置”,将解压的汉化包复制到languages文件夹中。
重启CE后,点击最上面一栏的Edit,选择Settings。
来到设置页面后,按下图所示,依次点击,重启CE后,即可为中文版。
按照CE自带的训练教程,我们开始第一步。
附加进程后的界面如下
第二关的作用还是很简单的,主要目的是遍历出我们想要的动态数据,比如角色的生命,人物的魔法等,都会用到精确扫描,可以说这一关是既简单又实用的东西,也是今后制作中最常用的环节.
简单描述的意思就是,需要将100这个数值修改为1000则本关就算通过。我们首先尝试搜索数值100,默认情况下一般游戏就是4字节,这里不需要改动扫描类型和输出类型,默认就好了。点击首次扫描,看看会出现什么结果。
这次扫描我们得到 49个结果,里面肯定有我们要找的那个血值,但是找下去有点复杂,我们继续往下看。
我们再次回到Tutorial页面,点击“打我”,可以看到数值变化为97。
我们再次搜索数值97,得到一条结果。
此时地址栏里面只有1个结果了,这个就是我们要找的内存地址,双击将其加入到地址栏。
在数值95上面双击,并修改把 97 改成 1000 点击确定按钮。
回到教程后,即可发现“下一步”按钮亮起,点击即可通关。
本关主要用来搜索进度条,人物血条等,因为这些数据通常是一个进度条,我们无法直接看到的数据,此时可以通过变更的数据一步步筛选找到动态地址。
点击新的扫描,选择未知的初始值,点击首次扫描。
显示有927744条结果,由于结果太多,所以CE未列出来。
老办法,回到 Tutorial.exe ,点击打我 ,CE会告诉你血量减了多少,比如 -3。
我们换个思路,假设CE没告诉我减少了多少或者我们根本没看清,这时应该怎么办呢?
双击把地址加到地址栏,然后更改数值为5000。
在扫描浮点数时,我们需要将数值类型改为浮点数,浮点数扫描时不必输入后的小数 97.0000 扫描时输入97就可以了。
将地址双击加入地址栏,修改数值为5000即可。
接着搜索双浮点数,也就是找到弹药的内存地址。
按照上面相同的步骤,修改数值为5000。
修改完数值后,点击下一关即可。
浮点数的长度是4字节,使用4字节也可搜索到浮点数,但需要使用模糊搜索。
双浮点数的长度是8字节,使用8字节也可搜索到浮点数,但需要使用模糊搜索
现在好多游戏都采用浮点数来处理。例如在扫描游戏时发现一个数值是 1120403456 ,这时候就要想到它是浮点数。
4字节的 1120403456 = 浮点数的 100 ,目前的游戏大多以4字节(含浮点数)为主。
首先先找到血量的内存地址,然在地址上右键=>找出是什么改写了这个地址。
在弹出的小窗口中点击YES按钮 ,会弹出一个如下所示的小窗口,这个窗口此时没有任何数据。
然后我们回到教程中,点击教程中的 改变数值 按钮。会出现如下代码mov[eax],edx不用管他的意思。
小窗口中会出现一行代码,选中代码,然后点击替换按钮。
回到教程后,点击改变数值,发现按钮失效。继续点击下一步,即可通关成功。
改变数值按钮其实是通过 代码 0045aecb - 89 10 - mov [eax],edx 来实现数值改变的。我们的最后一步操作就是要把这行代码替换成什么也不做【英文是 Nop】,这样就会让按钮的功能失效。
首先还是之前一样,我们先找到数值的动态地址。
找到血量的地址后,加入到地址栏,然后在地址上按右键=>找出是什么改写了这个地址,然后点击”改变数值“按钮,出现一行代码【见第五关】,双击那行代码【或者点击详细信息】。
然后出现一个信息框,具体的代码是什么意思不需要明白,CE会告诉你下一步该做什么。
CE让我们下一步找 017F3FA0 【每个人电脑显示可能不是相同的地址,因为它是动态地址】,继续操作。
返回到CE,点击新扫描,先勾上HEX,填入 017F3FA0 ,点击首次扫描。这个地址 006566B0,就是基址。在CE中显示绿色的地址是基址,黑色的地址是动态地址。
手动添加一个指针,点击 手动添加地址。按接下来图示操作,点击确定即可。
注意看:指针在地址栏显示的是 p-> 地址 这种类型的
我们将数值改成5000,再点击前面的锁定,激活让其永久生效。
然后点击教程中的“改变指针”按钮,下一步按钮亮起,这关就可以过了。
补充:
并不是所有的游戏都要找基址然后做指针,有的游戏直接就是基址;
基址是绿色的,如果找到最后有多个绿色地址,在一般情况下选择第1个。
我们还是老规矩,先找出血量的地址。
在地址处点击右键,选择“找出是什么改写了这个地址”
点击教程中的“打我”,会出现这样一行代码,>>00427B13 - sub dword ptr [ebx+000004A4 ],01。这条指令的作用是,将血量地址中的数据减1,sub为减法的汇编格式。
我们接下来的操作需要将减一改为加二。选择反汇编程序,如下步骤。
点击工具,选择自动汇编。
点击模板,选择CT表框架代码。
点击模板,选择代码注入。
跳转到一个代码注入模板窗口,选择默认地址即可。
点击OK,即可自动生成如下代码,找到关键一行代码。
将代码sub dword ptr [ebx+000004A4],01改为add dword ptr [ebx+000004A4],02 即可。
然后我们就可以看见地址栏有如下一行脚本。
点击教程中的“打我”按钮,可以看到“下一步”的按钮亮起,即可成功到下一关。
这一关可以看作是第六关的加强版,老规矩,我们先找血量地址。右键,点击“找出是什么改写了这个地址”。
回到教程中点击“改变数值”,查看汇编指令的详细信息。
ESI+ 18 =018C0B90 就是血量的地址,偏移地址为18。也就是说。想找到血量的地址就要找到ESI,注意看了图中一行字:要查找地址的指针数值可能值是 018C0B78。
查找一级指针:我们接下来找ESI,按下图操作找出ESI地址。
在地址处点击右键,选择“找出是什么访问了这个地址”。
点击教程中的“改变数值”按钮,会发现出现两条指令。
左边一条是关于CPU的,我们重点关注第二条指令。
这条指令中,我们可以将偏移地址默认为0。我们发现指针数值上一次提示的一样。CE 默认使用硬件断点的方式,断点只能停在指令执行之后,而这条指令正好是把 ESI原来指向的地址中的值再赋值给 ESI,所以执行之后 ESI 的值已经是被覆盖掉的值了,而我们想知道的恰恰是执行这条指令之前的 ESI 值,ESI 就是这个我们监视的地址,所以直接搜索这个地址即可。
将得出的新地址,右键选择“找出是什么访问了这个地址”。
二级偏移是 0 ,下一个目标是 0169B5E0。
查找二级指针:接下来使用查找一级指针的方法
三级级偏移是 14 ,下一个目标是 0195C1C0
查找三级指针:继续搜索动态地址
查找四级指针,直至找出基地址
这些地址,除基地址外,都是随机变动的。
在CE中显示绿色的地址是基址,黑色的是动态地址。如果有多个绿色地址,一般情况下我们选择第一个。
我们已经找到了所有地址,串一下就是:006566E0+C+0=14+18,最后添加指针并测试。
最后锁定数值为5000,点击“改变指针”按钮,会提示你需要在3秒内将数值改为5000。3秒内将数值改为5000,即下一步按钮亮起,本关通过。
首先我们老规矩,找出四个人物的血量地址。
我们可以分别在每个动态地址上面,右键选择“找出是什么改写了这个地址”,会发现这四个地址都指向了同一条汇编代码,这也就说明了使用了共享代码。
我们在每一个任人物对应的地址右键,选择“浏览相关内存区域”,对比四个地址找到规律。
我方队伍:
对手队伍:
上面的四个图片可以看出,名字的开头字母来决定,如果是D或E开头,则说明是队友不能让其掉血,否则的话则直接执行扣血代码。或者每个人血量后+C可以明显分出是敌是友,为1就是友军,为2就是敌军。
接下来我们开始注入代码。
模板 -> 代码注入
加入这三行代码:
执行以后,点击重启游戏并自动执行,即可看到下一步按钮亮起,即本关通过。
Copyright © 网站出售-网站交易平台 版权信息
网站备案号:黔ICP备2023004141号