Programación General > ASM (Ensamblador)
Obfuscación De Código
(1/1)
Enko:
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:
--- Código: Text --- jmp after db 0x0fafter: 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:
--- Código: Text --- 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)
Eternal Idol:
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.
Navegación
Ir a la versión completa