Pregunta

¿Hay un oficial camino para una aplicación para determinar si se está ejecutando en VMWare o Virtual PC (o lo que Microsoft llama ahora)? El código que he visto es por lo general un truco que se aprovechó de algunos efectos secundarios de comportamiento extraño en una versión específica de VMWare o Virtual PC.

Lo ideal código de Delphi, pero si se puede enlazar a una explicación oficial, entonces estoy seguro de que puedo convertirlo.

¿Fue útil?

Solución

Me escribió una serie de artículos del año pasado sobre este tema, con el código fuente. VMware y la detección del vino son aquí . Virtual PC es aquí . Los tres de estos tienen detección bastante férrea porque no están documentadas devoluciones de llamada al hipervisor (en el caso del vino, una extensión a un DLL estándar). Puse un detector de VirtualBox no probado (no tenerlo instalado para probar con) en la sección de comentarios. Paralelismos podrían ser detectables mediante una devolución de llamada también pero no tenerlo instalado. El enlace para la documentación (que es pobre ya que es de un investigador de seguridad se centra en las hazañas), pero situado aquí si lo tiene instalado y está interesado. También hay un PPT aquí que tiene alguna información sobre la detección de recinto de seguridad, Bochs, y Xen. No es una gran cantidad de código en él, pero puede ser que le dará un punto de partida si usted tiene que detectar aquellos.

Otros consejos

Proyecto de código muestra una forma de detectar si el programa se ejecuta en una máquina virtual que va en muchos detalles sobre cómo llevar a cabo para darle una buena comprensión

Creo que el mejor enfoque para esto es comprobar los perfiles de hardware. hardware virtualizado por lo general utiliza parte del nombre de las empresas. Si marca la descripción placa base, mientras que en Virtual PC, se dará cuenta de que está hecho por "Microsoft Corporation". Del mismo modo, en VMWare, su adaptador Ethernet será el prefijo vmnet.

Esta hilo en los foros SysInternals tiene un par de respuestas (en Delphi, por supuesto), que incluye una sola función IsVM. He probado en XP y Win2003 Alojado en tanto XP y Vista en VMWare con buenos resultados.

Hay una manera de WMI publicado aquí: http://blogs.msdn.com/virtual_pc_guy/archive/ 2005/10/27 / 484479.aspx

He comprobado con minuciosidad una imagen XP se ejecuta en Virtual PC, y el valor que están probando para sigue siendo el mismo. No voy a garantizar lo que la otra vuelta de máquinas virtuales aquí, aunque ...

He realidad tiene un programa de Delphi que escribí hace un par de años para obtener una lista de y cambiar la impresora predeterminada mediante WMI, sin requerir componentes 3 ª parte o nada por el estilo. En caso de que no está acostumbrado a trabajar con WMI de Delphi, le puedo enviar una copia por lo que tiene algo para trabajar fuera (que no es compatible con Unicode necesariamente, sin embargo, pero no debería ser demasiado difícil para mí para actualizarlo si es necesario).

He tenido buena suerte con sólo mirar a la dirección MAC como todos los fabricantes se les da un bloque y las 3 primeras partes son exclusivos de ellos.

//look at the MAC address and determine if it's a Virtual Machine
$temp = preg_split("/\s+/",exec("/sbin/ifconfig -a eth0 2>&1 | /bin/grep HWaddr"), -1, PREG_SPLIT_NO_EMPTY);
//Virtual Box MACs all start with '08:00:27:xx:xx:xx'
if (strpos($temp[4], '08:00:27') !== false) $_SESSION['DEVELOPMENT'] = true;  

Para determinar la máquina es física o VM

dmidecode | egrep -i 'manufacturer|product'

Si el comando no se encuentra dmidecode instalar el respectivo rpm.

Esto se probó bajo EXSi, VMware y HyperV máquinas.

Si desea detectar general, la presencia de cualquier tipo de virtualización, que son mejores características de rendimiento análisis. Tomar algo que es significativamente más lento en la virtualización (como MMU pesada carga de trabajo como un tenedor-bomba) y el tiempo en contra de una aplicación de espacio de usuario depende de la CPU normal. A partir de la relación se puede deducir fácilmente.

El más fácil en términos de esfuerzo si sólo se preocupan por cierto VMM es la búsqueda de sus dispositivos PCI en hardware es decir VMware:

00: 07.3 Puente: Intel Corporation 82371AB / EB / MB PIIX4 ACPI (rev 08)     Subsistema: VMware Virtual Machine Inc chipset

15ad: 1976

El valor vendedor es '15ad'

También hay puertos de puerta trasera específicas que funcionan en diferentes VMM en varias versiones. SIDT truco es bueno también, pero lo que si un VMM no está en la lista que su código está comprobando?

dmidecode -s system-product-name

Probado en VirtualBox, resultado:

Virtualbox
scroll top