CE第八步的详细讲解(配图),已完全通关

CE第八步的详细讲解(配图)

 

已经学到第八步的人已经都知道如何查一个valueaddress了,所以查address的那一步省略,直接查出了第一个pointer

 

CE第八步的详细讲解(配图),已完全通关_第1张图片大家可以看到这里的指令是 move[eax+18],esi,且EAX=00973b2c也就是说把esi寄存器中的值存到eax+18这个地址里面去,现在eax的值肯定是一个地地址,问题这个地址是不是变量还是常量呢?很明显是变量,因为若点击”change pointer”的时候,我们eax+18这个地址的值就不和TUT上的一样了,如果是可变的话那肯定是把EAX的值存放在另一个地址里面,那么我们继续搜索这个EAX的值,就可以到储存EAX值的地址,就如上图所示得到地址00969abc,那么我们可以手动添加指针地址了。显示上面所示。
在下面列表第二行上点击右键选择”find out what access this address”,再次改变UTU中的值
 
CE第八步的详细讲解(配图),已完全通关_第2张图片如上图所示,我们跟踪到的指令是move eax,[eax] 且eax的值还是00973b2c,为什么呢,因为eax的值是当前指令执行后的结果,第一步我们跟踪的那条的指令并没有改变eax的值,所以它保持和这一步的指令中的eax一致。所以这一步说明原eax的值所指向的地址的值是
00973b2c,那么这一步执行前的eax值就应是第一步追踪到的00969abc了,那这里的00969abc肯定也是一个指针(判定方法可以参照第一步或者简单说来有搜索时它的显示不是绿色的),所以再搜索其值为00969abc的地址可以得到00971418。

重复上面的步骤,在第二行继续选择”find out what access this address”,再次改变UTU中的值,可以得到类似下面的图
 
CE第八步的详细讲解(配图),已完全通关_第3张图片此时当前的指令是mov eax,[eax+14]且eax=00969abc,其中eax的值也代表执行这条指令之后的值,也就是说执行前eax+14所指向的地址的值是00969abc,那么我们搜索一下其值为00969abc的地址,可以得到00971418,那么执行这条指令前的eax的值就是00971418-14=00971404,同前面一样,它也不是一直常量,所以必然还有其值为00971404的地址,搜索出来为0097336c,如上图所示,照样修改原先手工添加的pointer address.

最后一步和前面几步类似,可以找到一个绿色显示的常量地址,得到的指针列表如下,且显示已经通过了第八步。
 CE第八步的详细讲解(配图),已完全通关_第4张图片

 

第九步很简单的,比第七步要稍复杂一点,只要能看明白英文的解释一般就不会有问题,这里就不再解释。有问题留言。


最后关键部分总结,最最关键的一步就是要搞明白,在find out what access this pointer的时候,显示的EAX等寄存器的值是这条指令执行之后的,这样就可以分析这条语句执行前的各寄存器的值了,不然像mov EAX, [EAX]这样的句子肯定会看晕人的。

你可能感兴趣的:(c,Access)