-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
我投票关闭这一问题作为题外话,因为原来的海报中的问题回答了自己的问题。 –