【软件】cheat-engine
- 语言:选择 edit -> setting -> 选择中文,重启即可。
- 三个图标从左到右
- 打开进程
- 打开文件:打开已保存的CT 文件或未受保护的cetrainer,CT是什么呢,就是你退出CE后, 如果想保留修改结果或者脚本,那么就会以CT格式存盘。(当然可以直接拖动CT文件放进这个界面)(快捷键 ctrl+o)
- 保存文件:保存你目前的数据,另存为可执行程序以便制作一个独立的修改器,简单来说,是保存成一个CT文件
- ct是ce的修改结果保存
第四关:浮点数的扫描
- 在扫描浮点数时,我们需要将数值类型改为浮点数,浮点数扫描时不必输入后的小数 97.0000 扫描时输入97就可以了
这里面要强调的是:
- 浮点数的长度是4字节,使用4字节也可搜索到浮点数,但需要使用模糊搜索。
- 双浮点数的长度是8字节,使用8字节也可搜索到浮点数,但需要使用模糊搜索
-
【待】模糊扫描怎么开
-
现在好多游戏都采用浮点数来处理。例如您在扫描游戏时发现一个数值是 1120403456 这时候您就要想到它是浮点数。
-
4字节的 1120403456 = 浮点数的 100,目前的游戏大多以4字节(含浮点数)为主
第五关:代码替换功能
某些游戏重新开始时,数据会存储在与上次不同的地方, 甚至游戏的过程中数据的存储位置也会变动。在这种情况下,你还是可以简单几步搞定它。
这次我将尽量阐述如何运用"代码替换"功能,第五关的数值每次启动教程的时候都会存放在内存不同的位置,所以地址列表中的固定地址是不起作用的。
步骤 5: 代码替换 (密码=888899)
本关的目的就是要让改变数值的按钮失效,很神奇,但是有什么用呢?
1、在游戏中我们可以利用此功能使金钱数量不会发生变化。
2、可以利用此功能让怪物攻击失效,从而实现无敌的效果。
3、让弹药不会减少,从而实现无限弹药的效果
好处太多了,本关的方法就可以轻松实现上面的功能。
提示:如果你以足够快的速度锁定住该地址,"下一步"按钮也会变为可点击的。
血量的内存地址,地址上 右键=>找出是什么改写了这个地址,点击教程中的 改变数值 按钮,小窗口代码选中后点击右侧替换按钮(nop或者空白)确定
- 为什么这样就会使按钮的功能失效:
改变数值按钮其实是通过代码 0045aecb 89 10 mov [eax],edx 来实现数值改变的。
我们在的最后一步操作就是要把这行代码替换成什么也不做(英文是 Nop),这样就会让按钮的功能失效。
指针
所谓的指针,就是储存有游戏数值地址的地址
划重点,为什么这样说,我想你也发现了,同一个数值储存的地址,每次进入游戏都是
不一样的,但是,有没有办法能直接找到这个地址呢,这就要用到指针了,指针分为多级指针与人造指针,人造指针非常强大,但这里不会这么早讲,因为讲了也听不懂,必须要先有指针的基础才可以,所以还是老实学吧。不要想着一步登天,而且,找到指针是会很有成就感的。
这里跟Tutorial的关卡顺序不一样,本小节,我会直接将一级指针与多级指针一起讲授。
一.一级指针
顾名思义,就是一次就能找到的指针(嗯没错,多级指针就是要找多次的指针)
第六关:关于指针寻找
上一步阐述了如何使用"代码替换"功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,所以我们需要学习如何利用指针。
在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不但能改变数值而且还会改变数值在内存中存储的位置。
接下来我们将找到内存中的基址, 为什么要找指针,在前面的教程中,如果各位细心观察的话就会发现 在我截图中的出现地址和你的地址并不相同。
也就是说,这些地址是一直在变化的,我们把它叫做动态地址。
步骤 6: 指针: (密码=098712)
问题:电脑是如何每次都知道这个动态地址究竟是多少的?
其实并不是所有的地址都会变化的,内存中也有不会变化的地址,我们将不会变化的地址,我们把它叫做基址。
实现思路:用不变的地址定位会变化的地址,即用基址定位动态地址。
-
先找到程序的动态地址,
右键=>找出是什么改写了这个地址,然后点击改变数值按钮,出现一行代码(见第五关),双击那行代码(或者点击右侧详细信息),搜索之前的寄存器地址:- 返回到CE,点击
新扫描,先勾上HEX(否则CE在搜索16进制字母时会报错),填入寄存器地址,点击首次扫描。
- 返回到CE,点击
-
记住:在CE中显示绿色的地址是基址,黑色的地址是动态地址
-
注意:不管绿色是啥别管填进去就行了
-
点击右下角
手动添加地址,输入绿色信息/地址
- 注意看:指针在地址栏显示的是 p-> 地址 这种类型的
- 数值改成5000,再点击前面的锁定
- 点击教程中的改变指针按钮
说明:
1、并不是所有的游戏都要找基址然后做指针,有的游戏直接就是基址
2、基址是绿色的,如果找到最后有多个绿色地址,在一般情况下选择第1个
二、多级指针
第八关:查找多级指针
本关是第6关的加强版,CE 6.X 教程中的4级指针比5.X的要简单些。多级指针就像玩解谜游戏一样,谜团不只一个,盒子中还有盒子。这里面是4级指针,游戏中也有比如8级指针,12级指针等等,思路都是一样的。
在这一步将解释如何使用多级指针。在第 6 步,你已经清楚 1 级指针的概念和用途,并可以利用数值的首个地址找到存放数据真正的基址。
在本关中,你将看到 4 级指针,它由第一个指针指向第二个指针,再由第二个指针指向第三个指针,由第三个指针指向第四个指针,最终指向健康值的真正基址地址。
步骤 8: 多级指针: (密码=525927)
开始的几步与在第 6 步中的操作基本相同。找出是什么访问了这个地址,然后记录下动态地址
接着我们逐级向下查找,在查找的过程中,分别记录下动态地址,以及所对应的偏移地址
最后将这些地址相加,并锁定数值为5000,点击改变指针,然后就可通关啦
- 说白了就是循环找指针直到找到绿色基址,记录过程偏移填入自定义指针,这里偏移都是照抄(所以我暂时不知道是什么进制
- 添加后锁定数值为5000,然后点击例子中的改变指针按钮
- 注意:1级指针是右键查找写入,其余全是右键查找访问。
汇编代码注入
第七关:简单代码注入
从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一。在第6关的时候我们说到指针的找法,用基址定位动态地址。但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大。
代码注入是将一小段你写出的代码注入到目标进程中并执行它的技巧。在这一步教程中,你将有一个健康值和一个每按一次将减少 1 点健康值的按钮,你的任务是利用"代码注入",使每按一次按钮增加2点的健康值。
步骤 7: 代码注入: (密码=013370)
教程中每按一次按钮,会自动减少1点血,你的任务是将其改成每按一次按钮增加2点血。
还记得第5关的不伤血的修改方法吗?这一关就是第5关的加强版。
推荐你从原代码中删除减少健康值的那行代码,否则你得加 3 点健康值
老样子,根据动态数据反复查找,查找血量的地址,然后再地址上 右键=> 查找写入的地址,为啥不是查找访问的地址呢?这里不需要明白,照着做就可以了
然后按一下打我按钮,会出现一行汇编代码 0042585D - 83 AB 78040000 01 - sub dword ptr [ebx+00000478],01 <<
这条指令的作用是,将[ebx+678]地址中的数据减1,sub为减法的汇编格式。
双击那行代码,看下详细信息:
这行代码什么意思呢?sub 大家都知道是减少的意思
图示红框处:EBX=0184D5E0,我们用计算器算一下(注意是16进制的)
184D5E0+ 478 = 184DA58 —> 正好是血量的动态地址
sub [ebx+00000478] = sub [184DA58] 够清楚了吧,这就是让血量减1的代码(1省略了),其实CE中也有提示 Decrement by 1 。
明白了这行代码的意思,我们回去看看Tutorial的要求:把减1改成加2。
继续操作。选择反汇编程序,如下步骤
点击工具,选择自动汇编
第一步:选择CT表框架代码
第二步:选择代码注入
对应的地址不要搞错了,是"Tutorial-i386.exe"+2585D,这里不需要动,保持默认就可以
然后按确定,会自动生成汇编代码,这些代码是什么意思,我们不用管,找到关键的一行:sub dword ptr [ebx+00000478],01
将原来的sub dword ptr [ebx+00000478],01,改成 add dword ptr [ebx+00000478],02,每次递增2
然后在地址栏就可以看到这个脚本了,点击前面的 单选框 执行,然后点击Tutorial中的打我,这关就可以过了。
第九关:查找共享代码
本关我们将学习共享代码,在C语言中角色属性都是以结构体的方式进行存储的,而结构体所存储的信息都是连续性的,这一关我们将会解释如何处理游戏中的共用代码,这种代码是通用在除了自己以外的其他同类型对像上的
常常你在修改游戏的时候, 你找到了一个单位的健康值 或是你自己角色的生命值, 你会发现一种情况: 如果你把生命值相关代码移除的话,其结果是你的角色无敌, 但你的敌人也无敌了,这就是共享代码搞的鬼。
步骤 9: 注入++: (密码=31337157)
本关模拟一种游戏,其中左边为我方,而右边为敌人,当我们点击重新启动并自动执行的时候我方血量不足会死亡。
你的任务是找到改写健康的代码, 并且修改以至于你可以获得胜利,但"绝不能"使用锁定HP的方法。
提示:在遍历血量的时候应该使用单浮点数进行搜索。
-
四个人物的血量地址搜索并备注
-
你可以分别在每个动态地址上面,右键选择
找出是什么改写了这个地址,会发现这四个地址都指向了同一条汇编代码,这也就说明了其使用了共享代码。 -
反汇编,右键该地址
找出指令所访问的地址,弹出窗口,依次攻击 4 个角色,出现四行地址,全选,右键打开选中地址的分析数据,一直确定得到结构分析窗口 -
可以发现我方和地方有数值区别1或者2
-
计算该处与基址偏移(十六进制!!!)
-
原始orignalcode处
movss [rbx+08],xmm0意思就是,血量处于 rbx+08 的位置,从而确认基址寄存器名称rbx(最前面得到四个一样的代码也可以确认寄存器名称)(movss 是指单浮点数的mov)
7. 自动汇编加入俩脚本后开写
... |
- 你们终于死了呜呜呜呜呜(累瘫




















