Determiner si on est sur une machine 32 ou 64bits ApiLess

Ca faisait longtemps hein… Je suis tombé sur un vieux truc, mais je n’en avait pas conscience. Un process 32Bits peut facilement déterminer si il tourne sur une machine 32 Bits ou 64 Bits sous WoW64 en regardant la valeur du registre de code CS. Ainsi, pas besoin de faire le moindre API Call.

Si c’est 0x1B c’est un Os 32Bits, Si c’est 0x23 c’est un Os 64Bits sur WoW… Si c’est 0x33 ca sera un process 64 bits dans un os 64Bits… (et là y a du trick pour faire du tourner du code 64bits dans un process 32 on fera plus tard, c’est fun).

Donc le code est simple avec un petit décalage de bit on a 0 pour 32 bits ou 1 pour 64 Bits os.

global _is3264
_is3264:

      xor   eax,eax  ; Cleanup partie haute du registre

      mov   ax,cs    ; Récupération du code segment

      shr   eax,5     ; Decalage des bits a droite 

      ret

Et c’est tout… un wrapper pour les plus feignants..

#include <stdio.h>
#include <string.h>

unsigned int extern is3264() asm ("_is3264"); 


// Main programm
int main(){
	if (is3264() == 0) {
        printf ("It is a 32bits Windows\n");
    } else {
        printf ("It is a 64bits Windows\n");
    }
    return(0);
}

Et le Makefile qui va bien

all: is3264.exe

clean:
	rm *.exe *.o

is3264.exe: is3264.c is3264.asm
	yasm -f win32 -g cv8 -m x86 is3264.asm -o is3264.o
	i586-mingw32msvc-gcc is3264.o is3264.c -o is3264.exe

A+

This entry was posted in Asm, Hacking, Windows and tagged . Bookmark the permalink.

2 Responses to Determiner si on est sur une machine 32 ou 64bits ApiLess

  1. nop -- says:

    Salut. Dans le même genre – apiless -.
    Je pense aussi qu’on peut regarder dans le TIB : FS:[0xC0].
    Pour déterminer si un process 32 bits tourne sous Wow64. ;-)

    https://en.wikipedia.org/wiki/Win32_Thread_Information_Block

  2. thanatos says:

    Yep ca peut le faire, J’ai pas regardé s’il est à 0 en 32bits.. Après je reste sur la mienne, ca n’exite pas les gens a parser le PEB/TIB :)

Leave a Reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code