CheatEngine

这题我最后一关没有做出来,所以直接引用pcat的(侵删)



1、准备CheatEngine5.6.1版本(其他版本也可以),为了方便,我就在xp里运行。

分别打开CheatEngine和题目的Virtual_Game.exe


选择进程,选择“Virtual_Game.exe”,点击“打开”


在Virtual_Game界面(以下简称VG)点击“下一步”,就可以看到第一个挑战。

-----pcat:02-----
2、精确值扫描


首先得说明的是CheatEngine是一款内存修改编辑工具,这里健康值100也是驻留在内存里,而点击“打我”就可以随机减少该值,只要“精确扫描”初始值,再扫描下变化值,一般就可以找到其内存地址,就可以把这个值锁定,修改为1000达到下一关条件
先输入100,精确扫描,4字节(一般int型就选这个),点击“首次扫描”

左边出来一大堆地址(其值都为100),这时候点击VG的“打我”,留意CE左边变化的值,如果哪个值变化为VG上新的健康值,那么我们找的很大可能是它了。


如果不敢保证就重新输入VG上的新值(例如99,这个值不是固定的,要看你自己VG上显示的值),再点击“再次扫描”(千万别点击“新的扫描”),左边一般就只会出现一个地址(如果出现不止一个,就再重复“打我”这个操作,看看哪个地址的值变了)


对着左边栏的地址双击就会出现下面的编辑栏里,在“值”那区域双击就可以更改值为1000,这时候点击VG上的“下一步”就到了下一关。


-----pcat:03-----
3、未知的初值


底部蓝色的进度条是跟一个未知的数值相关,每点击“打我”这个数值就会随机减少,要求我们修改这个数值为5000就过关。
先点击“新的扫描”,扫描类型选择“未知的初始值”,照样4个字节,再点击“首次扫描”,会found很多结果,但不会列举出来。


这时候点击VG的“打我”,再在CE里选择“减少的数值”,再点击“再次扫描”,左边栏会列举一些,再重复“打我”→“减少的数值”这个步骤,直到左边栏剩下一个地址或者有一个地址的值在0到500之间,就确定是它了。
双击它,进入下面编辑栏,编辑值为5000,然后VG上就可以按下一关。


-----pcat:04-----
4、浮点数


其实跟第一关没多大区别,只是第一关精确定位是选择“4字节”,这关可以分别选择“浮点数”以及“双精度浮点数”。在“开火”那里可以通过“减少的数值”来找到。(条条大路通罗马)


修改2个值为5000即可过。


-----pcat:05-----
5、代码查找


按第一关的步骤,“新的扫描”,初值100,精确扫描,4字节,“首次扫描”
然后VG上“改变数值”,CE上修改为新值,“再次扫描”,基本上就会定位到地址,双击进入下面编辑,右键“找出是什么改写了这个地址(T) /查找写入该地址的代码(T) /Find out what writes to this address” 

弹出框“将使用CE调试器调试当前进程,继续?”,点击“是”

出现一个白框,


再在VG上点击“改变数值”,这个窗口就多了一个汇编语句,选中它,点击“替换”

把这句汇编语句修改为nop(汇编的空语句),点“确定”,再点“停止”,点“关闭”,再点“改变数值”,就通过了。


这时候新手们心里可能会有大大的问号:到底我们在其中做了什么?
本关的关键汇编代码如下:(其中[P]为我们所找到的地址)
mov eax,[P]
mov [ebp-08],eax
mov eax,[ebp-04]
mov [P],eax
mov eax,[P]
cmp [ebp-08],eax
- - -
mov A,B 就是把B的值赋值给A,
cmp A,B 就是比较A、B的值
整理下逻辑就是,把[P]赋值给eax,再把eax赋值给[ebp-08](这时候3个值是相同的)
然后这时候又把[ebp-04]赋值给eax,再把eax赋值给[P],随后又把[P]赋值给eax,
最后比较[ebp-08]与eax的值,如果相等就过关,然而[ebp-04]这个值是随机的,所以逻辑上很难相等,就只能去修改汇编代码了。
最简单的写法就是把mov [P],eax替换为nop,那么[P],eax,[ebp-08]的值都会相等。
(如果有兴趣的话,可以尝试修改别的汇编语句)

ps.有同学可能想到勾选“锁定”键来防止[P]被修改,但锁定数值的原理是1ms定时器不断修改值,而点击改变数值”这个操作很快,毫秒内就会修改[P]的值并做了以上操作,故很难实现。

-----pcat:06-----
6、指针


先按照之前的步骤找到一个地址,在编辑栏里右键“找出是什么改写了这个地址(T)”,出来白框后,点击VG上“改变数值”,白框里就会有一条汇编语句,选中它,点击“详细信息”,红色的为刚才那句汇编语句mov [ecx+eax*4],edx 另外eax为00000030,这里要求+eax*4,也就是c0的偏移量

在“复制内存”那里右键出现“复制简易猜测到剪贴板”,点击下,得到值00186EA0(如果你得到的值不同也不要紧,步骤对即可)。然后“确定”,“停止”,“关闭”

“新的扫描”,勾选“Hex”,对着输入框右键粘贴刚才复制的值00186EA0,“首次扫描”,得到一个地址

点击“手动添加地址”,弹出窗口后勾选“指针”,AddressOfPointer填写刚才得到的那个地址,Offset偏移值填写刚才算出的c0,然后确定

锁定指针的值,并修改值为5000,然后点击VG的“改变指针”,等待3秒即可过关。



-----pcat:07-----
7、代码注入


先按照之前的步骤找到一个地址,在编辑栏里右键“找出是什么改写了这个地址(T)”,出来白框后,点击VG上“打我”,白框里就会有一条汇编语句,选中它,点击“显示反汇编程序”,
出来“内存浏览器”,满屏的汇编语句,点击菜单栏的“工具”→“自动汇编”

“模板”→“代码注入”

打算在哪条地址上跳转?默认都会填写好,如果没有的话,就填写那第一行的地址


把dec [00d40d48](具体数值看你自己里面的)改为add [00d40d28],2 (dec是自减,add是添加,这样修改的话就会达到点击一次“打我”就会得到2格血的效果,当然可以有其他的写法达到同样的效果)
点击“执行”,再点“是”,“确定”,关闭除了CE、VG以外的子窗口,再点击VG上的“打我”,就过关了。


-----pcat:08-----
8、多级指针


这个是最难的,在本关中,你将看到4级指针,它由第一个指针指向第二个指针,再由第二个指针指向第三个指针,由第三个指针指向第四个指针,最终指向血值的真正地址。
【先来个简单的过法】
先按照之前的步骤找到一个地址,右键“扫描当前指针地址”,出来2个窗口,按默认填写的就可以,然后“正在扫描的线程”可以填写大一点,我就填写了个3,然后按下“确定”

“为存储的结果指定名称”,随便填写个名字,如111,保存。

之后就会进行“指针扫描”,等待一段时间(如果扫描的时间太少了,待会可能会搜不到)再按“停止”,出来“警告”,点“确定”即可


然后出来一大堆扫描结果,记得左上角得是“4字节”,再点击VG的“改变指针”,然后3秒后VG上的数值会变,记下它,例如变成715,
点击指针扫描器→“重新扫描内存-移除没有指向正确地址的指针(Z)”,出来窗口后,选择“数值查找”,输入刚才记下的715,点击“确定”,会再弹出保存窗口,随便存储名字,例如222

这时候满足条件的扫描数就很少了,如果你的pointercount为0的话,估计就是前面搜索的时间太少了(重来这关吧),然后选择第一条(其他有些也可以),双击它,就显示在CE的编辑栏里了


锁定它,修改为5000,再去VG里点击“改变指针”,等待3秒就过关。


【复杂的过法,手动查找各级指针】
( # ▽ # ),我就不截图,全靠描述。
1)先按照之前的步骤找到一个地址(记录下,1F5288),在编辑栏里右键“找出是什么改写了这个地址(T)”,出来白框后,点击VG上“打我”,白框里就会有一条汇编语句,选中它,点击“详细信息”,看到mov [ecx+eax*4],edx
这里一个诀窍是[]里第一个是基址,在窗口里看ECX的值(而不要去关注复制内存那里显示的可能的值,都说了是可能的),以我找到的为例,ECX=1F5128,然后跟上一个地址的差值160就是待会要用到的偏移量(嗯,偏移量这么去算就可以)
2)“新的扫描”,勾上Hex,输入1F5128,“首次搜索”,得到地址1886A0,点击“手动添加地址”,勾选“指针”,输入1886A0,偏移160,确定,在编辑栏出来,然后右键“找出是什么访问了这个地址(S) /查找访问该地址的代码(S) /Find out what accesses this address”,点击“找出是什么访问了这个指针”,出来白框后,点击VG上“打我”,白框里就会有一条汇编语句,选中它,点击“详细信息”,看到mov eax,[ecx+eax*4](后面指针都会出现这个的),记住我刚才所说的,记录下ECX的值即可,我记下了是1881C8,相对刚才的1886A0,偏移量就是4D8
3)再去“新的扫描”,输入1881C8,得到地址1C7F40,点击“手动添加地址”,勾选“指针”,输入1886A0,偏移4D8,再点击“添加指针”,偏移量为上次的160,然后确定,再重复去找哪个访问了这个地址,还是会看到mov eax,[ecx+eax*4],不管,继续ECX的值1C7EDC,相对上一个地址1C7F40偏移量就是64
4)继续新的扫描1C7EDC,得到地址211E80,手动添加地址211E80,偏移64,添加指针偏移4D8,再添加指针偏移160,确定,再对其找哪个访问了,记录ECX的值211E3C,相对211E80偏移了44
5)新扫描211E3C,得到地址D40D2C,再手动添加地址D40D2C,偏移44,添加指针偏移64,再添加指针偏移4D8,再添加指针偏移160,确定,再找哪个访问了,结果出来两条一样的,都是push [00d40d2c] 这就是最后一次了,这个地址跟我们上面D40D2C一致,所以偏移量为0
6)新扫描D40D2C,左边栏会出现一些绿色的地址(绿色就是胜利的标志了),我们这里就取第一个吧,40F129,手动添加地址40F129,偏移0,添加指针偏移44,再添加指针偏移64,再添加指针偏移4D8,再添加指针偏移160,确定后出现在编辑栏,对其锁定,修改值为5000,然后在VG里点击“改变指针”,3秒后就过关。


-----pcat:09-----
9、注入++

这个本意就是注入c语言脚本去让健康值与时间挂钩。

先按照之前的步骤找到一个地址,在编辑栏里右键“找出是什么改写了这个地址(T)”,出来白框后,点击VG上“打我”,白框里就会有一条汇编语句,选中它,点击“显示反汇编程序”

点击内存浏览器“工具”→“脚本引擎”,弹出一个窗口,把VG界面上c语言代码复制到里面,在timep赋值前加上int addresstochange=你最初找到的地址




再点击菜单栏的“注入”→“注入当前的进程”,出来“自动汇编”的窗口,点击“模板”→“代码注入”,按我下面的图那样去修改代码(把下面的call剪切到上面,并把dec语句注释掉),然后点击“执行”,再点击“确定”,“确定”



再点击“打我”,就过关,注意flag在弹框内容里,别看漏了。
Cheat Engine V5.6.1 Cheat Engine是一款内存修改编辑工具,它允许你修改你的游戏,所以你将总是赢。它包括16进制编辑,反汇编程序,内存查找工具。与同类修改工具相比,它具有强大的反汇编功能,且自身附带了外挂制作工具,可以用它直接生成外挂。 Fixes: Fixed bug where ce would crash(close) on XP systems on certain type of games when opening a process Fixed the error at "Same as first scan" when using the float type Pointer rescan for value now accepts more than 8 characters Fixed pointerscan for value not supporting more than 1 thread Fixed showing the fpu in the kernelmode debugger Fixed Decreased/Increased by % Dissect Data now detects non-exact floating point values again Disabled executing the aobscan when assigning a script to the table Some disassembler fixes Again some more DPI fixes The byte-editor in the hexeditor window is now properly aligned at the proper height The XMM registers are now shown for kernelmode debugging as well Implemented the stop button for kernelmode "Find what addresses this code accesses" Fixed error message when pressing enter and no address is selected in the addresslist Fixed samememory regions so the last byte is now included as well Fixed the simple-copy/paste option in settings (it now has effect) Fixed bug where pressing alt made a lot of controls invisible in vista and later Fixed the pointerscan bug that caused out of memory problems for the scan (Was already secretly fixed and released for 5.6 one week after the official release, but still mentioning it) Changes: Rightclicking on registers(multiple locations) saves them to the clipboard The values of dissect data can now be saved to disk Auto Assembler script entries have a small <script> text you can click for easier script editing The commonmodulelist.txt has been updated with some extra dll's that have nothing to do with the game (thanks to psych) AutoAssembler: You can't move the cursor beyond the end of a line anymore Pointerscan: Pointerscanner now tells you that pressing stop is a stupid thing to do Pointerscan: doubleclicking an pointer with invalid base now adds it anyhow. (In case the base becomes valid again later) Several extra window positions are now saved when the option to save the position is enabled (included pointerscan and autoassembler) CE now notifies you if it thinks there's not enough dispace left Default pointer option is now set back to insert instead of append Added a "Same as first scan" hotkey option When opening a new process and chosing to disable everything now also disables entries in advanced options
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值