Underc0de - La Casa de los Informáticos

[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
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
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.