首页
社区
课程
招聘
[求助]5.4节堆溢出利用的几个疑问
2013-6-12 08:11 9309

[求助]5.4节堆溢出利用的几个疑问

2013-6-12 08:11
9309
1、memcpy(h1,shellcode,0x200)正常执行后,在执行h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8)时出现异常,导致exit执行。为什么执行memcpy后再做HeapAlloc就会出错呢?HeapAlloc对数据区的内容还有要求吗?
2、HeapAlloc h2是怎么执行的?分配不成功,却为什么会做freelist卸节点的操作,把0x520688拷到PEB的0x7FFDF020中?
谢谢!

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 131
活跃值: (303)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学者learner 2013-9-9 22:11
2
0
memcpy(h1,shellcode,0x200)正常执行后,由于超过了正常的200字节,导致溢出,把“尾块”中剩余的部分的首部覆盖掉了,变成了别的数据(这要看你的shellcode[]数组中200字节后面的数据是什么了),那么当HeapAlloc分配内存的时候,是从“尾块”的剩余的部分分配的,你需要明白的就是这个分配过程,分配过程就是,关于链表的指针操作过程,记得书的前边说过一句话,“内存的释放、分配、以及合并都能发生dword shoot”,只要涉及到链表操作的都有可能,就是因为这个分配过程,就是你说的卸节点的操作。。。因为这个空表是一个双向链表。
如果只看做一个双向链表的话,你可以想象一下,双向链表添加和删除结点的过程。。。起始这个卸节点操作就是和添加,以及删除节点的操作是一样的。。就是指针的变化。。
可能我表达的不是很清楚吧。。。
游客
登录 | 注册 方可回帖
返回