waliedassar

Detect VirtualBox (9 methods)

Aug 16th, 2012
6,136
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