All pastes #758595 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-11-02 12:03 UTC
rendered paste body
bool IsSomethingUnknown()
{
  __try 
  {
    __asm
    {
      // Execute the magic code sequence
      // Taken from Microsoft's vmcheck.dll
      _emit 0x0F
      mov eax, 0x45C70001
      cld
      _emit 0xFF
      _emit 0xFF
      _emit 0xFF
      _emit 0xFF    
  };
  }
  __except(1)
  {
    // An exception occured, this is possibly a real processor
    return false;
  }
  // We succeeded, we're something unknown (Virtual PC for MAC?)
  return true;
}

bool IsVirtualPC()
{
  __try 
  {
    __asm
    {
      // Execute the magic code sequence
      // Taken from Microsoft's vmcheck.dll
      mov eax, 1
      _emit 0x0F // db 0fh
      _emit 0x3F // aas
      _emit 0x07 // pop es
      _emit 0x0B // or eax, edi
      _emit 0xC7
      _emit 0x45 // inc ebp
      _emit 0xFC // cld
      _emit 0xFF // dd 0ffffffffh
      _emit 0xFF
      _emit 0xFF
      _emit 0xFF
    };
  }
  __except(1)
  {
    // An exception occured, we ain't in Virtual PC
    return false;
  }
  // We succeeded, we're Virtual PC emulated
  return true;
}

bool IsVMWare()
{
  unsigned long _EBX;
  __try 
  {
    __asm
    {
      // Execute the magic code sequence
      // Taken from some website
      // http://www.delphipraxis.net/topic7552_testen+ob+das+programm+in+einer+vmware+vm+ausgefuehrt+wird.html
      push ebx
      mov eax, 0x564D5868
      mov ebx, 0x8685D465 // Ensure 0x564D5868 isn't in EBX :)
      mov ecx, 10         // The command for obtaining VMWare version information
      mov dx, 0x5658
      in eax, dx
      mov _EBX, ebx
      pop ebx
    };
  }
  __except(1)
  {
    // An exception occured, we ain't in VMWare
    return false;
  }

  // The code was executed successfuly, check for the magic value
  return _EBX == 0x564D5868;
}