;use32
; Karcrack - 190713
proc NotEmulated
push cs ;//put 0x23 in stack
call to64
ret
to64:
push $CB0033 ;//put 0x33 in stack
call to64 + 3 ;//call to retf
use64
xor rax, rax ;//DEC EAX; XOR EAX, EAX
inc rax ;//DEC EAX; INC EAX
retf ;//Back to x86
endp
El método consiste en ejecutar ensamblador x64 dentro de un proceso x86 usando la heaven's gate. Básicamente la técnica consiste en cambiar el segmento de código.
Si ensamblamos en x64 las siguientes instrucciones:
xor rax, rax
inc rax
Y luego las desensamblamos como si fuese x86 veremos que se transforma en:
dec eax
xor eax, eax
dec eax
inc eax
El prefijo que indica que se trata de un registro de 8bytes es "dec eax". Se observa que si las instrucciones se ejecutan en x64 devuelve 1 en EAX pero si se hace en x86 devuelve 0.
No conozco ningún emulador que detecte el cambio de segmento y cambie la arquitectura que emula jaja
Disfrutad :)