对BayMax大白的多层指针补丁的理解
本帖最后由 Bu弃 于 2016-8-12 20:48 编辑今天碰到多层指针,不知道用大白(●—●)如何实现,所以问了下Nisy校长,@Nisy 根据校长的解释,还有自己的一些理解,写了这篇帖子。有错误的地方,欢迎指正。
首先描素下我遇到的问题。鉴于有时候紧张就语言描素不清楚,所以就上一张图。相信你们更加喜欢这种方式。
(图1)
图上说明 ESP 的地址为 018FC44 而方框处相对ESP的偏移是 3C,右键跟随过去后,发现里面的值是一个地址。而这个地址就是我们最终需要改动数据的地址。
下面让我们看看如何用大白(●—●)实现这个功能吧。
我们一层一层的来分析。首先,找到ESP的地址。然后+上偏移3C。在OD里的是这样的
(图2)
椭圆标记的就是ESP的地址,方框里标记的就是ESP+3C。 我们看到,ESp+3C里的内容也是地址。那么大白里的设置,寄存器我们可以确定了,偏移我们也能确定了,也就是 ESP,3C。
接下来继续走。像这种情况,如果我们只在大白设置里填ESP,3C 。那么就是会这样修改(假如我们想改成1122)
(图3)
这样就会直接把ESP+3C里面的地址修改,原地址内容并为修改。就像C语言里的交换两个数的位置,Change(int x,int y)我们知道,这样是不能实现交换功能的。正确的方式应该是这样 Change(int *x,int *y)同理,这里也是,不能实现修改功能。
那么我们应该怎么修改呢,根据校长的解答,我们只需在后面加个0即可。也就是ESP,3C,0
这样就表示,取当前ESP+3C里的值作为地址使用,而不是作为代码使用。这样就相当于我们在堆栈里右键数据窗口跟随。
(图4)
接下来我们又发现,右键数据窗口跟随里面的值还是地址。根据上面所说的,我们只需再后面再加个0即可,也就是最终的设置 ESP,3C,0,0。
这样我们就到了我们需要补数据的地方
(图5)
接下来我们就可以愉快的嘿嘿嘿了。
总结:
1、到最后的ESP,3C,0,0可以用指针这样描述 *( *(*(ESP+3C))),*(ESP+3C)得到的是图2的内容。*(*(ESP+3C))得到的是图4的内容,也就是反汇编跟随后的内容。*( *(*(ESP+3C))) 得到的是图5最终的内容(PS:这里是这样解释吧。多层指针,把自己都弄晕了。)
2、在寄存器后面加个0,就是取这里面的数据内容作为地址使用。
好了,就到这里了。谢谢大家观看。有错误的地方希望大家指出来,我也好改正,这也是种学习,不是么?
PS:感谢校长开发的工具,让我们能更好的破解,大白(●—●)真的很强大,6的飞起。校长辛苦了。
再次PS: 有时候大白没效果,可以试试把断点类型改为int3断点哦。
按照GG表哥的国际惯例。自己的沙发自己做。 坐个地板支持Bu弃表哥~ 感谢Bu弃表哥分享 天上飞的鱼 发表于 2016-8-12 20:54
坐个地板支持Bu弃表哥~
表哥别闹
a583091790 发表于 2016-8-12 21:06
感谢Bu弃表哥分享
表哥你也别闹
大白的补丁规则真的好方便,不过后面加个【,0】,个人感觉虽然成为自己独有的语法,但是不够优雅,建议可以如果把这些规则做一些脚本的绑定,或许更加灵活好玩 不弃小表弟求带啊 不错,多层指针。。
向楼主学习!向楼主致敬!
页:
[1]
2