首页
社区
课程
招聘
[原创]__security_check_cookie小分析
发表于: 2013-8-8 01:11 11554

[原创]__security_check_cookie小分析

2013-8-8 01:11
11554

今天在看汇编代码的时候突然出现了__security_check_cookie ,突然不知道为什么,后来经过一番查发现,在复制数据的时候,为了防止栈溢出,而出现的一种办法。

小分析了一下,大牛勿喷

首先在调用复制函数前:会有这样的汇编代码
mov     eax, ___security_cookie
xor     eax, ebp
mov     [ebp+var_4], eax
对于 ___security_cookie :有如此的定义
#ifdef _WIN64
#define DEFAULT_SECURITY_COOKIE 0x00002B992DDFA232
#else  /* _WIN64 */
#define DEFAULT_SECURITY_COOKIE 0xBB40E64E
#endif  /* _WIN64 */
DECLSPEC_SELECTANY UINT_PTR __security_cookie = DEFAULT_SECURITY_COOKIE;
前面的汇编代码,先取___security_cookie 和ebp异或,然后保存起来

在这过程中,开始调用复制函数(可能已经产生溢出)

调用完毕后,会做如下处理:
mov     ecx, [ebp+var_4]
xor     ecx, ebp        ; cookie
call    @__security_check_cookie@4 ; __security_check_cookie(x)
在此汇编中,取出调用复制函数前所保存的值,再和ebp  进行异或,异或后的值保存在ecx,然后开始调用  __security_check_cookie函数
该函数:
cmp     ecx, ___security_cookie
jnz     short failure
比较ecx和___security_cookie是否相同,如果相同则 没有发生溢出,之所以可以的判断是因为 :
Xor a,b
xor a,b
如果b值不变,则a值还是原来的值。

另外分享一个论坛,有驱动教程

(友情分享,别无它意 http://www.mengwuji.net/forum.php)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错。晚上1点还在搞。。。
2013-8-8 09:13
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
还是楼主比较专注,我看到这个 __security_check_cookie ,直接就忽略了
2013-8-8 12:31
0
雪    币: 390
活跃值: (768)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
早写出来了,忘记发了
2013-8-8 12:47
0
雪    币: 390
活跃值: (768)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
研究性的学习。。。。
2013-8-8 12:49
0
游客
登录 | 注册 方可回帖
返回
//