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

大理寺少卿 · · CE\x64dbg基础
0

本文共计2062个字,预计阅读时长8.2分钟。

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

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

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

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

1379525-20220718133118365-2090098709


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

1379525-20220718133130139-182399651


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

1379525-20220718133145897-1549649108


点击详细信息

1379525-20220718133202053-770374807


出现代码的详细信息。

1379525-20220718133212445-1902823085


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

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

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

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

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

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

****************************************

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

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

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

1379525-20220718133229613-1700625183


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

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

1379525-20220718133248714-1451676881


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

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

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

1379525-20220718133259575-1733267112


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

1379525-20220718133310242-1589806582


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

****************************************

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

1379525-20220718133321652-1477539316


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

1379525-20220718133331056-309339072


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

****************************************

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

1379525-20220718133341680-536753911


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

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

>00601660 + c + 14 +0 + 18

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

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

1379525-20220718133358561-1591451281


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

1379525-20220718133408256-399101043


多级指针要注意的地方:

>1、1级指针是 查找写入,其余全是 查找访问。
>2、绿色的地址是基址,黑色是动态地址。
>3、添加指针时注意用模块地址。
>4、指针是由基址在偏移组成的,所以在教程中我们只要找到4个偏移和1个基址就可以了。


最新回复 ( 0 )
全部楼主
  • 暂无评论