步骤 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),老汉看会电影休息一下,哈~