在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

反虛擬機技術合集2

jf_78858299 ? 來源:看雪學苑 ? 作者: houjingyi ? 2023-02-14 13:45 ? 次閱讀

4.根據特定的文件夾或文件信息

通過查找磁盤中是否存在特定的文件夾或文件,判斷當前是否在虛擬機中。VMware虛擬機中通常會有路徑C:\\Program Files\\VMware\\VMware Tools\\;VirtualBox 虛擬機中通常會有路徑 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.根據特定注冊表信息

通過讀取主機具有虛擬機特性的注冊表位置來判斷是否處于虛擬機環境中。針對VMware可以判斷注冊表項HKEY_CLASSES_ROOT\\Applications\\VMwareHostOpen.exe;針對VirtualBox可以判斷注冊表項HKEY_LOCAL_MACHINE\\SOFTWARE\\Oracle\\VirtualBox Guest Additions。當然,注冊表中能被檢測出的位置很多,這里只是舉個例子。

圖片

圖片

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.根據特定服務名

通過獲取主機當前具有VMware特性的服務信息,判斷當前主機是否為虛擬機。在VMware中通常會存在VMware物理磁盤助手服務和VMware Tools服務等;在VirtualBox中通常會存在VirtualBox Guest Additions Service服務等。

圖片

圖片

BOOL CheckVMWare()  
{  
   int menu = 0;    
   //打開系統服務控制器    
   SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);  
   if(SCMan == NULL)    
   {  
       cout << GetLastError() << endl;  
       printf("OpenSCManager Eorror/n");    
       return -1;    
   }    
   //保存系統服務的結構  
   LPENUM_SERVICE_STATUSA service_status;    
   DWORD cbBytesNeeded = NULL;    
   DWORD ServicesReturned = NULL;    
   DWORD ResumeHandle = NULL;    
   service_status = (LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);    
   //獲取系統服務的簡單信息    
   bool ESS = EnumServicesStatusA(SCMan, //系統服務句柄    
       SERVICE_WIN32, //服務的類型    
       SERVICE_STATE_ALL,  //服務的狀態    
       (LPENUM_SERVICE_STATUSA)service_status,  //輸出參數,系統服務的結構    
       1024 * 64,  //結構的大小    
       &cbBytesNeeded, //輸出參數,接收返回所需的服務    
       &ServicesReturned, //輸出參數,接收返回服務的數量    
       &ResumeHandle); //輸入輸出參數,第一次調用必須為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 物理磁盤助手服務")!=NULL)  
       {  
           return TRUE;  
       }  
   }    
   //關閉服務管理器的句柄  
   CloseServiceHandle(SCMan);  
   return FALSE;  
}
BOOL CheckVirtualPC()  
{  
   int menu = 0;    
   //打開系統服務控制器    
   SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);  
   if(SCMan == NULL)    
   {  
       cout << GetLastError() << endl;  
       printf("OpenSCManager Eorror/n");    
       return -1;    
   }    
   //保存系統服務的結構  
   LPENUM_SERVICE_STATUSA service_status;    
   DWORD cbBytesNeeded = NULL;    
   DWORD ServicesReturned = NULL;    
   DWORD ResumeHandle = NULL;    
   service_status = (LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);    
   //獲取系統服務的簡單信息    
   bool ESS = EnumServicesStatusA(SCMan, //系統服務句柄    
       SERVICE_WIN32, //服務的類型    
       SERVICE_STATE_ALL,  //服務的狀態    
       (LPENUM_SERVICE_STATUSA)service_status,  //輸出參數,系統服務的結構    
       1024 * 64,  //結構的大小    
       &cbBytesNeeded, //輸出參數,接收返回所需的服務    
       &ServicesReturned, //輸出參數,接收返回服務的數量    
       &ResumeHandle); //輸入輸出參數,第一次調用必須為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;  
       }  
   }    
   //關閉服務管理器的句柄  
   CloseServiceHandle(SCMan);  
   return FALSE;  
}
BOOL CheckVirtualBox()  
{  
   int menu = 0;    
   //打開系統服務控制器    
   SC_HANDLE SCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);  
   if(SCMan == NULL)    
   {  
       cout << GetLastError() << endl;  
       printf("OpenSCManager Eorror/n");    
       return -1;    
   }    
   //保存系統服務的結構  
   LPENUM_SERVICE_STATUSA service_status;    
   DWORD cbBytesNeeded = NULL;    
   DWORD ServicesReturned = NULL;    
   DWORD ResumeHandle = NULL;    
   service_status = (LPENUM_SERVICE_STATUSA)LocalAlloc(LPTR, 1024 * 64);    
   //獲取系統服務的簡單信息    
   bool ESS = EnumServicesStatusA(SCMan, //系統服務句柄    
       SERVICE_WIN32, //服務的類型    
       SERVICE_STATE_ALL,  //服務的狀態    
       (LPENUM_SERVICE_STATUSA)service_status,  //輸出參數,系統服務的結構    
       1024 * 64,  //結構的大小    
       &cbBytesNeeded, //輸出參數,接收返回所需的服務    
       &ServicesReturned, //輸出參數,接收返回服務的數量    
       &ResumeHandle); //輸入輸出參數,第一次調用必須為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;  
       }  
   }    
   //關閉服務管理器的句柄  
   CloseServiceHandle(SCMan);  
   return FALSE;  
}

7.根據時間差

由于在虛擬機中,代碼的運行速度通常不如真實主機。所以惡意代碼通過運行一段特定的代碼來比較這段代碼在虛擬機和真實主機之中的相對運行時間,以此來判斷是否處于虛擬機之中。

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;  
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Mac
    Mac
    +關注

    關注

    0

    文章

    1117

    瀏覽量

    52659
  • 惡意代碼
    +關注

    關注

    0

    文章

    12

    瀏覽量

    7724
  • 虛擬機
    +關注

    關注

    1

    文章

    962

    瀏覽量

    29068
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    什么是虛擬機虛擬機真的那么好用嗎?

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

    有關虛擬機虛擬技術的幾點詮注

    虛擬機虛擬技術給計算機應用注入了新的研究與開發點,同時也存在諸多不利因素。本文綜述了虛擬機虛擬
    發表于 06-22 18:04 ?36次下載

    虛擬機虛擬技術

    虛擬機虛擬技術給計算機應用注入了新的研究與開發點,同時也存在諸多不利因素。本文綜述了虛擬機虛擬
    發表于 09-07 10:15 ?13次下載

    基于虛擬機技術的DSC仿真系統設計

    提出了基于虛擬機技術的DCS仿真系統的實現方式,描述了虛擬控制器的具體實現方法及虛擬機技術的其他應用。
    發表于 12-03 17:26 ?27次下載
    基于<b class='flag-5'>虛擬機</b><b class='flag-5'>技術</b>的DSC仿真系統設計

    基于虛擬機技術的DCS仿真系統設計與實現

    提出了基于虛擬機技術的DCS仿真系統的實現方式,描述了虛擬控制器的具體實現方法及虛擬機技術的其他應用。
    發表于 01-16 15:04 ?2384次閱讀
    基于<b class='flag-5'>虛擬機</b><b class='flag-5'>技術</b>的DCS仿真系統設計與實現

    虛擬機:QEMU虛擬機和主機無線網絡通訊設置

    虛擬機:QEMU虛擬機和主機無線網絡通訊設置
    的頭像 發表于 06-22 10:19 ?5728次閱讀
    <b class='flag-5'>虛擬機</b>:QEMU<b class='flag-5'>虛擬機</b>和主機無線網絡通訊設置

    KVM虛擬機管理和基本使用

    KVM — 全稱是基于內核的虛擬機(Kernel-based Virtual Machine)是一個開源軟件,基于內核的虛擬技術,實際是嵌入系統的一個虛擬化模塊,通過優化內核來使用
    的頭像 發表于 02-07 09:20 ?1619次閱讀

    虛擬機技術合集1

    惡意代碼編寫者經常使用虛擬機技術逃避分析,這種技術可以檢測自己是否運行在虛擬機中。如果惡意代碼探測到自己在
    的頭像 發表于 02-14 13:45 ?1484次閱讀

    虛擬機技術合集3

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

    虛擬機技術合集4

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

    linux虛擬機使用教程

    引言:Linux虛擬機是一種方便且常用的技術,它允許用戶在現有操作系統的基礎上創建和運行另一個獨立的操作系統。在本篇文章中,我們將提供一份詳盡的教程,幫助你了解如何安裝、配置和使用Linux虛擬機
    的頭像 發表于 11-17 10:06 ?2046次閱讀

    Docker與虛擬機的區別

    Docker和虛擬機是兩種不同的虛擬技術,它們在實現方式、資源消耗、運行性能等方面存在許多差異。本文將會詳細介紹它們的區別。 一、實現方式 1.1 虛擬機
    的頭像 發表于 11-23 09:37 ?1.1w次閱讀

    怎么安裝linux虛擬機

    在計算機領域,虛擬機是一種軟件程序,它允許在主操作系統上運行多個虛擬操作系統。Linux虛擬機在開發、測試和學習等環境中得到廣泛應用。本文將詳細介紹如何安裝Linux虛擬機,并提供一個
    的頭像 發表于 11-23 10:50 ?1384次閱讀

    虛擬機ubuntu怎么聯網

    虛擬機ubuntu怎么聯網? 虛擬機(Virtual Machine)是運行在物理(Host Machine)上的虛擬操作系統環境。在虛擬機
    的頭像 發表于 12-27 16:51 ?1335次閱讀

    虛擬機數據恢復—KVM虛擬機被誤刪除的數據恢復案例

    虛擬機數據恢復環境: Linux操作系統服務器,EXT4文件系統。服務器中有數臺KVM虛擬機虛擬機1:主數據庫服務器 虛擬磁盤:系統盤(qcow
    的頭像 發表于 08-07 13:33 ?721次閱讀
    <b class='flag-5'>虛擬機</b>數據恢復—KVM<b class='flag-5'>虛擬機</b>被誤刪除的數據恢復案例
    主站蜘蛛池模板: 情趣店上班h系列小说 | 久久久久九九精品影院 | 国产精品久久久久影视不卡 | 在线免费成人 | 99热久久精品免费精品 | 久久奇米 | 欧美成人午夜精品免费福利 | 视频一本大道香蕉久在线播放 | 热久热 | 欧美色视频日本片高清在线观看 | 欧美成人免费大片888 | 亚洲高清一区二区三区 | 亚洲高清国产拍精品影院 | 欧美性色黄大片四虎影视 | 欧美adc影院 | 欧美高清在线观看视频 | 色中射| 天堂在线资源最新版 | 中国特黄一级片 | 成年免费大片黄在线观看免费 | 亚洲热热久久九九精品 | 天天躁狠狠躁狠狠躁夜夜躁 | 老色批午夜免费视频网站 | 成人在线精品 | 一区二区三区福利 | 五月天狠狠 | 伊人天天干 | 亚洲欧美一区二区三区四区 | 欧美一卡2卡三卡4卡5卡免费观看 | 高清视频 一区二区三区四区 | 曰本女人色黄网站 | 免费一日本一级裸片在线观看 | 免费在线公开视频 | 黄色大秀 | 看看一级毛片 | 婷婷 色天使| 视频色版| 小雪被老外黑人撑破了视频 | 黄 色 片免费观看 | 黄色在线网 | 亚洲第8页 |