Dlaczego ten kod pozwala mi wykryć debuger?
Dlaczego poniższy kod zespołu jest narzędziem zapobiegającym debugowaniu?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
wiem toC3h jestRETN
i wiem tostobs
zapisuje wartość wal
jako opcode zgodnie z przesunięciem wedi
i jest to zrobione dlaecx
razy z powodurep
.
Jestem również świadomy tego, żestobs
istosw
będzie działać, jeśli zostały pobrane z architektury intel jako oryginalny format.
Jeśli uruchomimy program w trybie debugowania, pre-fetch jest nieistotny i etykieta l2 zostanie uruchomiona (ponieważ jest jednostopniowa), w przeciwnym razie, jeśli nie ma debugera, będzie to ping-pong między l1 a l3.