Cheat Engine Tutorial 闯关手记 第八关

 转载自 76512

 

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

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

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

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

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

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

       ----------------
       #include <time.h>

       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 按钮,通关画面,,可惜不是动画的……

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值