我想找到一種方法來以編程方式檢測到我的程序在虛擬機上運行,據我所知,沒有常見的方法來執行此操作。Windows 8任務管理器虛擬化選項
Windows 8任務管理器性能選項卡顯示「Virtaulization」選項,這是什麼意思?當我在虛擬機中運行Windows 8時,它會更改爲虛擬處理器和虛擬機:是的,所以有些Windows 8如何檢測到它在虛擬機內運行,Windows 8如何檢測到它在虛擬機中運行?是否有可能以編程方式獲取這些信息?我在平行和虛擬軟件上都嘗試過,兩者都很好。
我想找到一種方法來以編程方式檢測到我的程序在虛擬機上運行,據我所知,沒有常見的方法來執行此操作。Windows 8任務管理器虛擬化選項
Windows 8任務管理器性能選項卡顯示「Virtaulization」選項,這是什麼意思?當我在虛擬機中運行Windows 8時,它會更改爲虛擬處理器和虛擬機:是的,所以有些Windows 8如何檢測到它在虛擬機內運行,Windows 8如何檢測到它在虛擬機中運行?是否有可能以編程方式獲取這些信息?我在平行和虛擬軟件上都嘗試過,兩者都很好。
你應該在這個有趣的文章Red Pill... or how to detect VMM using (almost) one CPU instruction
通過Joanna Rutkowska
這曾經是here但現在死了,只能用waybackmachine here和Virtualization: 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在一起,以確保結果是真實的。
在VMware上,您可以檢查CD驅動器供應商 - 應該是「VMware」還是「VMware,Inc.」或者類似的東西。
我不知道VMware工作站,但在ESXi上,您的MAC地址通常以「00:50:56」開頭。你也可以利用這個。
看看virt-what。也許你可以將它移植到Windows。
在我真正的Windows 8上,任務管理器也顯示「虛擬化:啓用」。我相信這表明處理器支持虛擬化,而不是操作系統在VM中運行。 – Paul