40 votes

Déterminer lors de l'exécution dans une machine virtuelle

Existe-t-il un moyen officiel pour une application de déterminer si elle s'exécute dans VMWare ou Virtual PC (ou quel que soit le nom de Microsoft maintenant)? Le code que j'ai vu est généralement un hack qui a profité d'un effet secondaire de comportement étrange dans une version spécifique de VMWare ou Virtual PC.

Idéalement, du code Delphi, mais si vous pouvez créer un lien vers une explication officielle, je suis sûr que je peux le convertir.

36voto

Marshall Fryman Points 784

J'ai écrit une série d'articles l'année dernière sur ce, avec le code source. VMware et le Vin de détection sont ici. Virtual PC est ici. Tous les trois ont assez de fer-vêtus de détection, car il y a documenté des rappels à l'hyperviseur (dans le cas du Vin, d'une extension à une DLL standard). J'ai mis en place une non testé VirtualBox détecteur (ne l'avez pas installé pour le test) dans la section commentaire. Des parallèles peuvent être détectable à l'aide d'un rappel aussi mais je ne l'ai pas installé. Le lien pour la documentation (qui est pauvre, puisque c'est à partir d'un chercheur en sécurité en se concentrant sur les exploits) mais trouve ici si vous l'avez installé et que vous êtes intéressé. Il y a aussi un PPT ici qui dispose de certaines informations sur la détection de bac à sable, de Fonctionnement, et Xen. Pas beaucoup de code, mais il peut vous donner un point de départ si vous avez de détecter ceux.

5voto

TStamper Points 17163

Code Project montre un moyen de détecter si votre programme s'exécute à l'intérieur d'une machine virtuelle qui explique en détail comment l'accomplir pour donner une bonne compréhension

2voto

John T Points 14067

Je pense que la meilleure approche est de vérifier les profils matériels. Le matériel virtualisé utilise généralement une partie du nom de l'entreprise. Si vous vérifiez la description de la carte mère dans Virtual PC, vous remarquerez qu'elle est faite par "Microsoft Corporation". De même dans VMWare, votre adaptateur Ethernet sera préfixé avec VMNet.

2voto

Bruce McGee Points 12225

Ce fil sur les forums SysInternals a quelques réponses (dans Delphi, bien sûr), y compris une seule fonction IsVM. J'ai testé sur XP et Win2003 hébergé sur XP et Vista dans VMWare avec de bons résultats.

1voto

Michael Madsen Points 30610

Il y a un WMI façon posté ici: http://blogs.msdn.com/virtual_pc_guy/archive/2005/10/27/484479.aspx

J'ai vérifié dans une XP de l'image en cours d'exécution sur l'ordinateur Virtuel, et la valeur de test est toujours le même. Je ne vais pas garantir que d'autres VMs revenir ici, mais...

En fait, j'ai eu un Delphi programme que j'ai écrit il y a quelques années pour obtenir une liste et de modifier la valeur par défaut de l'imprimante à l'aide de WMI, sans exiger la 3e partie des composants ou quelque chose comme ça. Dans le cas où vous n'êtes pas habitué à travailler avec WMI à partir de Delphi, je peux vous envoyer une copie si vous avez quelque chose à travailler (ce n'est pas nécessairement Unicode-compatible, si, mais il ne devrait pas être trop dur pour moi de le mettre à jour si besoin).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X