2013-10-25 25 views
0

我想找到一種方法來以編程方式檢測到我的程序在虛擬機上運行,​​據我所知,沒有常見的方法來執行此操作。Windows 8任務管理器虛擬化選項

Windows 8任務管理器性能選項卡顯示「Virtaulization」選項,這是什麼意思?當我在虛擬機中運行Windows 8時,它會更改爲虛擬處理器和虛擬機:是的,所以有些Windows 8如何檢測到它在虛擬機內運行,Windows 8如何檢測到它在虛擬機中運行?是否有可能以編程方式獲取這些信息?我在平行和虛擬軟件上都嘗試過,兩者都很好。

+0

在我真正的Windows 8上,任務管理器也顯示「虛擬化:啓用」。我相信這表明處理器支持虛擬化,而不是操作系統在VM中運行。 – Paul

回答

1

你應該在這個有趣的文章Red Pill... or how to detect VMM using (almost) one CPU instruction通過Joanna Rutkowska這曾經是here但現在死了,只能用waybackmachine hereVirtualization: Red Pill or Blue?通過Steven McElwee查看這也曾經是看看here但現在只能查看here

繼承人的代碼:

int swallow_redpill() 
{ 
    unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3"; 
    *((unsigned*)&rpill[3]) = (unsigned)m; 
    ((void(*)())&rpill)(); 
    return (m[5]>0xd0) ? 1 : 0; 
} 

如果沒有如果虛擬機中運行和0應該返回1。


編輯:這可能對現代的CPU返回誤報和apparently better to combine幾個tests在一起,以確保結果是真實的。

1

在VMware上,您可以檢查CD驅動器供應商 - 應該是「VMware」還是「VMware,Inc.」或者類似的東西。

我不知道VMware工作站,但在ESXi上,您的MAC地址通常以「00:50:56」開頭。你也可以利用這個。

看看virt-what。也許你可以將它移植到Windows。

也許How to detect install is running on a VM?可以幫助你。