beckham79 发表于 2015-4-10 08:16:08

特权指令检测虚拟机

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]
查看完整版本: 特权指令检测虚拟机