实验环境:
winxp sp3 、vs2010
实验要求:
vs编译时要求禁用优化、release版本
GS的保护原理
看图就明白了
在vs2010中可通过以下选项选择是否开启GS,默认开启:
GS保护的局限性:
(1) 函数不包含缓冲区
(2) 函数被定义为具有变量参数列表
(3) 函数使用无保护的关键字标记
(4) 函数在第一个语句中包含内嵌汇编代码
(5)缓冲区不是8字节类型且大小小于等于4个字节
针对(3)和(5)进行说明:
(3)通过添加 #pragma strict_gs_check(on) 可以对任意类型的函数添加Security Cookie,如:
(5)对上述不加关键字保护的程序进行编译运行,会出现内存访问冲突。其中0x75662065是“e fu”经过ASCII码转换后的值,说明返回地址已经被字符串覆盖了!
用IDA加载,观察到vulfunction函数在返回前果然没有Security Cookie
如果添加了关键字保护,编译运行直接弹出“缓冲区溢出”的框框
用IDA加载,观察到vulfunction函数在返回前添加了Security Cookie