特权指令检测虚拟机
bool IsInsideVMWare(){
bool rc = true;
__try
{
__asm
{
push edx
push ecx
push ebx
mov eax, 'VMXh'
mov ebx, 0// 将ebx设置为非幻数’VMXH’的其它值
mov ecx, 10 // 指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小
mov edx, 'VX' // 端口号
in eax, dx // 从端口dx读取VMware版本到eax
//若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中
cmp ebx, 'VMXh' // 判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中
setz // 设置返回值
pop ebx
pop ecx
pop edx
}
}
__except(EXCEPTION_EXECUTE_HANDLER)//如果未处于VMware中,则触发此异常
{
rc = false;
}
return rc;
}
下面是主函数
int main(void)
{
if(IsInsideVMWare())
{
printf("it is in vmm \r\n");
}
else
{
printf("it is not in vmm \r\n");
}
return 0;
}
感谢泉哥的分享。
原文:http://bbs.pediy.com/showthread.php?t=119969
页:
[1]