0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

反虛擬機(jī)技術(shù)合集2

jf_78858299 ? 來(lái)源:看雪學(xué)苑 ? 作者: houjingyi ? 2023-02-14 13:45 ? 次閱讀

4.根據(jù)特定的文件夾或文件信息

通過(guò)查找磁盤(pán)中是否存在特定的文件夾或文件,判斷當(dāng)前是否在虛擬機(jī)中。VMware虛擬機(jī)中通常會(huì)有路徑C:\\Program Files\\VMware\\VMware Tools\\;VirtualBox 虛擬機(jī)中通常會(huì)有路徑 C:\\Program Files\\Oracle\\VirtualBox Guest Additions\\。

圖片

圖片

BOOL CheckVMware()  
{  
   if (PathIsDirectory("C:\\\\Program Files\\\\VMware\\\\VMware Tools\\\\") == 0)  
   {  
       return FALSE;  
   }  
   else  
   {  
       return TRUE;  
   }  
}
BOOL CheckVirtualBox()  
{  
   if (PathIsDirectory("C:\\\\Program Files\\\\Oracle\\\\VirtualBox Guest Additions\\\\") == 0)  
   {  
       return FALSE;  
   }  
   else  
   {  
       return TRUE;  
   }  
}

5.根據(jù)特定注冊(cè)表信息

通過(guò)讀取主機(jī)具有虛擬機(jī)特性的注冊(cè)表位置來(lái)判斷是否處于虛擬機(jī)環(huán)境中。針對(duì)VMware可以判斷注冊(cè)表項(xiàng)HKEY_CLASSES_ROOT\\Applications\\VMwareHostOpen.exe;針對(duì)VirtualBox可以判斷注冊(cè)表項(xiàng)HKEY_LOCAL_MACHINE\\SOFTWARE\\Oracle\\VirtualBox Guest Additions。當(dāng)然,注冊(cè)表中能被檢測(cè)出的位置很多,這里只是舉個(gè)例子。

圖片

圖片

BOOL CheckVMWare()  
{  
   HKEY hkey;  
   if (RegOpenKey(HKEY_CLASSES_ROOT, "\\\\Applications\\\\VMwareHostOpen.exe", &hkey) == ERROR_SUCCESS)  
   {  
       return TRUE;  
   }  
   else  
   {  
       return FALSE;  
   }  
}
BOOL CheckVirtualBox()  
{  
   HKEY hkey;  
   if (RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\\\Oracle\\\\VirtualBox Guest Additions", &hkey) == ERROR_SUCCESS)  
   {  
       return TRUE;  
   }  
   else  
   {  
       return FALSE;  
   }  
}

6.根據(jù)特定服務(wù)名

通過(guò)獲取主機(jī)當(dāng)前具有VMware特性的服務(wù)信息,判斷當(dāng)前主機(jī)是否為虛擬機(jī)。在VMware中通常會(huì)存在VMware物理磁盤(pán)助手服務(wù)和VMware Tools服務(wù)等;在VirtualBox中通常會(huì)存在VirtualBox Guest Additions Service服務(wù)等。

圖片

圖片

BOOL CheckVMWare()  
{  
   int menu = 0;    
   //打開(kāi)系統(tǒng)服務(wù)控制器    
   SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);  
   if(SCMan == NULL)    
   {  
       cout << GetLastError() << endl;  
       printf("OpenSCManager Eorror/n");    
       return -1;    
   }    
   //保存系統(tǒng)服務(wù)的結(jié)構(gòu)  
   LPENUM_SERVICE_STATUSA service_status;    
   DWORD cbBytesNeeded = NULL;    
   DWORD ServicesReturned = NULL;    
   DWORD ResumeHandle = NULL;    
   service_status = (LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);    
   //獲取系統(tǒng)服務(wù)的簡(jiǎn)單信息    
   bool ESS = EnumServicesStatusA(SCMan, //系統(tǒng)服務(wù)句柄    
       SERVICE_WIN32, //服務(wù)的類(lèi)型    
       SERVICE_STATE_ALL,  //服務(wù)的狀態(tài)    
       (LPENUM_SERVICE_STATUSA)service_status,  //輸出參數(shù),系統(tǒng)服務(wù)的結(jié)構(gòu)    
       1024 * 64,  //結(jié)構(gòu)的大小    
       &cbBytesNeeded, //輸出參數(shù),接收返回所需的服務(wù)    
       &ServicesReturned, //輸出參數(shù),接收返回服務(wù)的數(shù)量    
       &ResumeHandle); //輸入輸出參數(shù),第一次調(diào)用必須為0,返回為0代表成功    
   if(ESS == NULL)    
   {    
       printf("EnumServicesStatus Eorror/n");    
       return -1;    
   }    
   for(int i = 0; i < ServicesReturned; i++)    
   {    
       if (strstr(service_status[i].lpDisplayName, "VMware Tools")!=NULL || strstr(service_status[i].lpDisplayName, "VMware 物理磁盤(pán)助手服務(wù)")!=NULL)  
       {  
           return TRUE;  
       }  
   }    
   //關(guān)閉服務(wù)管理器的句柄  
   CloseServiceHandle(SCMan);  
   return FALSE;  
}
BOOL CheckVirtualPC()  
{  
   int menu = 0;    
   //打開(kāi)系統(tǒng)服務(wù)控制器    
   SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);  
   if(SCMan == NULL)    
   {  
       cout << GetLastError() << endl;  
       printf("OpenSCManager Eorror/n");    
       return -1;    
   }    
   //保存系統(tǒng)服務(wù)的結(jié)構(gòu)  
   LPENUM_SERVICE_STATUSA service_status;    
   DWORD cbBytesNeeded = NULL;    
   DWORD ServicesReturned = NULL;    
   DWORD ResumeHandle = NULL;    
   service_status = (LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);    
   //獲取系統(tǒng)服務(wù)的簡(jiǎn)單信息    
   bool ESS = EnumServicesStatusA(SCMan, //系統(tǒng)服務(wù)句柄    
       SERVICE_WIN32, //服務(wù)的類(lèi)型    
       SERVICE_STATE_ALL,  //服務(wù)的狀態(tài)    
       (LPENUM_SERVICE_STATUSA)service_status,  //輸出參數(shù),系統(tǒng)服務(wù)的結(jié)構(gòu)    
       1024 * 64,  //結(jié)構(gòu)的大小    
       &cbBytesNeeded, //輸出參數(shù),接收返回所需的服務(wù)    
       &ServicesReturned, //輸出參數(shù),接收返回服務(wù)的數(shù)量    
       &ResumeHandle); //輸入輸出參數(shù),第一次調(diào)用必須為0,返回為0代表成功    
   if(ESS == NULL)    
   {    
       printf("EnumServicesStatus Eorror/n");    
       return -1;    
   }    
   for(int i = 0; i < ServicesReturned; i++)    
   {    
       if (strstr(service_status[i].lpDisplayName, "Virtual Machine")!=NULL)  
       {  
           return TRUE;  
       }  
   }    
   //關(guān)閉服務(wù)管理器的句柄  
   CloseServiceHandle(SCMan);  
   return FALSE;  
}
BOOL CheckVirtualBox()  
{  
   int menu = 0;    
   //打開(kāi)系統(tǒng)服務(wù)控制器    
   SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);  
   if(SCMan == NULL)    
   {  
       cout << GetLastError() << endl;  
       printf("OpenSCManager Eorror/n");    
       return -1;    
   }    
   //保存系統(tǒng)服務(wù)的結(jié)構(gòu)  
   LPENUM_SERVICE_STATUSA service_status;    
   DWORD cbBytesNeeded = NULL;    
   DWORD ServicesReturned = NULL;    
   DWORD ResumeHandle = NULL;    
   service_status = (LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);    
   //獲取系統(tǒng)服務(wù)的簡(jiǎn)單信息    
   bool ESS = EnumServicesStatusA(SCMan, //系統(tǒng)服務(wù)句柄    
       SERVICE_WIN32, //服務(wù)的類(lèi)型    
       SERVICE_STATE_ALL,  //服務(wù)的狀態(tài)    
       (LPENUM_SERVICE_STATUSA)service_status,  //輸出參數(shù),系統(tǒng)服務(wù)的結(jié)構(gòu)    
       1024 * 64,  //結(jié)構(gòu)的大小    
       &cbBytesNeeded, //輸出參數(shù),接收返回所需的服務(wù)    
       &ServicesReturned, //輸出參數(shù),接收返回服務(wù)的數(shù)量    
       &ResumeHandle); //輸入輸出參數(shù),第一次調(diào)用必須為0,返回為0代表成功    
   if(ESS == NULL)    
   {    
       printf("EnumServicesStatus Eorror/n");    
       return -1;    
   }    
   for(int i = 0; i < ServicesReturned; i++)    
   {    
       if (strstr(service_status[i].lpDisplayName, "VirtualBox Guest")!=NULL)  
       {  
           return TRUE;  
       }  
   }    
   //關(guān)閉服務(wù)管理器的句柄  
   CloseServiceHandle(SCMan);  
   return FALSE;  
}

7.根據(jù)時(shí)間差

由于在虛擬機(jī)中,代碼的運(yùn)行速度通常不如真實(shí)主機(jī)。所以惡意代碼通過(guò)運(yùn)行一段特定的代碼來(lái)比較這段代碼在虛擬機(jī)和真實(shí)主機(jī)之中的相對(duì)運(yùn)行時(shí)間,以此來(lái)判斷是否處于虛擬機(jī)之中。

BOOL CheckVMWare()  
{  
   __asm  
   {  
       rdtsc  
       xchg ebx,eax  
       rdtsc  
       sub eax,ebx  
       cmp eax,0xFF  
       jg detected  
   }  
   return FALSE;  
detected:  
   return TRUE;  
}
BOOL CheckVirtualPC()  
{  
   __asm  
   {  
       rdtsc  
       xchg ebx,eax  
       rdtsc  
       sub eax,ebx  
       cmp eax,0xFF  
       jg detected  
   }  
   return FALSE;  
detected:  
   return TRUE;  
}
BOOL CheckVirtualBox()  
{  
   __asm  
   {  
       rdtsc  
       xchg ebx,eax  
       rdtsc  
       sub eax,ebx  
       cmp eax,0xFF  
       jg detected  
   }  
   return FALSE;  
detected:  
   return TRUE;  
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Mac
    Mac
    +關(guān)注

    關(guān)注

    0

    文章

    1083

    瀏覽量

    51140
  • 惡意代碼
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7622
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    888

    瀏覽量

    27813
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是虛擬機(jī)虛擬機(jī)真的那么好用嗎?

    在日新月異的科技世界中,虛擬技術(shù)如同一座橋梁,連接著現(xiàn)實(shí)與數(shù)字的鴻溝,為我們打開(kāi)了全新的計(jì)算維度。虛擬機(jī),這一概念,自其誕生以來(lái),就以其獨(dú)特的魅力和強(qiáng)大的功能,深深地影響了軟件開(kāi)發(fā)、系統(tǒng)測(cè)試和云
    的頭像 發(fā)表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機(jī)</b>?<b class='flag-5'>虛擬機(jī)</b>真的那么好用嗎?

    有關(guān)虛擬機(jī)虛擬技術(shù)的幾點(diǎn)詮注

    虛擬機(jī)虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)虛擬
    發(fā)表于 06-22 18:04 ?36次下載

    虛擬機(jī)虛擬技術(shù)

    虛擬機(jī)虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開(kāi)發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)虛擬
    發(fā)表于 09-07 10:15 ?13次下載

    基于虛擬機(jī)技術(shù)的DSC仿真系統(tǒng)設(shè)計(jì)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法及虛擬機(jī)技術(shù)的其他應(yīng)用。
    發(fā)表于 12-03 17:26 ?26次下載
    基于<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>的DSC仿真系統(tǒng)設(shè)計(jì)

    基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    提出了基于虛擬機(jī)技術(shù)的DCS仿真系統(tǒng)的實(shí)現(xiàn)方式,描述了虛擬控制器的具體實(shí)現(xiàn)方法及虛擬機(jī)技術(shù)的其他應(yīng)用。
    發(fā)表于 01-16 15:04 ?2049次閱讀
    基于<b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b>的DCS仿真系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    虛擬機(jī):QEMU虛擬機(jī)和主機(jī)無(wú)線網(wǎng)絡(luò)通訊設(shè)置

    虛擬機(jī):QEMU虛擬機(jī)和主機(jī)無(wú)線網(wǎng)絡(luò)通訊設(shè)置
    的頭像 發(fā)表于 06-22 10:19 ?5288次閱讀
    <b class='flag-5'>虛擬機(jī)</b>:QEMU<b class='flag-5'>虛擬機(jī)</b>和主機(jī)無(wú)線網(wǎng)絡(luò)通訊設(shè)置

    KVM虛擬機(jī)管理和基本使用

    KVM — 全稱(chēng)是基于內(nèi)核的虛擬機(jī)(Kernel-based Virtual Machine)是一個(gè)開(kāi)源軟件,基于內(nèi)核的虛擬技術(shù),實(shí)際是嵌入系統(tǒng)的一個(gè)虛擬化模塊,通過(guò)優(yōu)化內(nèi)核來(lái)使用
    的頭像 發(fā)表于 02-07 09:20 ?1104次閱讀

    虛擬機(jī)技術(shù)合集1

    惡意代碼編寫(xiě)者經(jīng)常使用虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在
    的頭像 發(fā)表于 02-14 13:45 ?1159次閱讀

    虛擬機(jī)技術(shù)合集3

    惡意代碼編寫(xiě)者經(jīng)常使用虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在
    的頭像 發(fā)表于 02-14 13:45 ?561次閱讀
    <b class='flag-5'>反</b><b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>合集</b>3

    虛擬機(jī)技術(shù)合集4

    惡意代碼編寫(xiě)者經(jīng)常使用虛擬機(jī)技術(shù)逃避分析,這種技術(shù)可以檢測(cè)自己是否運(yùn)行在虛擬機(jī)中。如果惡意代碼探測(cè)到自己在
    的頭像 發(fā)表于 02-14 13:46 ?926次閱讀
    <b class='flag-5'>反</b><b class='flag-5'>虛擬機(jī)</b><b class='flag-5'>技術(shù)</b><b class='flag-5'>合集</b>4

    linux虛擬機(jī)使用教程

    引言:Linux虛擬機(jī)是一種方便且常用的技術(shù),它允許用戶在現(xiàn)有操作系統(tǒng)的基礎(chǔ)上創(chuàng)建和運(yùn)行另一個(gè)獨(dú)立的操作系統(tǒng)。在本篇文章中,我們將提供一份詳盡的教程,幫助你了解如何安裝、配置和使用Linux虛擬機(jī)
    的頭像 發(fā)表于 11-17 10:06 ?1105次閱讀

    Docker與虛擬機(jī)的區(qū)別

    Docker和虛擬機(jī)是兩種不同的虛擬技術(shù),它們?cè)趯?shí)現(xiàn)方式、資源消耗、運(yùn)行性能等方面存在許多差異。本文將會(huì)詳細(xì)介紹它們的區(qū)別。 一、實(shí)現(xiàn)方式 1.1 虛擬機(jī)
    的頭像 發(fā)表于 11-23 09:37 ?6812次閱讀

    怎么安裝linux虛擬機(jī)

    在計(jì)算機(jī)領(lǐng)域,虛擬機(jī)是一種軟件程序,它允許在主操作系統(tǒng)上運(yùn)行多個(gè)虛擬操作系統(tǒng)。Linux虛擬機(jī)在開(kāi)發(fā)、測(cè)試和學(xué)習(xí)等環(huán)境中得到廣泛應(yīng)用。本文將詳細(xì)介紹如何安裝Linux虛擬機(jī),并提供一個(gè)
    的頭像 發(fā)表于 11-23 10:50 ?926次閱讀

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)

    虛擬機(jī)ubuntu怎么聯(lián)網(wǎng)? 虛擬機(jī)(Virtual Machine)是運(yùn)行在物理機(jī)(Host Machine)上的虛擬操作系統(tǒng)環(huán)境。在虛擬機(jī)
    的頭像 發(fā)表于 12-27 16:51 ?794次閱讀

    虛擬機(jī)數(shù)據(jù)恢復(fù)—KVM虛擬機(jī)被誤刪除的數(shù)據(jù)恢復(fù)案例

    虛擬機(jī)數(shù)據(jù)恢復(fù)環(huán)境: Linux操作系統(tǒng)服務(wù)器,EXT4文件系統(tǒng)。服務(wù)器中有數(shù)臺(tái)KVM虛擬機(jī)。 虛擬機(jī)1:主數(shù)據(jù)庫(kù)服務(wù)器 虛擬磁盤(pán):系統(tǒng)盤(pán)(qcow
    的頭像 發(fā)表于 08-07 13:33 ?208次閱讀
    <b class='flag-5'>虛擬機(jī)</b>數(shù)據(jù)恢復(fù)—KVM<b class='flag-5'>虛擬機(jī)</b>被誤刪除的數(shù)據(jù)恢復(fù)案例