Cheat Engine Tutorial 闯关笔记 第八关

时间:2010-11-16 15:10:00     来源:互联网     访问次数:0

      步骤 9:注入++ (PW=31337157)

      这一步基本上和步骤 7(代码注入,手记中的第六关)的做法是相似的,不过会稍稍有点难度。

      本关你必须用一小段代码来修改减少血值的原代码,并且做到,如果当前时间的秒数大于或等于 30 将血值设置为1000,如果当前时间的秒数小于 30 将血值设置为 2000。

      我们可以用 API 调用函数获取当前的时间,并利用 自动汇编 完成这项任务,但这里好象有更简单的做法:C语言脚本注入。

      找到血量的地址,然后打开 CE 脚本引擎 (内存查看器窗口 快捷键:ctrl+alt+a ,或是点击 工具->脚本引擎)。

      然后,和其它的教程不同的是,这在里我会多给你一些提示(假设你从未接触过C语言)。

      ----------------

      #include

      struct tm *timep;

      time_t c;

      c=time(0);

      timep=localtime(&c);

      if (timep->tm_sec>=30)

      *(int *)addresstochange=1000;

      else

      *(int *)addresstochange=2000;

      -------------

      使用血值的地址替换代码中的 addresstochange,另外,不要忘记在地址的前面加上 0x 。比如,地址是 0012345,则输入 0x0012345,选择 "注入" ,"注入到当前进程" ,将代码注入到当前进程,此时,"自动汇编"窗口 弹出,并自动生成调用代码(Call)。

      现在,就象步骤 7 (手记中的第六关)那样,在 "内存查看器"窗口 选择代码地址,在 "自动汇编"窗口 选择 "模板","代码注入",输入刚才获取的调用代码(Call)。 要注意的是,调用代码(Call)将更改 寄存器 EAX 的数据,因此,有必要的话,你应该在压栈之前和出栈之后保存它, 你也可以将原代码移除,它在这里也起不到什么作用了。

      点击 "执行" ,点击 Tutorial.exe 窗口上 "Hit me" 。

      如果没什么问题的话,血值会按照当前的时间变动。

      额外信息:

      正如前面所说,CE 支持标准的汇编语言。所以,你可以在代码中使用函数名称来调用函数。

      你也可以在脚本中引用 DLL 文件,例如:

      injectdll(mydll.dll) // 可以使用你喜欢的语言去写DLL文件

      codecave:

      call functionofmydll

      jmp exit

      这一关,多少得了解一点点的C语言,不过,作者怕我们没有接触过C语言,给了我们一段C语言的代码,在说明的结尾又告诉我们,可以引用我们自己用任何语言写的DLL文件,增加CE脚本的灵活性;虽然有点头蒙,不过完成本关不需要那么麻烦,还是一步一步的来。

      我们先查找 Tutorial.exe 中的数值地址,找到后,"查看写入该地址的代码",点击 Tutorial.exe 中的 "Hit me" ,"显示反汇编",如下图:

      在 "内存查看器"窗口 中打开 "脚本引擎" ,如下图:

      在 "脚本引擎" 窗口 填入说明中的那段代码,并将 addresstochange 替换成我们查找到的数值地址,如下图:

      你可以按上图在原代码中加入 红框标识出的 代码(声名变量并赋值,值为地址,记得地址前要加 0x),也可以直接用地址替换掉 addresstochange ;将写好后的代码注入当前进程,如下图:

      在打开的 "自动汇编"窗口 中 生成了调用代码,如下图:

      在 "内存查看器" 选择查找到的汇编地址,回到 "自动汇编"窗口 选择 "模板" 中的 "代码注入",如下图:

      CE 自动将选择的汇编地址填入(如果不正确,可以手动填写),如下图:

      "确定" ,生成如下图代码:

      我们需要将代码修改一下,将 Call 这一条放置在 newmem 区域,将原代码注销掉,如下图:

      小提示:好多网友在这段代码改写完,出现了结果为 999 或 1999 的这种情况,这可能是我没标注清楚的原因,请大家留意上图中代码 "dec [ebx+00000318]" 前边我添加了 "//" ,这表示将这条代码注释掉了,好多网友出现了这种情况应该都是忘了注释掉它的结果;感谢 78461 网友的提醒!

      原理在第六关已解释过了,在这就不多讲了吧,点击 "执行" ,回到 "内存查看器" 窗口,可以看到,原代码地址处的代码已修改,如下图:

      OK,我们已完成代码段的注入,现在可以点击 "Hit me" 了,说明中给出的C语言代码,是调用了本地的时间,如果秒数大于等于30秒,就将血加到 1000 ,小于30秒,将血加到2000,如果一切没问题的话,next 按钮激活。我给出两张不同时间的对比图:

      点击 next 按钮,通关画面,可惜不是动画的……

      至此,教学八关就完成了,但这仅仅是个基础,有空我们再研究如何实战,以及如何制作游戏的修改器~


频道推荐

游戏资源

海王2游戏素材演示
海王2游戏素材演示
牛魔王游戏素材演示
牛魔王游戏素材演示

视频教程

Cheat Engine 初级应用(以Cheat Engine自带教程Tutorial为例)02020103-04
Cheat Engine 初级应用(以Cheat Engine自带教程Tutorial为例)02020103-04
Cheat Engine 初级应用(以Cheat Engine自带教程Tutorial为例)02020103-03
Cheat Engine 初级应用(以Cheat Engine自带教程Tutorial为例)02020103
Cheat Engine 初级应用(以Cheat Engine自带教程Tutorial为例)02020103-02
Cheat Engine 初级应用(以Cheat Engine自带教程Tutorial为例)02020103-02