來自:http://www.codeproject.com/kb/system/vmdetect.aspx
分析病毒的時候人們通常在vmware等虛擬機器下執行,以檢視病毒的執行路徑或者提取特徵碼。但是近年來出現許多抗虛擬機器檢測的病毒。也就是說,在虛擬機器下執行的時候,病毒會隱匿其惡意行為,使人們無法檢測得到。
上面那篇文章是codeproject的鏈結。它詳細說明了程式如何檢測自身是否在虛擬機器下並且提供了源**。我用我的windows xp測試通過。
其實檢測vmware的原理很簡單。vmware存在乙個隱藏通道,這個通道用於虛擬機器和實體機的資訊交流。文中的**檢測這個通道是否存在,並用try...catch來得到結果——如果try和catch之間的那段**不出現異常,則表示在虛擬機器裡。如果出現異常,則表示在虛擬機器外。(既沒有虛擬機器)
對抗這種抗虛擬機器技術的方法,我看過一篇**《efficient detection of split personalities in malware》。我看了一遍,可惜我還沒徹底看懂,以後再補充。
作為測試,可以新建乙個vc++工程並且把下面**複製貼上:
#include
#include
bool isinsidevmware()
}__except(exception_execute_handler)
return rc;
}int main()
判斷程式是否執行在虛擬機器裡 收藏
判讀程式是否執行在虛擬機器裡 include include isinsidevpc s exception filter dword forceinline isinsidevpc exceptionfilter lpexception pointers ep high level languag...
如何判斷當前程式是否執行在虛擬機器內
最近寫程式,碰到要檢測程式是否執行在虛擬機器內的問題。在網上找了一下,找到下面兩個函式,可以檢測程式是否執行在virtual machine中,支援vmware 和virtual pc檢測.主要的原理,都是利用virtual machine往往支援一些真實pc不支援的指令.isinsidevpc s...
如何判斷當前程式是否執行在虛擬機器內
最近寫程式,碰到要檢測程式是否執行在虛擬機器內的問題。在網上找了一下,找到下面兩個函式,可以檢測程式是否執行在virtual machine中,支援vmware 和virtual pc檢測.主要的原理,都是利用virtual machine往往支援一些真實pc不支援的指令.isinsidevpc s...