__security_check_cookie小分析

本文详细分析了在汇编代码中出现的__security_check_cookie机制,其目的是为了防止栈溢出。通过理解其工作原理,包括在调用复制函数前后对__security_cookie和ebp进行的操作,读者可以更深入地了解如何实现这一安全措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://bbs.pediy.com/showthread.php?p=1207447#post1207447

今天在看汇编代码的时候突然出现了__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值还是原来的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值