天道酬勤 发表于 2025-1-2 09:00:21

CE修改器入门:查找多级指针

本关是第6关的加强版,CE 6.X 教程中的4级指针比5.X的要简单些。多级指针就像玩解谜游戏一样,谜团不只一个,盒子中还有盒子。这里面是4级指针,游戏中也有比如8级指针,12级指针等等,思路都是一样的。

在这一步将解释如何使用多级指针。在第 6 步,你已经清楚 1 级指针的概念和用途,并可以利用数值的首个地址找到存放数据真正的基址。
在本关中,你将看到 4 级指针,它由第一个指针指向第二个指针,再由第二个指针指向第三个指针,由第三个指针指向第四个指针,最终指向健康值的真正基址地址。

> 步骤 8: 多级指针: (密码=525927)
>
> 开始的几步与在第 6 步中的操作基本相同。找出是什么访问了这个地址,然后记录下动态地址
> 接着我们逐级向下查找,在查找的过程中,分别记录下动态地址,以及所对应的偏移地址
> 最后将这些地址相加,并锁定数值为5000,点击改变指针,然后就可通关啦

1.第一步你需要按照第二关中的方法找到,动态地址,然后加入到地址栏中。

![](/mdimg/githubPVZCheatImage//1379525-20220718133118365-2090098709.png)

**查找一级指针:**找到血量地址 0169B5F8(动态地址),然后 `右键 => 查找写入`

![](/mdimg/githubPVZCheatImage//1379525-20220718133130139-182399651.png)

然后回到教程程序中,点击 `改变数值按钮` ,如下

![](/mdimg/githubPVZCheatImage//1379525-20220718133145897-1549649108.png)

点击详细信息

![](/mdimg/githubPVZCheatImage//1379525-20220718133202053-770374807.png)

出现代码的详细信息。

![](/mdimg/githubPVZCheatImage//1379525-20220718133212445-1902823085.png)

这个该怎么看呢?ESI= 0169B5E0

ESI+ 18 =0169B5F8 就是血量的地址,也就是说。想找到血量的地址就要找到ESI,注意看了图中一行字:

<b> >>>> 要查找地址的指针的可能值是 0169B5E0</b>

如果您觉得分析太麻烦,就按CE的建议来,这里面要提醒各位注意 `可能` 这个词,也就是说不一定全对。

第6关也提到过偏移的概念。这里面的一级偏移是 18

> 总结:一级偏移是 18 下一个搜索目标是 0169B5E0

---

**查找二级指针:** 下面找`ESI`,勾上HEX(16进制),输入 0169B5E0 新扫描。

然后把新地址 0169B5E0 添加到地址栏,在地址上`右键=>选择 查找访问的地址`。

一定要注意:这里面和上面的操作不同,第一次是查找写入的地址,这次选择的是查找访问的地址。

![](/mdimg/githubPVZCheatImage//1379525-20220718133229613-1700625183.png)

如果没有出现代码信息。我们就到 Tutorial 中点击一下 `改变数值` 按钮,之后会收集到两条指令,cmp 指令跟指针没什么关系,对我们有用的是第二条指令 mov esi,。

这里由于是 mov esi, 默认我们将其偏移地址看作是 0

![](/mdimg/githubPVZCheatImage//1379525-20220718133248714-1451676881.png)

不过问题来了,我们发现,这里提示的地址和上一次提示的地址是一样的,这是为什么呢?

CE 默认使用硬件断点的方式,断点只能停在指令执行之后,而这条指令正好是把 esi 原来指向的地址中的值再赋值给 esi,所以执行之后 esi 的值已经是被覆盖掉的值了,而我们想知道的恰恰是执行这条指令之前的 esi 值, esi 就是这个我们监视的地址。

所以直接搜索这个地址即可。

![](/mdimg/githubPVZCheatImage//1379525-20220718133259575-1733267112.png)

将 0168495C 这个地址添加到下方,然后使用 `找出是什么访问了这个地址`,再来一遍。

![](/mdimg/githubPVZCheatImage//1379525-20220718133310242-1589806582.png)

> 最后得出:二级偏移是 0 ,下一个目标是0169B5E0

---

**查找三级指针:** 接下来和查找一级指针方法相同,这里我们在弹出的框中选择第二条指令。可看到二级偏移是 14

![](/mdimg/githubPVZCheatImage//1379525-20220718133321652-1477539316.png)

继续查找三级指针,方法同上,这里三级指针是0c。

![](/mdimg/githubPVZCheatImage//1379525-20220718133331056-309339072.png)

> 最后得出:三级级偏移是 0c ,下一个目标是01684628

---

**查找四级指针:** 继续搜索01684628 这个动态地址,如下。

![](/mdimg/githubPVZCheatImage//1379525-20220718133341680-536753911.png)

一定要记住:在CE中显示绿色的地址是基址,黑色的是动态地址。如果有多个绿色地址,一般情况下我们选择第一个。

这里我们已经找到了所有的地址,接下来串一下这些地址看看

> 00601660 + c + 14 +0 + 18

把基址(一级指针) "Tutorial-i386.exe"+1FD660 的值取出来,加上一级偏移 0C,当做地址,这是二级指针的地址,再把二级指针的值取出来,加上 14,这是三级指针的地址,依次类推。

**添加并测试指针:** 最后测试,指针是否生效。

![](/mdimg/githubPVZCheatImage//1379525-20220718133358561-1591451281.png)

添加后锁定数值为5000,然后点击例子中的改变指针按钮,看是否能通关。

![](/mdimg/githubPVZCheatImage//1379525-20220718133408256-399101043.png)

多级指针要注意的地方:

> 1、1级指针是 查找写入,其余全是 查找访问。
> 2、绿色的地址是基址,黑色是动态地址。
> 3、添加指针时注意用模块地址。
> 4、指针是由基址在偏移组成的,所以在教程中我们只要找到4个偏移和1个基址就可以了。
>
页: [1]
查看完整版本: CE修改器入门:查找多级指针