¿Por qué el siguiente código de ensamblado es una herramienta anti-depuración?¿Por qué este código me permite detectar un depurador?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
sé que es C3hRETN
y sé que stobs
escribe el valor en al
como código de operación de acuerdo con el desplazamiento en edi
y está hecho para ecx
veces a causa de rep
.
También soy consciente del hecho de que stobs
y se ejecutarán si se tomaron de antemano en la arquitectura de Intel como su formato original.
Si ejecutamos el programa en modo depurado, la precarga es irrelevante y la etiqueta l2 se ejecutará (porque es de un solo paso); de lo contrario, si no hay un depurador, será ping-pong entre l1 y l3 a.m. ¿derecho?
¿Aún no dependerá de si está configurado para un solo paso? Porque honestamente no puedo ver por qué el depurador tropezaría con esto de otra manera. Las reglas son algo diferentes en un solo paso. – 0xC0000022L
http://stackoverflow.com/questions/12633599/anti-debug-using-prefetch-queue-doesnt-work-with-my-cpu – 0x90