__security_check_cookie小分析

今天在看彙編代碼的時候突然出現了__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值還是原來的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章