1 BOOL CInsideVmDlg::IsInsideVm() 2 { 3 bool rc = true; 4 5 __try 6 { 7 __asm 8 { 9 push edx10 push ecx11 push ebx12 13 mov eax, 'VMXh'14 mov ebx, 0 // 将ebx设置为非幻数’VMXH’的其它值15 mov ecx, 10 // 指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小16 mov edx, 'VX' // 端口号17 in eax, dx // 从端口dx读取VMware版本到eax18 //若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中19 cmp ebx, 'VMXh' // 判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中20 setz [rc] // 设置返回值21 22 pop ebx23 pop ecx24 pop edx25 }26 }27 __except(EXCEPTION_EXECUTE_HANDLER) //如果未处于VMware中,则触发此异常28 {29 rc = false;30 }31 32 return rc;33 }
.......................
等待继续测试!!
测试成功,只反vm,不反vb