目录
CE简介
Cheat Engine ,简称CE,是一款开源的游戏调试和修改工具,也是逆向工程师常用的几大神器之一,还是游戏汉化、破解以及外挂编写中常用的工具,其功能包括:内存扫描、十六进制编辑器、调试工具、脚本语言支持,也可以进行反汇编调试、断点跟踪、代码注入等诸多高级功能。
CE系统自带教程
进入教程会有两个入口,分别是CE中帮助菜单栏中打开和从文件夹中进入,我们选中Tutorial-x86_64.exe双击打开教程。
再找到Cheat Engine.exe双击打开。
在CE的左上角添加进程,选择刚刚打开的系统自带教程Tutorial-x86_64.exe,点击打开。
第1关:精确值扫描
关卡要求:找到健康值并把它改为1000。
思路:通过点击“打我”来改变健康值,然后可以扫描该值,可以通过直接精确扫描健康值的数值,也可以扫描减少的值,变化的值等,关键是看数值如何变。
步骤:首先,根据精确数值健康值为100进行首次扫描
点击“打我”,再根据健康值进行再次扫描;
重复以上步骤,不断点“打我”,更改健康值扫描,直到扫描到为止。
然后,双击该地址将其添加到下面的地址栏中,双击该数值,将其改为1000
第2关:未知的初始值
关卡要求:本关只知道健康的状态,不知道具体的健康值,每次点击“打我”后便会减少一些健康值,每次减少的健康值会显示在进度条的上方,将健康值改为5000即可通关。
思路:没有精确的数值,但有一个代表健康值的血量条,我们可以先扫描未知的初始值,然后点击“打我”更改健康值后,去搜索减少的数值,或者变动的数值,直至搜索到健康值为止。
步骤:首先,先点击新的扫描,选未知的初始值进行首次扫描
点击“打我”后,搜“减少的数值”(也可搜变动的数值,或搜数值减少了多少)扫描
重复以上步骤,直至找到健康值,并改写为5000
第3关:浮点数
要求:浮点数是带有小数点的数值。如本关中的健康和弹药,两者都以浮点方法储存数据,不同的是,健康值为单精度浮点数,而弹药值为双精度浮点数。点击"打我"将减少一些健康值,而点击"开火"则消耗掉 0.5 的弹药。把这两项都修改到 5000 或者更多才能过关。
思路:与前两关一样,通过去改变两者的值,然后不断扫描,最终找到目标内存并且改写,不同的是本关的值为浮点数,在扫描时候需要将数值类型改为浮点数。
步骤:首先,搜索单浮点数
再搜索双浮点数
第4关:代码查找
要求:游戏重新开始时,数据会存储在与上次不同的地方, 甚至游戏的过程中数据的存储位置也会变动。将该地址锁定即可过关。
思路:本关的健康值的存储地址会变动,先找到该地址,接着查找是什么改写了该地址,并且对健康值做一次改变,找到改变找到该地址的汇编代码,并将其替换成“nop”,将其锁定即可过关。
步骤:首先,先找到健康值的内存地址
右键该地址,点击“找出是什么改写了这个地址”,打开后再点击“修改数值”
再选中地址,点击替换,替换了nop
确定后,再点击详细信息查看
更改代码后,点击停止,关闭,进入下一个。
第5关:指针
要求:在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不但能改变数值而且还会改变数值在内存中存储的位置。改变那条指针地址的数值为 5000 并锁定它,然后点击 Tutorial.exe 窗口上的"改变指针"按钮,如果一切正确,"下一步"按钮将变为可点击状态。
思路:首先找到数值的地址,然后再查找是什么改写了这个地址。再次改变数值,CE 便可以列出找到的汇编代码。 双击一行汇编代码(或选择它并点击"详细信息")并打开"详细信息"窗口以显示详细的信息,用来告诉你当这个指令运行时发生了什么事情。接着找到偏移量,手动添加地址,设置偏移量,找到基址。
步骤:首先,先找到数值的地址
查找是什么改写了这个地址,并改变数值
找到指针数值并查找,绿色的地址即为基址
添加指针,绿色的地址是基址,黑色的地址是动态地址
锁定该值,点击改变指针即可过关
第6关:代码注入
要求:在这一步教程中,你将有一个健康值和一个每按一次将减少 1 点健康值的按钮,你的任务是利用"代码注入",使每按一次按钮增加2点的健康值。
思路:代码注入是将一小段你写出的代码注入到目标进程中并执行它的技巧。查找这个地址,然后看看是什么在改写它("找出是什么改写了这个地址")。当你看到那条减少数值的汇编代码后,选择"显示反汇编程序",然后打开"自动汇编窗口",选择"模板"中的"代码注入"。CE 将自动生成一部分汇编代码并为你输入指令做好准备。接着,更改汇编指令。
步骤:首先,找到该健康值的地址
再查看是什么改写了该值,然后改变健康值。
查看该汇编指令
代码注入,点击显示反汇编程序
点击模板,代码注入
因为要改为每次点击增加两点健康值,将代码中的sub改为add 后面01改为02即可实现。
98点击“打我”之后变为100,成功
第7关:多级指针
要求:在本关中,你将看到 4 级指针,它由第一个指针指向第二个指针,再由第二个指针指向第三个指针,由第三个指针指向第四个指针,最终指向健康值的真正地址。如果你发现列表中那些指针地址所指向的值发生同样的变化时,那表示你可以试着将基址中的值更改为 5000,并锁定它,以便完成本关的任务了。
思路:与第六关中的指针类似,不过本关是四级指针,需要我们去把每一级的偏移量给记住,重点是通过本关,能更好的去理解指针在存储中的一个作用。
步骤:首先,找到该数值的地址
查找是什么改写了该值
此时偏移量为18,查找0601D590
偏移量为0,所以直接查找该地址015FC020,继续按上述步骤执行
此时偏移量为18 查找015FBFA0,继续按上述步骤执行
偏移量为10,继续查找图中的015FBF20,成功找到基址
添加指针后,锁定该值,修改为5000即可过关
第8关:注入++
要求:本关共有四个玩家 1,2为友军 3,4为敌军 敌军血量高于友军,因此自动执行后友军会死亡而敌军获胜,本关需要去修改代码,(如一击必杀,修改攻击力等)最后达成友军胜利。
思路:首先,去找到四个玩家血量的内存地址,然后通过攻击去修改血量,看看是什么改写了该地址,找到与血量相关的代码,然后去分析修改。
步骤:首先,找到四个玩家的血量
查看是什么改写了该值,然后进行攻击(以KITT示范),找到该指令
显示反汇编,然后右击找出指令访问的地址
然后按着攻击四个玩家一遍,可以看到都使用了该扣血的代码
全选之后右键,点击 ‘ 打开选中地址的分析数据 ’, 可以看到四个玩家的血量,ID,标识符,其中最重要的一点是,我们发现友军的标识为1,敌军的是2,由这点我们可以进行反汇编。
代码注入,进行代码注入,工具 — 自动汇编,模板 — 代码注入,代码根据自己的寄存器名称修改。
注入后重新执行即可。