今天在看彙編代碼的時候突然出現了__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值還是原來的值。
__security_check_cookie小分析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.