[Assembler] Schnell ohne Windows API das OS ermitteln

Dieses Thema im Forum "Projekte / Codes" wurde erstellt von N0S, 27. Juli 2009 .

  1. 27. Juli 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Schnell ohne Windows API das OS ermitteln

    Kleiner Sourcecode von mir wie man schnell, ohne eine Windows API zu benutzen, das verwendete Betriebssystem ermittelt. Windows 7 wird unterstützt.

    Das Zauberwort heisst Process Environment Block, da steht es drin

    MASM Source:
    Code:
     .386
     .model flat, stdcall
     option casemap :none
    
    
     include c:\masm32\include\user32.inc
     include c:\masm32\include\kernel32.inc
    
     includelib c:\masm32\lib\user32.lib
     includelib c:\masm32\lib\kernel32.lib
     
     MessageBox PROTO :DWORD, :DWORD, :DWORD, :DWORD
     ExitProcess PROTO :DWORD
     Win PROTO :DWORD
     
     assume fs:nothing
    
     .data
     XP db "Windows XP",0h
     Vista db "Windows Vista",0h
     Win7 db "Windows 7",0h
     Serv db "Windows Server 2003",0h
     W2000 db "Windows 2000",0h
     MSGC db "Du benutzt...",0h
     .code
    
     start:
     ;Process Environment Block (PEB)
     mov eax, DWORD PTR fs:[30h]
     ;PEB+A4h
     mov ecx, dword ptr ds:[eax+0A4h]
     
     cmp cl, 6h
     
     ;PEB+A8h
     mov ecx, dword ptr ds:[eax+0A8h]
     
     jne @2 ;springe wenn nicht gleich cl = 6
     
     cmp cl, 1h
     jne @1
     invoke Win, addr Win7 ;Windows 7
    @1: 
     invoke Win, addr Vista ;Windows Vista
     
     
    @2:
     cmp cl, 2h
     jne @3
     invoke Win, addr Serv ;Windows Server 2003
    @3:
     cmp cl, 1h
     jne @4
     invoke Win, addr XP ;Windows XP
    @4:
     invoke Win, addr W2000 ;Windows 2000
    
     int 3 
    
     
    Win PROC WinV :DWORD
     invoke MessageBox, 0, WinV, addr MSGC, 40h
     invoke ExitProcess, 0
    Win ENDP
     int 3
     end start
    No File | xup.in
     
  2. 31. August 2009
    AW: Schnell ohne Windows API das OS ermitteln

    Ich habs mal C++-freundlich gemacht :]

    Code:
    typedef enum {
     WIN_UNKNOWN = -1,
     WIN_2000 = 0,
     WIN_XP = 1,
     WIN_2003 = 2,
     WIN_VISTA = 3,
     WIN_7 = 4
    } WINVER_E;
    
    WINVER_E getWinVersion()
    {
     DWORD v_major, v_minor;
    
     _asm {
     //Register fs zeigt zum TIB (Thread Information Block)
     //fs:[30h] = Adresse zum PEB (Process Environment Block)
     mov eax, dword ptr fs:[30h]
     //PEB + 0xa4 = major version
     mov ecx, dword ptr [eax+0A4h]
     //PEB + 0xa8 = minor version
     mov edx, dword ptr [eax+0A8h]
     mov v_major, ecx;
     mov v_minor, edx;
     }
    
     switch (v_major)
     {
     case 0x6:
     switch (v_minor)
     {
     case 0x1:
     return WIN_7;
     break;
    
     case 0x0:
     return WIN_VISTA;
     break;
     }
     break;
    
     case 0x5:
     switch (v_minor)
     {
     case 0x2:
     return WIN_2003;
     break;
    
     case 0x1:
     return WIN_XP;
     break;
    
     case 0x0:
     return WIN_2000;
     break;
     }
     }
    
     return WIN_UNKNOWN;
    }
    Coole Sache... wusste nicht, dass es sowas überhaupt gibt^^
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.