だから私はこのコードは、オーバーフローを引き起こす方法を、いくつかの日から思っていた:これはなぜオーバーフローが発生するのですか?
__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
}
ので、このコードは、PEBブロックにBeingDebuggedByteの値をチェックしています。
これが設定されていれば、彼はCheckDebuggerに再びジャンプし、そうでない場合は続行します。
だから、私は、(1)抗検出のアートを読んでいる、と本書は言う:
「オーバーフローがスタックカナリアを発生したときにオーバーフローが、スタック内で発生するまで、それが再びチェックするデバッガ存在する場合例外をトリガし、プロセスが終了する、これはプログラムを終了するための最短の方法です。
スタックでオーバーフローが発生する可能性はありますか?たぶん、スタックにeaxを毎回押し込んでいるからでしょうか?
はい、まさにそのためです –
Ok、thanxs @SamKuhmonen!私は失われた.. ahahah – Kiks777
元のポスターが質問の中で自分の質問に答えたので、私はこの質問をオフトピックとして閉じるよう投票しています。 –