SoloCodigo
Programación General => ASM (Ensamblador) => Mensaje iniciado por: Enko en Jueves 3 de Mayo de 2007, 21:16
-
Leyendo un ebook sobre Reversing me topé con una duda.
Existen 2 tipos de desensambladores, creo que eran recursivos (Olly, IDA, PEBrowser) y otros creo lineales como Softice.
Existen así disintas técnicas para engañarlos y hacer que desensamblen mal.
Por ejemplo este código:
jmp after
db 0x0f
after:
mov eax, [var]
push eax
call function
OllyDbg, al ser recursivo, desensambla perfectamente bien ese codigo. (Claro está que hay trucos no mucho mas complicados que ese que lo logran engañar.)
Pero en el caso de Softice, interpreta el codigo como:
jmp dir1
jmp dir2
xlat
INVALID
jmp far[eax+24]
pushad
Ahora la duda que me surge.... ¿Como es que el CPU nunca se confunde? (Me refiero ctambien a técnicas que engañan hasta a IDA y Olly)
-
El punto es que el SoftIce es principalmente un DEPURADOR y no hace demasiados analisis (el IDA es justamente lo opuesto, y el Olly digamos que es una mezcla).
En realidad solo pueden engañar a los que sean estaticos (IDA) ya que cuando ejecutas las instrucciones de ese tipo en un depurador este vuelve a desensamblar desde la direccion del puntero de instruccion actual (eip) y entonces es correcta.
Por cierto si le pedis al SoftIce que desensamble desde la direccion de after (con u creo que era) entonces tambien te lo mostrara correctamente.
La CPU ejecuta las instrucciones directamente, los opcodes de assembly son una representacion en un lenguaje "legible", no desensambla asi que no hay ningun punto donde pudiera confundirse.