Underc0de

[In]Seguridad Informática => Análisis y desarrollo de malwares => Desarrollo y modificación de malwares => Mensaje iniciado por: Arkangel en Julio 05, 2013, 03:18:46 PM

Título: Detectar un SO de 64bits
Publicado por: Arkangel en Julio 05, 2013, 03:18:46 PM
Bueno, se me ocurrio hablando con Zero una manera de detectar desde 32bits si el SO es de 64 y se me ocurrio esto para solucionar su problema
Gracias Zero por preguntar

Código (cpp) [Seleccionar]

bool __declspec(naked) is64BitOS(){
    __asm{
        mov eax,fs:[0xC0]
        test eax,eax
        je _32bits
        mov eax,1
      _32bits:
        ret
    }
}


Saludos
Título: Re:Detectar un SO de 64bits
Publicado por: The Swash en Julio 05, 2013, 03:27:09 PM
A dudas interesantes, soluciones interesantes :)
Muy bueno si señor :P

Saludos.
Título: Re:Detectar un SO de 64bits
Publicado por: Karcrack en Julio 05, 2013, 07:17:33 PM
Me he tomado la libertad de minimizar el código. Soy un maniático  :P
Código (asm) [Seleccionar]
     xor   eax, eax
     cdq
     xor   edx, [FS:0xC0]
     setnz al
     ret   


Gracias por compartir ;)
Título: Re:Detectar un SO de 64bits
Publicado por: -Nox- en Julio 06, 2013, 01:04:27 AM

Me ha gustado, muy bueno eh!

Saludos,
Nox.
Título: Re:Detectar un SO de 64bits
Publicado por: Vermillion en Julio 06, 2013, 05:51:38 PM
El [FS:0xC0] se puede hacer más pequeño por ser IMM32. No encontré ningún modo más bonito :

Código (asm) [Seleccionar]
     xor   eax, eax
     cdq
     mov   al, -40
     xor   edx, [FS:eax]
     setnz al
     ret   


Excelente aporte :D
Título: Re:Detectar un SO de 64bits
Publicado por: [Zero] en Julio 06, 2013, 07:15:12 PM
Código (asm) [Seleccionar]

MOV EAX,DWORD PTR FS:[0C0h]
TEST EAX,EAX
SETNE AL
RETN


Mismos bytes pero menos lineas jaja.

Saludos
Título: Re:Detectar un SO de 64bits
Publicado por: Karcrack en Julio 07, 2013, 06:36:36 PM
Muy bueno Vermillion, yo probé usando fs[eax+$C0] pero al ser mayor que $7F se seguían gastando 4 bytes para el inmediato ^^ Muy listo usando al :D
Título: Re:Detectar un SO de 64bits
Publicado por: [L]ord [R]NA en Julio 08, 2013, 12:01:23 AM
Menos bytes... En C/C++ todo valor diferente de 0 es true :P

Código (asm) [Seleccionar]

MOV EAX,DWORD PTR FS:[0C0h]
RETN
Título: Re:Detectar un SO de 64bits
Publicado por: [Zero] en Julio 08, 2013, 01:13:02 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Menos bytes... En C/C++ todo valor diferente de 0 es true :P

Código (asm) [Seleccionar]

MOV EAX,DWORD PTR FS:[0C0h]
RETN


Eso es trampa :P .
Título: Re:Detectar un SO de 64bits
Publicado por: [L]ord [R]NA en Julio 08, 2013, 10:18:51 AM
Trampa... :P Claro que no. Es legal.
Título: Re:Detectar un SO de 64bits
Publicado por: Karcrack en Julio 08, 2013, 11:04:04 AM
No sólo es trampa sino que no funcionará. Haciendo esto:
Código (cpp) [Seleccionar]
bool __declspec(naked) is64(){
__asm{
mov eax, fs:[0xC0]
ret
}
}

El compilador solo comprobará al para ver el valor booleano.

Haciendo esto sí que serviría:
Código (cpp) [Seleccionar]
bool Is64(){
return __readfsdword(0xC0);
}

Aunque salta un warning diciendo que habrá pérdidas de rendimiento al hacer el casting forzoso.

Saludos ^^
Título: Re:Detectar un SO de 64bits
Publicado por: [L]ord [R]NA en Julio 09, 2013, 11:37:31 AM
-_-... lee las etiquetas. Dice ASM
Título: Re:Detectar un SO de 64bits
Publicado por: Pr0ph3t en Julio 09, 2013, 11:44:31 AM
Muy bueno, a ver si haceis un taller de ASM  :P
Título: Re:Detectar un SO de 64bits
Publicado por: [L]ord [R]NA en Julio 10, 2013, 12:32:29 AM
Si los juntas a todos y los pones a trabajar a tiempo completo, en 15 años tendras el tuto.