能力值:
(RANK:110 )
|
-
-
2 楼
当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返
回地址和局部变量的中间)。
[buffer][cookie][savedEBP][savedEIP]
在函数的结尾处,程序会把这个cookie和保存在.data节中的cookie进行比较。
如果不相等,就说明进程栈被破坏,进程必须被终止。
为了尽量减少额外的代码行对性能带来的影响,只有当一个函数中包含字符串缓冲区或使用_alloca函数
在栈上分配空间的时候编译器才在栈中保存cookie。另外,当缓冲区至少于5个字节时,在栈中也不保
存cookie。
在典型的缓冲区溢出中,栈上的返回地址会被数据所覆盖,但在返回地址被覆盖之前,cookie早已经被
覆盖了,因此就导致了exploit的失效(但仍然可以导致拒绝服务),因为在函数的结尾程序会发现cookie
已经被破坏,接着应用程序会被结束。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
[QUOTE=wingdbg;905394]当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返
回地址和局部变量的中间)。
[buffer][cookie][savedEBP][...[/QUOTE]
谢谢 wingdbg
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
[QUOTE=wingdbg;905394]当应用程序启动时,程序的cookie(4字节(dword),无符号整型)被计算出来(伪随机数)并保存在
加载模块的.data节中,在函数的开头这个cookie被拷贝到栈中,位于EBP和返回地址的正前方(位于返
回地址和局部变量的中间)。
[buffer][cookie][savedEBP][...[/QUOTE]
强人啊!!!
严重膜拜
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
强悍..学到了.谢谢牛人.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
那个cookie好像一般都是π值
|
|
|