
Cheat Engine 一般简称为CE,它是一款开放源代码的作弊软件,其主要功能包括、内存扫描、十六进制编辑器、动态调试功能于一体,且该工具自身附带了安全工具,可以用它很方便的生成自己的脚本,CE可以说是目前最优秀的游戏修改器不是之一,这款修改工具绝对值得你去学习,只需要花一点点时间就够了。
环境准备::配置CE
该工具打开后默认是英文的,你需要修改一下,如下所示,选择 edit -> setting -> 选择中文,重启即可。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
1.打开解压后的CE目录你可以看到下面的目录结构,其中Cheat Engine.exe就是CE的主进程,而Tutorial-i386.exe则是一个练习环境,我们后续内容都会围绕这个练习环境展开.
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
2.接着我们打开Cheat Engine.exe(如果系统是32位的则打开cheatengine-i386.exe)请务必使用管理员权限运行CE修改器,如下:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
3.使用CE修改器附加cheatengine-i386.exe进程,操作过程如下:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
教程到这里就结束了,第一关就这么简单
好了,点击下一步按钮进入下一个步骤(或输入密码进入你要练习的步骤)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
第二关::精确扫描数值
附加Tutorial-i386.exe进程后,我们点击教程的下一步按钮,接着继续第二关,第二关的作用还是很简单的,主要目的是遍历出我们想要的动态数据,比如角色的生命,人物的魔法等,都会用到精确扫描,可以说这一关是既简单又实用的东西,也是今后制作中最常用的环节,接着我们看下Tutorial-i386.exe程序对这一关通关流程的描述:
步骤 2: 精确值扫描 (密码=090453)
上面的简单描述的意思就是,需要将100这个数值修改为1000则本关就算通过,看下面具体的步骤
1.首先游戏规则是每次我们点击打我按钮则健康值则会减一,我们首先搜索这个100看能不能找到些什么.
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
现在开始搜索精确数值 100 数值中输入100 点击 首次扫描 按钮
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
默认情况下一般游戏就是4字节,这里不需要改动扫描类型和数值类型,默认就好了.
这次扫描我们得到 35 个结果,里面肯定有我们要找的那个血值,不过好像太多了,没关系继续往下看.
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
关键一步:为了找到更加精确的数据,我们回到 Tutorial 点击 打我 按钮,此时血值已有变化了:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
我们再输入 95 点击 再次扫描 按钮 结果只剩1个(这就是我们要找的),我们双击此地址将其添加到地址栏:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
此时地址栏里面只有1个结果了,这个就是我们要找的内存地址,双击将其加入到地址栏
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
在数值95上面双击,并修改把 95 改成 1000 点击确定按钮,此时通关.
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
此时回到Tutorial-i386.exe程序,会发现教程的 下一步 按钮变成可用,再次点击打我按钮,数值变大了,继续点击下一步进入第三关…
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
第三关::未知数值扫描
经过第二关的练习,你已经理解了如何利用”精确数值”扫描查找数值了,让我们进行下一步。
本关主要用来搜索进度条,人物血条等,因为这些数据通常是一个进度条,我们无法直接看到的数据,此时可以通过变更的数据一步步筛选找到动态地址。
步骤 3: 未知的初始值 (密码=)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
此时在CE修改其中点击 新扫描 然后选择 未知初始数值,其他的选项不用动。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
点击 首次扫描 然后出现了肯定是N多的结果,因为太多了,CE没有显示出来。
老办法,回到 Tutorial.exe ,点击打我 ,CE会告诉你血量减了多少,比如 -6
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
这里面我们换个思路,假设CE没告诉我减少了多少或者我根本没看清,这时应该怎么办呢? 注意看下面的操作
一、扫描减少的数值: 下拉框,选择减少了的数值,按再次扫描(此时血量减少了)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
二、扫描不变的数值: 拉框,然后选择 没变动的数值(此时血量没有变化)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
三、反复操作: 再回到Tutorial ,点击 打我 => 扫描减少了的数值 => 扫描没变动的数值 反复操作,最后就会只剩4个地址
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
四、简单判断: 简单判断下(Tutorial中告诉你了这个数值是小于500的),很容易就找到了最终的地址。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
双击把地址加到地址栏,然后更改数值为5000。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
就可以过关了(前面教程有说过,这里就不再重复了)闯关成功。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
大家一定要明白这样操作的思路:
这样反复筛减,就能很容易找到最终的结果。
第四关::浮点数的扫描
在前面的教程中我们使用4字节的方式进行扫描,但有些游戏使用了"浮点数"来存储数值(这么做是为了给菜鸟制造一些麻烦,让他们没那么容易修改游戏)。
浮点数是带有小数点的数值(如 5.12 或 11321.1),正如本关中的健康和弹药,两者都以浮点方法储存数据,不同的是,健康值为单精度浮点数,而弹药值为双精度浮点数。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
1.在扫描浮点数时,我们需要将数值类型改为浮点数,浮点数扫描时不必输入后的小数 97.0000 扫描时输入97就可以了。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
2.此时将97这个浮点数改为6000即可。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
3.接着搜索双浮点数,也就是找到弹药的内存地址。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
4.最后改写弹药将99.5改成6000即可通关。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
5.最后,点击下一步,本关通过。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
这里面要强调的是:
第五关::代码替换功能
1.首先先找到血量的内存地址,不会找的先去看前面几关,这里就不重复了,然后 在地址上 右键=>找出是什么改写了这个地址:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
2.在弹出的小窗口中点击是按钮 ,会弹出一个如下所示的小窗口,这个窗口此时没有任何数据。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
3.然后我们回到教程中,点击教程中的 改变数值 按钮。会出现如下代码mov[eax],edx不用管他的意思。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
4.小窗口中会出现一行代码,选中代码,然后点击替换按钮。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-roSNfDAo-14)(https://img2018.cnblogs.com/blog///–.png)]
5.最后一步:直接按确定就可以
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
6.然后回到附加的程序,点击改变数值的按钮,你会发现按钮已经没有用了。本关操作已经结束了
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
操作非常简单,但是为什么这样就会使按钮的功能失效:
第六关::关于指针寻找
上一步阐述了如何使用"代码替换"功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,所以我们需要学习如何利用指针。
在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不但能改变数值而且还会改变数值在内存中存储的位置。
1.首先老样子,我们先找到程序的动态地址,如下我们搜索100。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
2.点击改变数值后,继续搜索。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
3.找到血量的地址后,加入到地址栏,然后在地址上按 右键=>找出是什么改写了这个地址,然后点击 改变数值 按钮,出现一行代码(见第五关),双击那行代码(或者点击详细信息)。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
4.然后出现一个信息框,具体的代码是什么意思就不解释了,CE会告诉你下一步该做什么,图:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
CE让我们下一步找 0(在你电脑显示可能不是这个地址,因为它是动态地址),继续操作:
5.返回到CE,点击新扫描,先勾上HEX,填入0,点击首次扫描。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
一定要勾上HEX,否则CE在搜索16进制字母时会报错。搜索结果出来了:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
这个地址 00 显示的是 绿色 的,你的电脑上也应该是这个地址,因为它就是基址。
记住:在CE中显示绿色的地址是基址,黑色的地址是动态地址
6.手动添加一个指针,点击 手动添加地址
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
图示操作,输入 00 然后点击确定
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
7.注意看:指针在地址栏显示的是 p-> 地址 这种类型的
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
我们将数值改成5000,再点击前面的锁定
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
然后点击 Tutorial 中的 改变指针 按钮,这关就可以过了。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
这一关相当重要,大家一定要多多练习(学会前六关,你已经可以修改大部分的游戏了)
第七关::简单代码注入
从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。
代码注入是将一小段你写出的代码注入到目标进程中并执行它的技巧。在这一步教程中,你将有一个健康值和一个每按一次将减少 1 点健康值的按钮,你的任务是利用”代码注入”,使每按一次按钮增加2点的健康值。
老样子,根据动态数据反复查找,查找血量的地址,然后再地址上 右键=> 查找写入的地址,为啥不是查找访问的地址呢?这里不需要明白,照着做就可以了
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
然后按一下打我按钮,会出现一行汇编代码 0042585D - 83 AB 01 - sub dword ptr [ebx+00000478],01 <<
这条指令的作用是,将[ebx+678]地址中的数据减1,sub为减法的汇编格式。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
双击那行代码,看下详细信息:
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
这行代码什么意思呢?sub 大家都知道是减少的意思
图示红框处:EBX=0184D5E0,我们用计算器算一下(注意是16进制的)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
184D5E0+ 478 = 184DA58 —> 正好是血量的动态地址
sub [ebx+00000478] = sub [184DA58] 够清楚了吧,这就是让血量减1的代码(1省略了),其实CE中也有提示 Decrement by 1 。
明白了这行代码的意思,我们回去看看Tutorial的要求:把减1改成加2。
继续操作。选择反汇编程序,如下步骤
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
点击工具,选择自动汇编
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
第一步:选择CT表框架代码
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
第二步:选择代码注入
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
对应的地址不要搞错了,是"Tutorial-i386.exe"+2585D,这里不需要动,保持默认就可以
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
然后按确定,会自动生成汇编代码,这些代码是什么意思,我们不用管,找到关键的一行:sub dword ptr [ebx+00000478],01
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
将原来的sub dword ptr [ebx+00000478],01,改成 add dword ptr [ebx+00000478],02,每次递增2
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
然后在地址栏就可以看到这个脚本了,点击前面的 单选框 执行,然后点击Tutorial中的打我,这关就可以过了。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
你感觉到他的神奇了吗?逆天级的修改:
如果你学会了这一关,你已经脱离菜鸟的行列了,已经可以对付绝大部分的游戏了。
第八关::查找多级指针
本关是第6关的加强版,CE 6.X 教程中的4级指针比5.X的要简单些。多级指针就像玩解谜游戏一样,谜团不只一个,盒子中还有盒子。这里面是4级指针,游戏中也有比如8级指针,12级指针等等,思路都是一样的。
1.第一步你需要按照第二关中的方法找到,动态地址,然后加入到地址栏中。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
查找一级指针: 找到血量地址 0169B5F8(动态地址),然后 右键 => 查找写入
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
然后回到教程程序中,点击 改变数值按钮 ,如下
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
点击详细信息
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
出现代码的详细信息。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
这个该怎么看呢?ESI= 0169B5E0
ESI+ 18 = 0169B5F8 就是血量的地址,也就是说。想找到血量的地址就要找到ESI,注意看了图中一行字:
>>>> 要查找地址的指针的可能值是 0169B5E0
如果您觉得分析太麻烦,就按CE的建议来,这里面要提醒各位注意 可能 这个词,也就是说不一定全对。
第6关也提到过偏移的概念。这里面的一级偏移是 18
总结:一级偏移是 18 下一个搜索目标是 0169B5E0
查找二级指针: 下面找ESI,勾上HEX(16进制),输入 0169B5E0 新扫描。
然后把新地址 0169B5E0 添加到地址栏,在地址上右键=>选择 查找访问的地址。
一定要注意:这里面和上面的操作不同,第一次是查找写入的地址,这次选择的是查找访问的地址。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
如果没有出现代码信息。我们就到 Tutorial 中点击一下 改变数值 按钮,之后会收集到两条指令,cmp 指令跟指针没什么关系,对我们有用的是第二条指令 mov esi,[esi]。
这里由于是 mov esi,[esi] 默认我们将其偏移地址看作是 0
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
不过问题来了,我们发现,这里提示的地址和上一次提示的地址是一样的,这是为什么呢?
CE 默认使用硬件断点的方式,断点只能停在指令执行之后,而这条指令正好是把 esi 原来指向的地址中的值再赋值给 esi,所以执行之后 esi 的值已经是被覆盖掉的值了,而我们想知道的恰恰是执行这条指令之前的 esi 值, esi 就是这个我们监视的地址。
所以直接搜索这个地址即可。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
将 0C 这个地址添加到下方,然后使用 找出是什么访问了这个地址,再来一遍。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GhP8pbnL-49)(https://img2018.cnblogs.com/blog///--.png)]
最后得出:二级偏移是 0 ,下一个目标是 0169B5E0
查找三级指针: 接下来和查找一级指针方法相同,这里我们在弹出的框中选择第二条指令。可看到二级偏移是 14
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
继续查找三级指针,方法同上,这里三级指针是0c。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
最后得出:三级级偏移是 0c ,下一个目标是 0
查找四级指针: 继续搜索0 这个动态地址,如下。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
一定要记住:在CE中显示绿色的地址是基址,黑色的是动态地址。如果有多个绿色地址,一般情况下我们选择第一个。
这里我们已经找到了所有的地址,接下来串一下这些地址看看
00 + c + 14 +0 + 18
把基址(一级指针) “Tutorial-i386.exe”+1FD660 的值取出来,加上一级偏移 0C,当做地址,这是二级指针的地址,再把二级指针的值取出来,加上 14,这是三级指针的地址,依次类推。
添加并测试指针: 最后测试,指针是否生效。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
添加后锁定数值为5000,然后点击例子中的改变指针按钮,看是否能通关。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
建议大家,如果想深入研究的话,最好能过学习一下Windows 32位汇编语言
第九关::查找共享代码
1.首先你需要根据第一关中的搜索方法,分别将下面四个人物的血量搜索到,下面我已经搜索好并做好了备注。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
2.你可以分别在每个动态地址上面,右键选择【找出是什么改写了这个地址】,会发现这四个地址都指向了同一条汇编代码,这也就说明了其使用了共享代码。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
3.我们直接在每一个地址上面右键选择【浏览相关内存区域】,然后对比四个地址会发现一些规律。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
我方队友的结构
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
敌人的结构
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
4.接下来我们要注入代码了,CE切换到内存浏览窗口,然后选择【工具 -> 自动汇编】,【模板 -> 代码注入】点击确定。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
上方原始代码是 mov [ebx+04],eax,意思就是,血量处于 ebx+04 的位置。
5.为了能够遍历到状态位,我们需要计算出队伍编号和血量的偏移值,
观察下图发现 Dave 血量地址是 019E0794 和队伍编号地址 019E07A0,两者十六进制相减(019E07A0 - 019E0794 = 0C)得到0C,如果血量是 ebx+04,那么队伍编号就应该是 ebx+04+0C 就是 ebx+10。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
6.直接写以下汇编代码,然后执行,注入完成后回到练习程序中然后点击【重新启动游戏并自动执行】,本关会顺利通过。
![CE修改器使用教程 [入门篇]](https://javaforall.net/wp-content/uploads/2020/11/2020110817443450.jpg)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205527.html原文链接:https://javaforall.net
