Cheat-Engine

Cheat Engine

Cheat Engine能获取当前进程内存中的数据信息,并且定位其位置,在数据查找以及修改方面有很大的作用,可以在某些情况下辅助分析二进制程序,定位关键位置。从其配套的9个教程中来学习CE的简单应用吧。

step 1

直接修改内存地址处的值,将其修改为1000。第一次搜索Health=100,Hit me以后再次搜索,程序会反复从前一次搜索的地址中进行再次搜索,直至过滤出Health的地址(其实只要我们能确定其地址就好)

step1

step 2

由于生命值是以血条的方式存在,所以扫描时的Scan Type选择Unknown initial value,在扫描过程中的Scan Type选择Decrease value,多次查找,确定位置,然后修改为5000。

step2

step 3

Float和double类型的值修改,方法同step 1只是,value Type修改为Float类型以及double类型,最后均修改为5000,过关。

step3

step 4

题目目的是要我们找到造成damage的代码,然后nop掉。第一步同step1,找到数据地址,然后下硬件断点,确定其位置以后,nop掉原代码即可过关。

step4

再次Change value

step5

step 5

这一关就是让我们认识一个一级指针。

step6

New Scan,搜索十六进制017D37D0,手动添加一个指针,Add Address Manually,将601630位置处的指针冻结,勾选方框,然后Change Pointer过关。

step7

step 6

代码注入,将Health减1改为加2。同样的方法找到位置,Show disassembler以后,选择Tools->auto assemble->Template->Code Injection,修改代码即可:

step8

修改以后,从汇编我们可以看到,程序是新申请了一块内存,然后将原代码位置处修改为了jmp到新内存,新的指令都在新内存上执行,执行完毕又回到原来的位置。

step9

step 7

寻找多级指针,找到数据位置,然后不断向前回溯查找,手动添加指针,冻结,修改值至5000,通关。

step10

step 8

该关有两个队伍,需要我们点击Restart game and autoplay以后自动消灭Player3和Player4,查看对这四个玩家造成伤害的代码是一样的,那么我们怎么修改呢?不同玩家自身结构体的属性是不一样的,通过Health(Float),可以找到玩家的对象,比较4个对象间的不同,通过不同进行code Injection,达到自身无敌。[ebx+4]的位置是血量。通过compare structure,我们可以看到四个结构体的名字是不同的,id也是不同的,选择id进行code injection,id位于[ebx+10]

step11

点击Restart game and autoplay过关。