SHARE
TWEET

Detect VirtualBox (9 methods)

waliedassar Aug 16th, 2012 4,327 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //http://waleedassar.blogspot.com - (@waleedassar)
  2. #include "stdafx.h"
  3. #include "windows.h"
  4.  
  5.  
  6. void ToLower(unsigned char* Pstr)
  7. {
  8.         char* P=(char*)Pstr;
  9.         unsigned long length=strlen(P);
  10.         for(unsigned long i=0;i<length;i++) P[i]=tolower(P[i]);
  11.         return;
  12. }
  13.  
  14. int main(int argc, char* argv[])
  15. {
  16.         //method 1
  17.         HKEY HK=0;
  18.         if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\ACPI\\DSDT\\VBOX__",0,KEY_READ,&HK)==ERROR_SUCCESS)
  19.         {
  20.                                 MessageBox(0,"VirtualBox detected","waliedassar",0);
  21.                         ExitProcess(1);
  22.         }
  23.  
  24.         //method 2 -- requires Guest Additions to be installed.
  25.         HANDLE hF1=CreateFile("\\\\.\\VBoxMiniRdrDN",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,0,OPEN_EXISTING,0,0);
  26.         if(hF1!=INVALID_HANDLE_VALUE)
  27.         {
  28.                 MessageBox(0,"VirtualBox detected","waliedassar",0);
  29.                 ExitProcess(2);
  30.         }
  31.  
  32.  
  33.         //method 3 -- requires Guest Additions to be installed
  34.         HMODULE hM1=LoadLibrary("VBoxHook.dll");
  35.         if(hM1)
  36.         {
  37.                 MessageBox(0,"VirtualBox detected","waliedassar",0);
  38.                 ExitProcess(3);
  39.         }
  40.  
  41.         //method 4 -- requires Guest Additions to be installed
  42.         HK=0;
  43.         if( (ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Oracle\\VirtualBox Guest Additions",0,KEY_READ,&HK)) && HK)
  44.         {
  45.                 MessageBox(0,"VirtualBox detected","waliedassar",0);
  46.                 RegCloseKey(HK);
  47.                 ExitProcess(4);
  48.         }
  49.  
  50.         //method 5
  51.         HK=0;
  52.         char* subkey="SYSTEM\\CurrentControlSet\\Enum\\IDE";
  53.         if( (ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&HK)) && HK )
  54.         {
  55.                 unsigned long n_subkeys=0;
  56.                 unsigned long max_subkey_length=0;
  57.                 if(ERROR_SUCCESS==RegQueryInfoKey(HK,0,0,0,&n_subkeys,&max_subkey_length,0,0,0,0,0,0))
  58.                 {
  59.                         if(n_subkeys)  //Usually n_subkeys are 2
  60.                         {
  61.                               char* pNewKey=(char*)LocalAlloc(LMEM_ZEROINIT,max_subkey_length+1);
  62.                                   for(unsigned long i=0;i<n_subkeys;i++)  //Usually n_subkeys are 2
  63.                                   {
  64.                                               memset(pNewKey,0,max_subkey_length+1);
  65.                                               HKEY HKK=0;
  66.                           if(ERROR_SUCCESS==RegEnumKey(HK,i,pNewKey,max_subkey_length+1))
  67.                                                   {
  68.                                                            if((RegOpenKeyEx(HK,pNewKey,0,KEY_READ,&HKK)==ERROR_SUCCESS)  && HKK)
  69.                                                            {
  70.                                                                      unsigned long nn=0;
  71.                                                                      unsigned long maxlen=0;
  72.                                                                      RegQueryInfoKey(HKK,0,0,0,&nn,&maxlen,0,0,0,0,0,0);
  73.                                      char* pNewNewKey=(char*)LocalAlloc(LMEM_ZEROINIT,maxlen+1);
  74.                                                                          if(RegEnumKey(HKK,0,pNewNewKey,maxlen+1)==ERROR_SUCCESS)
  75.                                                                          {
  76.                                                                                        HKEY HKKK=0;
  77.                                                                                    if(RegOpenKeyEx(HKK,pNewNewKey,0,KEY_READ,&HKKK)==ERROR_SUCCESS)
  78.                                                                                            {
  79.                                                                                                 unsigned long size=0xFFF;
  80.                                                                                                 unsigned char ValName[0x1000]={0};
  81.                                                                                     if(RegQueryValueEx(HKKK,"FriendlyName",0,0,ValName,&size)==ERROR_SUCCESS)
  82.                                                                                                         {
  83.                                                                                                          ToLower(ValName);
  84.                                                                                                          if(strstr((char*)ValName,"vbox"))
  85.                                                                                                                  {
  86.                                                                                                                 MessageBox(0,"VirtualBox detected","waliedassar",0);
  87.                                                                                                                 ExitProcess(5);
  88.                                                                                                                  }
  89.                                                                                                         }
  90.                                                                                                         RegCloseKey(HKKK);
  91.                                                                                            }
  92.                                                                          }
  93.                                                                          LocalFree(pNewNewKey);
  94.                                                                          RegCloseKey(HKK);
  95.                                                            }
  96.                                                   }
  97.                                   }
  98.                                   LocalFree(pNewKey);
  99.                         }
  100.                 }
  101.                 RegCloseKey(HK);
  102.         }
  103.  
  104.         //method 6
  105.         HK=0;
  106.         if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DESCRIPTION\\System",0,KEY_READ,&HK)==ERROR_SUCCESS)
  107.         {
  108.                 unsigned long type=0;
  109.                 unsigned long size=0x100;
  110.                 char* systembiosversion=(char*)LocalAlloc(LMEM_ZEROINIT,size+10);
  111.                 if(ERROR_SUCCESS==RegQueryValueEx(HK,"SystemBiosVersion",0,&type,(unsigned char*)systembiosversion,&size))
  112.                 {
  113.                           ToLower((unsigned char*)systembiosversion);
  114.                           if(type==REG_SZ||type==REG_MULTI_SZ)
  115.                           {
  116.                                           if(strstr(systembiosversion,"vbox"))
  117.                                           {
  118.                                                                         MessageBox(0,"VirtualBox detected","waliedassar",0);
  119.                                                                         ExitProcess(6);
  120.                                           }
  121.                           }
  122.                 }
  123.                 LocalFree(systembiosversion);
  124.  
  125.                 type=0;
  126.                 size=0x200;
  127.                 char* videobiosversion=(char*)LocalAlloc(LMEM_ZEROINIT,size+10);
  128.                 if(ERROR_SUCCESS==RegQueryValueEx(HK,"VideoBiosVersion",0,&type,(unsigned char*)videobiosversion,&size))
  129.                 {
  130.                         if(type==REG_MULTI_SZ)
  131.                         {
  132.                                 char* video=videobiosversion;
  133.                                 while(*(unsigned char*)video)
  134.                                 {
  135.                                         ToLower((unsigned char*)video);
  136.                                         if(strstr(video,"oracle")||strstr(video,"virtualbox") )
  137.                                         {
  138.                                                                         MessageBox(0,"VirtualBox detected","waliedassar",0);
  139.                                                                         ExitProcess(6);
  140.                                         }
  141.                                         video=&video[strlen(video)+1];
  142.                                 }
  143.                         }
  144.                 }
  145.                 LocalFree(videobiosversion);
  146.                 RegCloseKey(HK);
  147.         }
  148.         //method 7 - requires guest additions to be installed.
  149.         HANDLE hxx=CreateFile("\\\\.\\pipe\\VBoxTrayIPC",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
  150.         if(hxx!=INVALID_HANDLE_VALUE)
  151.         {
  152.                         MessageBox(0,"VirtualBox detected","waliedassar",0);
  153.                         CloseHandle(hxx);
  154.                         ExitProcess(7);
  155.         }
  156.         //method 8 - requires guest additions installed
  157.         HWND hY1=FindWindow("VBoxTrayToolWndClass",0);
  158.         HWND hY2=FindWindow(0,"VBoxTrayToolWnd");
  159.         if(hY1 || hY2)
  160.         {
  161.                 MessageBox(0,"VirtualBox detected","waliedassar",0);
  162.                 ExitProcess(8);
  163.         }
  164.        
  165.        //method 9
  166.        unsigned long pnsize=0x1000;
  167.        char* provider=(char*)LocalAlloc(LMEM_ZEROINIT,pnsize);
  168.        int retv=WNetGetProviderName(WNNC_NET_RDR2SAMPLE,provider,&pnsize);
  169.        if(retv==NO_ERROR)
  170.        {
  171.                 if(lstrcmpi(provider,"VirtualBox Shared Folders")==0)
  172.                 {
  173.                         MessageBox(0,"VirtualBox detected","waliedassar",0);
  174.                         ExitProcess(9);
  175.                 }
  176.        }
  177.        return 0;
  178. }
RAW Paste Data
Top