Frage

Gibt es eine offizielle Art und Weise für eine Anwendung, um festzustellen, ob es in VMWare läuft oder Virtual PC (oder was auch immer Microsoft ist es jetzt nennen)? Der Code, den ich gesehen habe, ist in der Regel ein Hack, den Vorteil von irgendein seltsamen Verhaltensnebenwirkung in einer bestimmten Version von VMWare oder Virtual PC hat.

Im Idealfall Delphi-Code, aber wenn Sie zu einer offiziellen Erklärung verknüpfen können dann bin ich sicher, dass ich es umwandeln kann.

War es hilfreich?

Lösung

Ich schrieb eine Reihe von Artikeln im vergangenen Jahr auf diesem, mit Quellcode. VMware und Weinerkennung sind hier . Virtual PC ist hier . Alle drei von ihnen haben ziemlich eiserne Erkennung, da Rückrufe an den Hypervisor (im Fall von Wein, eine Erweiterung zu einer Standard-DLL) dokumentiert sind. Ich habe einen ungetesteten VirtualBox Detektor auf (nicht hat es installiert mit testen) im Kommentarbereich. Parallels könnte nachweisbar sein auch einen Rückruf verwenden, aber ich habe nicht installiert ist. Der Link für die Dokumentation (die schlecht ist, da es von einem Sicherheitsforscher ist auf Exploits konzentriert), sondern sie hier wenn Sie es installiert und sind interessiert haben. Es gibt auch eine PPT hier dass einige Informationen hat auf der Erfassung Sandbox, Bochs und Xen. Nicht viel Code in es, aber es könnte Ihnen einen Ausgangspunkt, wenn Sie diejenigen erkennen müssen.

Andere Tipps

Code Project zeigt einen Weg href="http://www.codeproject.com/KB/system/VmDetect.aspx" zum erkennen, wenn Ihr Programm in einer virtuellen Maschine ausgeführt das geht in viel Detail, wie man es zu erreichen, ein gutes Verständnis geben

Ich denke, der beste Ansatz dazu ist die Hardware-Profile zu überprüfen. Virtualisierte Hardware in der Regel nutzt einen Teil des Firmennamen. Wenn Sie die Motherboard Beschreibung überprüfen, während in Virtual PC, werden Sie feststellen, es von „Microsoft Corporation“ hergestellt wird. Ebenso in VMWare, wird Ihr Ethernet-Adapter mit VMnet vorangestellt werden.

Dieser Thread auf den SysInternals Foren hat ein paar Antworten (in Delphi, natürlich), einschließlich einer einzigen Isvm Funktion. Ich habe auf XP getestet und Win2003 gehostet auf XP und Vista in VMWare mit guten Ergebnissen.

Es gibt einen WMI Weg hier gepostet: http://blogs.msdn.com/virtual_pc_guy/archive/ 2005/10 / 27 / 484479.aspx

Ich habe doppelt in einem XP-Bild überprüft auf Virtual PC ausgeführt wird, und der Wert, den sie für die Prüfung sind, ist immer noch das gleiche. Ich will nicht garantieren, was andere VMs Rückkehr hier, obwohl ...

Ich habe tatsächlich ein Delphi Programm, das ich vor ein paar Jahren schrieb eine Liste und ändern Sie den Standarddrucker mit WMI zu erhalten, ohne 3rd-Party-Komponenten oder ähnlichem erforderlich ist. Falls Sie mit WMI von Delphi nicht gewohnt sind zu arbeiten, kann ich Ihnen eine Kopie schicken, damit Sie etwas abarbeiten (es allerdings nicht unbedingt Unicode-kompatibel, ist, aber es sollte nicht zu hart für mich, es zu aktualisieren wenn nötig).

Ich benutzte die Redpill Methode (Delphi übersetzt, aber den Code isn‘ t so schwer zu verstehen), die recht gut funktioniert. Ich habe auch ein paar zusätzliche Kontrollen unter Verwendung von WMI ruft Dinge wie die Netzwerkadapter Herstellernamen und Urheberrechte zu bekommen, aber das war für bestimmte Versionen von Virtual PC zu erfassen.

Mein Verständnis der Redpill Methode ist, dass es alle virtuellen Maschinen auf der Art der Basis arbeiten und erkennen soll, wie es funktioniert. Es besteht die Möglichkeit, dass auch mit Fehlmeldungen erzeugt werden könnte, wie das neue Windows in Windows-Feature von Windows 7 konfiguriert werden kann ausgewählte Programme in einer Kopie von Windows XP nahtlos in Windows 7 ausgeführt werden.

Ich habe viel Glück gehabt mit gerade an der MAC-Adresse suchen, wie alle Hersteller angegeben sind, einen Block und die ersten drei Teile, um sie einzigartig.

//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;  

, um die Maschine zu bestimmen, physikalische oder VM

dmidecode | egrep -i 'manufacturer|product'

Wenn der dmidecode Befehl nicht gefunden die entsprechenden rpm installieren.

Dies wird unter EXSI, VMware- und Hyper-V-Maschinen getestet.

Wenn Sie in der Regel das Vorhandensein von jeder Art von Virtualisierung zu erkennen, sind Sie die besten Performance-Analyseeigenschaften. Nehmen Sie etwas, das und die Zeit es gegen ein normales CPU gebunden User-Space App deutlich langsamer in der Virtualisierung (wie eine Gabel-Bombe wie MMU hohe Arbeitsbelastung) ist. Aus dem Verhältnis kann man leicht sagen.

Am einfachsten in Bezug auf Aufwand, wenn Sie nur über bestimmte VMM Pflege ist zu suchen, ihre hardware- heißt VMware PCI-Geräte:

00: 07.3 Bridge: Intel Corporation 82371AB / EB / MB PIIX4 ACPI (rev 08)     Subsystem: VMware Inc Virtual Machine Chipsatz

15ad: 1976

Der Verkäufer Wert '15ad'

Es gibt auch spezifische Backdoor-Ports, die in verschiedenen Versionen in verschiedenen VMM arbeiten. SIDT Trick ist auch gut, aber was ist, wenn ein VMM ist nicht auf der Liste, die sein Code überprüft?

dmidecode -s system-product-name

Getestet auf VirtualBox, Ergebnis:

Virtualbox
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top