Detectando la arquitectura en Windows con ensamblador mediante registros de segmentación

Un viejo pero efectivo truco para detectar la arquitectura de un sistema es usar los registros de segmento CS, un método que usaba también el malware Kronos:
xor   eax,eax   
mov   ax,cs    
shr   eax,5    

En base a ésto, un cazador de bugs como Osanda Malith Jayathissa (@OsandaMalith) ha expuesto en su blog otras formas de obtener la arquitectura mediante los registros de segmento ES, GS y FS:

Usando ES
; Author : @OsandaMalith
main:
        xor eax,eax
        mov ax,es
        ror ax, 0x3
        and eax,0x1
        test eax, eax
        je thirtytwo
        invoke MessageBox,0, 'You are Running 64-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
        jmp exit

thirtytwo:
        invoke MessageBox,0, 'You are Running 32-bit', 'Architecture', MB_OK + MB_ICONINFORMATION

exit:
        invoke ExitProcess, 0  

Usando GS
; Author : @OsandaMalith
main:
        xor eax, eax
        mov eax, gs
        test eax, eax
        je thirtytwo
        invoke MessageBox,0, 'You are Running 64-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
        jmp exit

thirtytwo:
        invoke MessageBox,0, 'You are Running 32-bit', 'Architecture', MB_OK + MB_ICONINFORMATION

exit:
        invoke ExitProcess, 0

.end main     

Usando TEB

También podemos usar TEB (Win32 Thread Information Block) + 0xc0 la cuál es ‘WOW32Reserved’.


; Author : @OsandaMalith
main:
        xor eax, eax
        mov eax, [FS:0xc0]
        test eax, eax
        je thirtytwo
        invoke MessageBox,0, 'You are Running 64-bit', 'Architecture', MB_OK + MB_ICONINFORMATION
        jmp exit

thirtytwo:
        invoke MessageBox,0, 'You are Running 32-bit', 'Architecture', MB_OK + MB_ICONINFORMATION

exit:
        invoke ExitProcess, 0

.end main  
  

Y lo mejor, Osanda nos regala también un pequeño programa en C con todas estas técnicas para detectar la arquitectura, tremendamente útil para shellcoding:

#include <Windows.h>
#include <wchar.h>

/*
 * Author: Osanda Malith Jayathissa - @OsandaMalith
 * Website: https://osandamalith.com
 * Description: Few tricks that you can use to detect the architecture in Windows
 * Link :  http://osandamalith.com/2017/09/24/detecting-architecture-in-windows/ 
 */

BOOL detectArch_ES() {
#if defined(_MSC_VER)
    _asm {
        xor eax, eax
        mov ax, es
        ror ax, 0x3
        and eax, 0x1            
    }
#elif defined(__GNUC__)        
asm(  
        ".intel_syntax noprefix;"
        "xor eax, eax;"
        "mov ax, es;"
        "ror ax, 0x3;"
        "and eax, 0x1;"
            
    );
#endif
}

BOOL detectArch_GS() {
#if defined(_MSC_VER)
    _asm {
        xor eax, eax
        mov ax, gs

    }
#elif defined(__GNUC__)        
    asm(
        ".intel_syntax noprefix;"
        "xor eax, eax;"
        "mov ax, gs;"
        );
#endif
}

BOOL detectArch_TEB() {
#if defined(_MSC_VER)
    _asm {
        xor eax, eax
        mov eax, fs:[0xc0]

    }
#elif defined(__GNUC__)        
    asm(
        ".intel_syntax noprefix;"
        "xor eax, eax;"
        "mov eax, fs:[0xc0];"
        );
#endif
}

int main(int argc, char* argv[]) {
    wprintf(
        !detectArch_ES() ? 
        L"You are Running 32-bit\n" :
        L"You are Running 64-bit\n"
        );

    
    wprintf(
        !detectArch_GS() ?
        L"You are Running 32-bit\n" :
        L"You are Running 64-bit\n"
        );
        
    wprintf(
        !detectArch_TEB() ?
        L"You are Running 32-bit\n" :
        L"You are Running 64-bit\n"
        );
        
    return 1337;
}  
  

Fuente: Detecting Architecture in Windows

3 comentarios :

  1. ¡Gran aporte! Se me da fatal ASM. Lo único que fui capaz de hacer fue un "Hola Mundo" siguiendo un tutorial... Y no me quedó nada claro...
    ¿Taller de ASM en Hackplayers? ¡Apuntando alto!

    ResponderEliminar
    Respuestas
    1. Ummmm llevo tiempo pensando hacer algo desde 0... A ver si saco tiempo :)

      Eliminar
    2. jaja seria genial un taller de asm en hackplayers, quisiera aprender y no he encontrado informacion muy clara quizas con mas informacion lo pueda aprender, por cierto gracias por su trabajo

      Eliminar