¿se puede averiguar si estamos en una maquina virtual?

24/10/2005 - 23:03 por jorge | Informe spam
¿hay alguna manera de que algun programa pueda averiguar de alguna forma si
se está ejecutando en una maquina real, o en una maquina virtual como vmware
o Virtual PC?

P.D.:Tengo conocimientos de programacion e incluso hice algun pinito con
ensamblador.

jorge
 

Leer las respuestas

#1 JM Tella Llop [MVP Windows]
24/10/2005 - 23:13 | Informe spam
Se puede perfectamente por el software llegar a saber esto.

He visto varios trucos de programacion pero que me parecen chapuceros:
realizar un programa en C:, situar un manejador de excpeciones y ejeuctar
operaciones no validas -y privilegiadas- analizando posteriormente el codigo
atrapado en el manejador. Esto codigos, en ciertas instrucciones tan simples
como las IN / OUT normalmente reciben codigos de error diferentes a los que
realmente se darian en un sistema operativo en una maquina real.

La manera mas elegante por parte del software de hacerlo, sería si
tuviesemos una instruccion no privilegiada (es decir, de las que se pueden
ejecutar en modo user -ring3- y que por tanto no disparen ningun manejador
de excepcion) y que esta nos devolviese datos que fuesen diferentes en una
maquina real de una maquina virtual. Aunque no se si puede haber mas, al
menos la instruccion SIDT cumple las premisas anteriores. Esta instruccion
nos devuelve el contenido del registro de la 'interrupt descriptor table'
(IDTR).

Como solamente hay un registro IDTR y en el caso de una maquina virtual, hay
al menos dos sistemas operativos en ejecucion concurrentemente (el host y el
invitado) la maquina virtual necesita reasignar el IDTR del sistema
operativo invitado para no entrar en conflictos con la maquina host. En este
caso, cuando nuestro programa de prueba ejecute una instruccion SIDT, la
cual, al no ser privilegiada no provocará una excepcion (que atrape la
maquina virtual y por tanto pueda falsearnos el resultado dandonos el
original), y por tanto recibiremos un valor que al analizarlo podremos
comprobar que no es el esperado en una maquina "real".

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase,
y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"jorge" wrote in message
news:
¿hay alguna manera de que algun programa pueda averiguar de alguna forma
si se está ejecutando en una maquina real, o en una maquina virtual como
vmware o Virtual PC?

P.D.:Tengo conocimientos de programacion e incluso hice algun pinito con
ensamblador.

jorge



Preguntas similares