1 BOOL CInsideVmDlg::IsInsideVm() 2 { 3 bool rc = true; 4 5 __try 6 { 7 __asm 8 { 9 push edx 10 push ecx 11 push ebx 12 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版本到eax 18 //若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中 19 cmp ebx, 'VMXh' // 判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中 20 setz [rc] // 设置返回值 21 22 pop ebx 23 pop ecx 24 pop edx 25 } 26 } 27 __except(EXCEPTION_EXECUTE_HANDLER) //如果未处于VMware中,则触发此异常 28 { 29 rc = false; 30 } 31 32 return rc; 33 }
.......................
等待继续测试!!
https://files.cnblogs.com/tk091/InsideVm.zip
测试成功,只反vm,不反vb