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

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

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

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

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

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

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

image.png

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

image.png

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

image.png

点击详细信息

image.png

出现代码的详细信息。

image.png

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

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

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

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

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

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

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

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

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

image.png

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

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

image.png

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

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

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

image.png

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

image.png

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

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

image.png

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

image.png

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

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

image.png

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

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

00601660 + c + 14 +0 + 18

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

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

image.png

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

image.png

多级指针要注意的地方:

1、1级指针是 查找写入,其余全是 查找访问。
2、绿色的地址是基址,黑色是动态地址。
3、添加指针时注意用模块地址。
4、指针是由基址在偏移组成的,所以在教程中我们只要找到4个偏移和1个基址就可以了。
相关文章
|
23天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
76 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
2月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
50 2
|
2月前
|
存储 C语言
操作多级(一、二、三级)指针才是我们的该有的姿态~
本文通过一道C语言编程题目,详细解析了多级指针的加减操作,包括二级指针和三级指针的使用,以及如何理解指针的地址计算过程,帮助读者巩固和理解指针概念。
69 0
|
4月前
|
存储 安全 编译器
C++入门 | auto关键字、范围for、指针空值nullptr
C++入门 | auto关键字、范围for、指针空值nullptr
78 4
|
4月前
|
Go 计算机视觉
Go从入门到放弃之指针
Go从入门到放弃之指针
|
5月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
6月前
|
存储 C语言
C语言中的多级指针、指针数组与数组指针
C语言中的多级指针、指针数组与数组指针
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
117 13
|
2月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
37 0
|
3月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
141 4