-1
所以我從一些日子,這個代碼是如何導致溢出疑惑:爲什麼會發生溢出?
__asm
{
CheckDebugger:
PUSH EAX // Save the EAX value to stack
MOV EAX, [FS:0x30] // Get PEB structure address
MOV EAX, [EAX+0x02] // Get being debugged byte
TEST EAX, EAX // Check if being debuged byte is set
JNE CheckDebugger // If debugger present check again
POP EAX // Put back the EAX value
}
所以,此代碼檢查BeingDebuggedByte到PEB塊的價值。
所以,如果這一項設置,他會再次跳到CheckDebugger,如果不是他要繼續。
所以,我讀反檢測(1),而這個文件的藝術說:
「如果調試存在,直到發生堆棧溢出一,當一個溢出發生堆棧金絲雀它會再次檢查將觸發異常並且流程將被關閉,這是退出程序的最短途徑。「
在堆棧中如何發生溢出?也許是因爲我們每次都將eax推入堆棧?
是的,正是由於該 –
好,thanxs @SamiKuhmonen!我迷路了.. ahahah – Kiks777
我投票關閉這一問題作爲題外話,因爲原來的海報中的問題回答了自己的問題。 –