Cheat Engine Tutorial 闯关手记 第七关

本文介绍如何通过多级指针定位内存中的真实地址,包括如何查找指针、累加偏移量以及锁定基址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自 76512
 
我们直接翻译说明吧,经过前面几个步骤的学习,基本上用不着再铺垫什么了。

       步骤 8:多级指针 (PW=525927)

       本关,将解释如何使用多级指针。

       在第 6 步(手记中的第五关),你已经清楚1级指针的概念和用途, 并可以利用数值的首个地址找到存放数据真正的基址。

       在本关中,你将看到4级指针,它由第一个指针指向第二个指针,再由第二个指针指向第三个指针,由第三个指针指向第四个指针,最终指向血值的真正地址。

       开始的几步与在第 6 步(手记中的第五关)中的操作基本相同。找出是什么在访问这个数值,然后分析汇编指令,查找指针地址中的数值,以及它的偏移量,将它们记下来。但这次你按的数值找出的仍然是一个指针,你得依据这些数值,使用同样的操作方法找出指向这个指针的指针。

       看看是什么访问了你发现的那个指针地址,分析汇编指令, 留意可能的代码和偏移量,并加以利用。

       持续这种过程,直到不能更进一步查找为止(通常当基址是静态的地址时,这个地址将以绿色标识)。

       点击 "Change value" 改变血值,如果你发现列表中那些指针地址所指向的值发生同样的变化时,那表示你可以试着将基址中的值更改为 5000,并锁定它,以便完成本关的任务了。

       备注1:这个问题也可以使用自动汇编程序脚本或者使用指针扫描器加以解决。

       备注2:在某些情况下,可以改变CE软件 "代码查找器" 的相关设置,当你遇到像 mov eax,[eax] 的指令时,调试程序将显示改变之后的寄存器中的值,也许利用它更容易找出指针的位置。

       备注3:你还在读?!当你查看汇编指令时你可能已经注意到,这些指针是在相同的代码块(相同的程序,如果你懂汇编,可以查看程序的起始代码)位置被读写。这种情况并不总会发生,但是当你在查找某个指针遇到问题的时候,没准能起到很大的用处。

       这一关很让人迷惑,关键点在于如何累加指针地址与偏移量,我们一步一步的来,先按照第五关所说的,查找到数值的第一个地址,将其加入CE的下方列表中,鼠标右键 选择 "查找写入该地址的代码" ,并查看该汇编指令的详细信息,如下图:

       记下详细信息中需要查找的数值,记下方括号中的偏移量:18,关闭除CE主窗口外的其他CE窗口,点击 "新的扫描" ,勾选数值框前的Hex选项,并在数值框中填入需要查找的数值,点击 "首次扫描" ,CE主窗口的左侧列表中会列出扫描到的地址,点击 "手动添加地址" 按钮,在弹出的 "添加地址" 窗口中勾选 "指针",分别将查出的指针地址及偏移量填入对应的文本框中,如下图:


       "确定" ,CE 将所地址添加在 主窗口下方的地址列表中,至此,我们已用完在第五关中所学到的知识,可以看到,本次扫描后,左侧所列地址的颜色仍然是黑色标识的,这说明虽然我们找到了地址,但它仍然不是静态的(不是真正的基址),需要继续深入下去。

       在加入的地址上点右健,选择 "查找访问该地址的代码" ,如下图:


       这和第一次查寻指针时选择的不一样了,要注意一下,弹出下图所示的窗口:


       强烈抗议,汉化不全面……,选择第一项 "找出是什么访问了该指针"。

       在 Tutorial.exe 窗口上 "Change value" 后,双击 CE 中那条汇编代码,查看详细信息,如下图:


       记下需要查找的数值,还有偏移量(这次方括号中不存在偏移,那么偏移量为 0),关闭CE主窗口外所有CE窗口,按上面所说的查找新的数值,然后手动添加地址,如下图:

       下面是重点哦,此时不能点击 "确定",我们还要完成一项任务!要知道,我们得出的这个地址是指针,这个指针指向的是上次我们找到的指针地址,而上次找到的指针地址才是指向我们在 Tutorial.exe 窗口上看到的那个数值地址,所以我们得将这样的关系标注出来~在添加地址窗口上,点击 "添加指针" 按钮,如下图:


       我们只需要将上次的偏移量填在相应的位置上就可以了,现在可以点击 "确定" 了;CE又将新的地址在下方的列表中列出;这次扫描的地址仍然不是以绿色标识的,看来我们还没有找到真正的地址哦,继续吧,重复上述的步骤,"查找访问该地址的代码" ,"Change value" ,查看汇编代码详细信息,如下图:

       查找数值,添加地址,添加指针,累计偏移量,如下图:


       还不是真正的地址,继续!重复上述步骤,查看详细信息,如下图:

       查找数值,你会发现,找到的地址是绿色标识的哦,如下图:

       这说明我们终于来到了源头~添加地址,添加指针,累计偏移量,如下图:


       "确定",地址出现在CE的下方列表中,如下图:


       还有什么疑问?赶快修改数值,并锁定,在 Tutorial.exe 上点击 "Change pointer" ,next 按钮变为可点击,同时我们还能发现,除了我们找到的真正的地址数值保持不变,其他的指针地址都不再起作用了,如下图:


       本关结束,记下第八关密码(PW=31337157),老汉看会电影休息一下,哈~

<think>嗯,用户现在在询问Cheat Engine 7.4第四的教程或解决方案。首先,我需要回忆一下Cheat Engine这个软件的使用方法,特别是第七的结构。不过用户提到的是第四,可能是指教程中的第四步?因为通常Cheat Engine的教程卡是按步骤编号的,比如第一步到第七步,每步可能有不同的挑战。需要确认用户是否指的是教程的第四步,而不是某个版本中的第四。比如,Cheat Engine自带的教程有多个步骤,第四步可能涉及指针扫描或者更复杂的内存查找。 根据用户之前提供的引用内容,他们在之前的问题中提到了健康值的搜索方法,即通过首次扫描未知数值,然后射击靶子,搜索减少的数值,重复操作直到找到正确的地址。这可能是在教程的某一中,用户需要找到并修改目标的生命值或健康值。而第四可能涉及更复杂的机制,比如动态地址或者指针寻址,因为前面的步骤可能已经覆盖了基础扫描和变化值查找。 用户提供的引用[1]中提到了使用CE进行数值扫描的方法,包括首次扫描未知数值,射击后搜索减少的数值,并可能穿插不射中的操作来排除干扰。这可能与第四的挑战相,比如需要处理地址变化或者多层指针的问题。此外,引用[2]中提到的Secret对象的数据处理方式可能与当前问题无,但用户可能之前在讨论其他问题时提到了Kubernetes,但当前焦点是CE。 接下来,我需要确定第四的具体挑战是什么。通常,Cheat Engine教程的第四步会引入指针的概念,要求用户通过指针扫描来找到基址和偏移量,从而定位动态变化的内存地址。例如,当直接搜索健康值的地址后,发现每次重新开始游戏时地址会变化,这时候就需要通过指针来找到静态的基址,加上偏移量来定位实际存储数值的地址。 因此,解决方案可能包括以下步骤:首先找到健康值的当前地址,然后使用指针扫描工具来查找指向该地址的指针链,分析找到的指针结构,确定基址和偏移量,最后将地址添加到地址列表并进行锁定或修改。同时,用户可能需要处理多层指针或者多个偏移量,这时候需要耐心测试不同的组合。 另外,用户可能需要处理的是,当直接修改健康值后,游戏可能会检测到数值异常,导致需要绕过反作弊机制。但根据教程的设计,第四步更可能侧重于指针扫描而不是反作弊,所以重点应放在指针扫描步骤上。 总结下来,回答需要分步骤说明如何找到动态地址,如何使用指针扫描,如何确定正确的基址和偏移,以及如何验证和应用这些信息。同时,根据用户之前的引用,可能需要结合减少值扫描和排除干扰的方法,确保找到正确的指针链。 此外,用户可能需要相的扩展问题,比如如何处理多级指针、如何验证指针的正确性,或者在其他游戏中应用类似的方法。因此,生成的问题可以围绕指针扫描的优化、处理动态地址的其他方法,以及不同游戏中的应用场景展开。</think>根据Cheat Engine教程第四的常见设计特点(涉及动态地址与指针寻址),以下是分步解决方案: ### 核心步骤 1. **定位健康值动态地址** - 使用基础扫描:选择`未知初始值`→射击靶子→搜索`减少的数值`→重复直到找到当前地址[^1] - 确认地址有效性:修改数值观察靶子血条是否变化 2. **启动指针扫描** - 右键选中找到的地址→`找出是什么改写了这个地址` - 点击`Pointer scan`按钮→设置扫描范围(默认即可)→生成指针扫描结果 3. **分析指针链** - 筛选出绿色条目(静态基址) - 检查偏移量模式(如`base+10→+C→+4`) - 记录稳定的基址与偏移组合 4. **添加指针表达式** - 手动添加地址→勾选`Pointer`→输入`基址 + 偏移量链` - 示例表达式:`"game.exe"+3A45B0 + 10 + C` 5. **锁定数值** - 启用冻结功能→设置目标数值(如5000) - 验证:多次重置卡后血条仍保持锁定状态 ```python # 伪代码示例:指针解析过程 base_address = get_module_base("game.exe") offset_chain = [0x3A45B0, 0x10, 0xC] current_address = base_address for offset in offset_chain: current_address = read_memory(current_address + offset) health_value = read_memory(current_address) ``` ### 键验证点 - 重启游戏/卡后,指针表达式仍有效 - 修改数值后游戏无异常崩溃 - 冻结功能可抵抗血条自然衰减
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值