Windows de 64 bits de detección de VMware
Estoy tratando de desarrollar una aplicación que detecte si el programa se está ejecutando dentro de una máquina virtual.
Para Windows de 32 bits, ya hay métodos explicados en el siguiente enlace:http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
Estoy tratando de adaptar el código relacionado con la detección de PC virtual y VMware en un sistema operativo Windows de 64 bits. Para VMware, el código puede detectar con éxito en un sistema operativo Windows XP de 64 bits. Pero el programa se bloquea cuando lo ejecuto en un sistema nativo (sistema operativo Windows 7 de 64 bits).
Pongo el código en un archivo .asm y defino el paso de compilación personalizado con el archivo ml64.exe. El código asm para Windows de 64 bits es:
<code>IsInsideVM proc push rdx push rcx push rbx mov rax, 'VMXh' mov rbx, 0 ; any value but not the MAGIC VALUE mov rcx, 10 ; get VMWare version mov rdx, 'VX' ; port number in rax, dx ; read port ; on return EAX returns the VERSION cmp rbx, 'VMXh'; is it a reply from VMWare? setz al ; set return value movzx rax,al pop rbx pop rcx pop rdx ret IsInsideVM endp </code>
Yo llamo esta parte en un archivo cpp como:
<code>__try { returnValue = IsInsideVM(); } __except(1) { returnValue = false; } </code>
Gracias por adelantado.