首页
社区
课程
招聘
[求助]哪位大神帮忙看看:关闭GS和safeSEH的情况下,部分ebp和返回地址还是无法被淹没
发表于: 2017-4-6 11:40 3451

[求助]哪位大神帮忙看看:关闭GS和safeSEH的情况下,部分ebp和返回地址还是无法被淹没

2017-4-6 11:40
3451

想做一个缓冲区溢出的实验,代码很简单:


用vs2010编译的代码,编译选项中关闭了GS和safeSEH,调试结果发现最初始的ebp和返回地址以及入参都无法被淹没,而再往后的一系列的ebp、返回地址和SEH等都被淹没了:


在程序调试过程中,赋值部分的代码都是跑的正常的,只是在往002AF7EC处写数据的时候,F8单步调试这部分代码,却看到内存中的数据没有任何变化,此时也没有抛出任何异常,相当于到002AF7EC处时跳过了这几处地址直接往后淹没了。

两个疑问,求指点:

1) 002AF7EC处的返回地址为什么无法被覆写?难道是因为它是prolog创建的吗?还是系统的什么安全措施?

2) 因为没有看到任何内存读写异常,所以很好奇002AF7EC起始的几处内存无法被淹没是如何实现的?






[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 6
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
换了VC6.0编译还是一样的情况,求大神指点
2017-4-7 11:19
0
雪    币: 6
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
试了下,debug版本不存在上述问题,release版本就有问题,有人知道为什么吗?已经困惑两天了
2017-4-7 11:27
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
release  会对程序进行大幅度的优化,你的程序中只申明了array数组,但未实际调用,也没有返回与array相关的数据,因此release版本会对其进行删减。
2017-4-11 09:45
0
雪    币: 6
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
switShell release 会对程序进行大幅度的优化,你的程序中只申明了array数组,但未实际调用,也没有返回与array相关的数据,因此release版本会对其进行删减。
不是优化的问题哦,因为我已经在release版本编译的时候选择了不优化代码,编译后的代码中是有array数组的,栈中也是有array数组空间的,002AF7D4-002AF7E4就是array数组的内存,下面的那个002AF7E8是给代码中i分配的内存。002AF7EC是ebp,002AF7F0是返回地址,再往下应该就是prolog创建的初始化入参之类的。因为我试过debug版本不存在问题,release版本就存在部分数据无法全部淹没的问题,所以我也怀疑是编译的问题,但是不知道具体是哪个编译选项的关系?另外很好奇这个编译选项是怎么实现这个功能的呢?碰到存在在002AF7EC起始的那几个数据,单步明明跑了array[i]=10的代码,i也增加了,但是那几个数据就是没被修改,也没有抛任何内存读写的异常
2017-4-11 10:51
0
游客
登录 | 注册 方可回帖
返回
//