首页
社区
课程
招聘
[原创]Cheat Engine gtutorial-i386闯关记 第一关
发表于: 2019-2-16 13:29 4910

[原创]Cheat Engine gtutorial-i386闯关记 第一关

2019-2-16 13:29
4910
    网上清一色介绍Cheat Engine目录下Tutorial-i386.exe的闯关教程,几乎没人关注过gtutorial-i386.exe的闯关步骤。那就容我抛砖引玉,能过几关就写几篇教程。
    运行gtutorial-i386.exe,第一关作者意图为:玩家操作小飞行器射击目标,每次按空格射击目标后,目标会掉一定的血量,五次射击后目标血槽会加满,当然飞行器的子弹也会加满,如下图:
    由于我们并不知道目标初始时的HP值是多少以及每次受到攻击后掉多少HP,所以只能选用模糊扫描:"Scan Type"选"Unknown initial value","Value Type"选"4 Bytes",然后点击"First Scan"。每次目标受到攻击后,"Scan Type"选"Decreased value"然后点击"Next Scan"。当目标回满血时,"Scan Type"选"Increased value",再次点击"Next Scan"。反复几次这个过程,可以定位到修改目标HP值的变量。
定位到该变量后可以在CE中将变量Freeze(冻结),然后多次攻击目标,查看目标的血槽是不是没有变化,以此验证找到的变量是不是正确。比如,我把HP锁定为满血100,每次攻击目标后看血槽状态:
可以看到,冻结HP后经过几轮攻击,血槽固定在某个位置,看来找的变量没有错。另外,经过反复扫描,可以猜测作者在第一关中使用全局变量来修改目标血量。而全局变量在[4,28,52,76,100]这个集合中取值。
    接下去,查看修改该变量的相关代码。右键CT表项中的地址,选择"Find out what writes to this address",然后再次攻击目标,CE会记录并显示修改血槽值的代码:
修改代码前先确认一下运行到这条指令时,edx的取值范围是不是在[4,28,52,76,100]中。在"The following opcodes write to xxxx"窗口中,点击"Show disassembler"按钮,进入"Memory Viewer"窗口,在下列指令出下断点,然后回到游戏gtutorial-i386中继续攻击目标。目标掉血时会触发断点,此时查看edx的值:
gtutorial-i386.exe+314F0 - 89 50 58              - mov [eax+58],edx
确认无误后,对这条指令进行注入,注入方式有很多可以是"Full Injection"也可以使"AOB Injection"。我选择的"AOB Injection",因为在多次试验中,我发现使用"Full Injection"方式,有时候目标受到攻击后血槽会超出整个血条,我估计可能跟程序地址随机加载有关,不适合用硬编码的方式注入;而AOB方式在注入前会验证代码,如果注入点验证不通过,则CE不会往下执行。虽然这种方式显得外挂没有起效,但总比使用外挂后,反补对方好吧~
    进入"Memory Viewer"窗口工具栏Tools--"Auto Assemble",将出现"Auto assemble"窗口。选择工具栏中Template--"AOB Injection",在生成的AOB脚本模板上修改注入代码,如下面的代码片:

define(symbol,89 50 58 83 78 54 00)
[ENABLE]
aobscanmodule(INJECT,gtutorial-i386.exe,89 50 58 83 78 54 00) // should be unique
assert(INJECT,symbol)
alloc(newmem,$1000)
label(code)
label(return)

newmem:
  push edx
  xor edx,edx
code:
  mov [eax+58],edx
  cmp dword ptr [eax+54],00
  pop edx
  jmp return
[注:修改AOB模板后,千万不要点"Auto Assemble"窗口底部的"Execute"按钮,这个按钮会导致CE用脚本中的指令替换gtutorial-i386.exe+314F0处的指令(CE官网上称这是生成汇编)。如果脚本中的代码并不能如期的运行,不便于再修改,所以不是很推荐这种做法。]
 修改完成后,点击"Auto assemble"工具栏--File--"Assign to current cheat table",将AOB脚本添加到cheat table中:
脚本添加到cheat table后可以通过点击表项前的[]来启用/禁用脚本(和Freeze变量的做法一样),启用后,一击击碎目标,然后进入第二关:
最后,记得保存注入脚本,下次可以直接从"Auto Assemble"窗口File--Open加载保存的.CEA文件,并将AA脚本添加到Cheat table中,就不用重头再来一遍了(gtutorial-i386不像CE自带的教程,能跳过任一关卡,必须累死累活的一关一关的硬闯,搞的跟青铜圣斗士闯黄金12宫似得!)~

gtutorial-i386.exe+314F0 - 89 50 58              - mov [eax+58],edx

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 24477
活跃值: (62774)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享~
2019-2-16 14:44
0
雪    币: 48
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢楼主!我找到了靶子血槽的基址,然后都调成负值了还是打不碎靶子。你的帖子给了我新的思路
2019-3-26 20:19
0
游客
登录 | 注册 方可回帖
返回
//