CE 介绍

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后,即可为中文版。

在这里插入图片描述

Cheat Engine 训练教程

附加进程

在这里插入图片描述

按照CE自带的训练教程,我们开始第一步。

在这里插入图片描述

附加进程后的界面如下

在这里插入图片描述

精确值扫描

在这里插入图片描述

第二关的作用还是很简单的,主要目的是遍历出我们想要的动态数据,比如角色的生命,人物的魔法等,都会用到精确扫描,可以说这一关是既简单又实用的东西,也是今后制作中最常用的环节.
简单描述的意思就是,需要将100这个数值修改为1000则本关就算通过。我们首先尝试搜索数值100,默认情况下一般游戏就是4字节,这里不需要改动扫描类型和输出类型,默认就好了。点击首次扫描,看看会出现什么结果。

在这里插入图片描述

这次扫描我们得到 49个结果,里面肯定有我们要找的那个血值,但是找下去有点复杂,我们继续往下看。

在这里插入图片描述

我们再次回到Tutorial页面,点击“打我”,可以看到数值变化为97

在这里插入图片描述
我们再次搜索数值97,得到一条结果。

在这里插入图片描述

此时地址栏里面只有1个结果了,这个就是我们要找的内存地址,双击将其加入到地址栏。

在这里插入图片描述

在数值95上面双击,并修改把 97 改成 1000 点击确定按钮。

在这里插入图片描述
回到教程后,即可发现“下一步”按钮亮起,点击即可通关。

未知的初始值

在这里插入图片描述

本关主要用来搜索进度条,人物血条等,因为这些数据通常是一个进度条,我们无法直接看到的数据,此时可以通过变更的数据一步步筛选找到动态地址。
点击新的扫描,选择未知的初始值,点击首次扫描。

在这里插入图片描述
显示有927744条结果,由于结果太多,所以CE未列出来。

在这里插入图片描述

老办法,回到 Tutorial.exe ,点击打我 ,CE会告诉你血量减了多少,比如 -3

在这里插入图片描述
我们换个思路,假设CE没告诉我减少了多少或者我们根本没看清,这时应该怎么办呢?

  1. 扫描减少的数值: 下拉框,选择减少了的数值,按再次扫描【此时血量减少了】在这里插入图片描述
  2. 扫描不变的数值: 拉框,然后选择未变动的数值【此时血量没有变化】

在这里插入图片描述

  1. 反复操作: 再回到Tutorial ,点击 打我 => 扫描减少了的数值 => 扫描没变动的数值 反复操作,最后就会只剩4个地址
  2. 判断: 简单判断下(Tutorial中告诉你了这个数值是小于500的),很容易就找到了最终的地址。
    血量减少=>CE搜索减少的数值
    血量不变=>CE搜索不变的数值
    血量增加=>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。这条指令的作用是,将血量地址中的数据减1sub为减法的汇编格式。

在这里插入图片描述

我们接下来的操作需要将减一改为加二。选择反汇编程序,如下步骤。

在这里插入图片描述
点击工具,选择自动汇编。

在这里插入图片描述

点击模板,选择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秒内将数值改为50003秒内将数值改为5000,即下一步按钮亮起,本关通过。

在这里插入图片描述

查找共享代码

在这里插入图片描述

首先我们老规矩,找出四个人物的血量地址。

在这里插入图片描述
我们可以分别在每个动态地址上面,右键选择“找出是什么改写了这个地址”,会发现这四个地址都指向了同一条汇编代码,这也就说明了使用了共享代码。

在这里插入图片描述
我们在每一个任人物对应的地址右键,选择“浏览相关内存区域”,对比四个地址找到规律。
我方队伍:

在这里插入图片描述

在这里插入图片描述
对手队伍:

在这里插入图片描述

在这里插入图片描述
上面的四个图片可以看出,名字的开头字母来决定,如果是DE开头,则说明是队友不能让其掉血,否则的话则直接执行扣血代码。或者每个人血量后+C可以明显分出是敌是友,为1就是友军,为2就是敌军。
接下来我们开始注入代码。

在这里插入图片描述
模板 -> 代码注入

在这里插入图片描述
加入这三行代码:

cmp [ebx+10],2
jne originalcode  //不是2,就是友军,正常扣血吧
mov eax,0 //是敌军,直接秒杀

在这里插入图片描述
执行以后,点击重启游戏并自动执行,即可看到下一步按钮亮起,即本关通过。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐