Domanda

C'è un ufficiale modo per un'applicazione per determinare se è in esecuzione in VMWare o Virtual PC (o qualsiasi altra cosa Microsoft sta chiamando ora)? Il codice che ho visto è di solito un hack che ha approfittato di qualche effetto collaterale del comportamento strano in una versione specifica di VMWare o Virtual PC.

Codice Idealmente Delphi, ma se si può collegare a una spiegazione ufficiale allora sono sicuro che posso convertirlo.

È stato utile?

Soluzione

ho scritto una serie di articoli l'anno scorso su questo, con il codice sorgente. VMware e il rilevamento del vino sono qui . Virtual PC è qui . Tutti e tre di questi hanno il rilevamento ferrea abbastanza perché ci sono documentati callback per l'hypervisor (nel caso del vino, un interno a un DLL standard). Ho messo su un rilevatore di VirtualBox non testati (non averlo installato per testare con) nella sezione commenti. Parallels potrebbero essere rilevabili utilizzando una richiamata anche ma non averlo installato. Il link per la documentazione (che è povero perché è da un ricercatore di sicurezza concentrandosi su exploit), ma trova qui se lo avete installato e sono interessati. C'è anche un PPT qui che ha alcune informazioni sul rilevamento Sandbox, Bochs, e Xen. Non un sacco di codice in esso, ma potrebbe dare un punto di partenza se si deve rilevare quelli.

Altri suggerimenti

Codice progetto mostra un modo per rilevare se il programma è in esecuzione all'interno di una macchina virtuale che va in molti dettagli su come realizzarlo per dare una buona comprensione

Credo che l'approccio migliore per questo è di controllare i profili hardware. hardware virtualizzata di solito usa parte del nome società. Se si seleziona la descrizione della scheda madre, mentre in Virtual PC, si noterà che è fatta da "Microsoft Corporation". Allo stesso modo in VMWare, l'adattatore ethernet sarà preceduto vmnet.

Questo thread sul forum di Sysinternals ha un paio di risposte (in Delphi, ovviamente), tra cui una singola funzione IsVM. Ho provato su XP e Win2003 ospitato sia su XP e Vista in VMWare con buoni risultati.

C'è un modo WMI postato qui: http://blogs.msdn.com/virtual_pc_guy/archive/ 2005/10 / 27 / 484479.aspx

Ho ricontrollato un'immagine XP in esecuzione su Virtual PC, e il valore che stanno testando per è sempre la stessa. Non voglio garantire quale altro ritorno VM qui, però ...

In realtà ho avuto un programma di Delphi ho scritto un paio di anni fa per ottenere un elenco di e cambiare la stampante predefinita utilizzando WMI, senza la necessità di componenti 3rd party o qualcosa di simile. Nel caso in cui non si è abituati a lavorare con WMI da Delphi, posso inviare una copia in modo da avere qualcosa per lavorare fuori (non è compatibile Unicode necessariamente, però, ma non dovrebbe essere troppo difficile per me per aggiornarlo in caso di necessità).

Ho avuto buona fortuna con solo guardando l'indirizzo MAC di tutti i costruttori sono date un blocco e le prime 3 parti sono unici per loro.

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

Per determinare la macchina è fisica o VM

dmidecode | egrep -i 'manufacturer|product'

Se il comando non trovato dmidecode installare il rispettivo numero di giri.

Questa è testato sotto EXSI, VMware e HyperV macchine.

Se si desidera rilevare in generale la presenza di qualsiasi tipo di virtualizzazione, siete migliori caratteristiche prestazionali analisi. Prendere qualcosa che è molto più lento nella virtualizzazione (come MMU carico di lavoro pesante come un fork-bomba a) e il tempo contro una normale CPU bound spazio utente app. Dal rapporto si può facilmente dire.

più facile in termini di sforzo, se si preoccupano solo alcune VMM è quello di cercare i loro vale a dire i dispositivi PCI tipo hardware VMware:

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

15ad: 1976

Il valore venditore è '15ad'

Ci sono anche specifiche porte backdoor che funzionano su vari VMM in varie versioni. SIDT trucco è troppo buono, ma cosa succede se un VMM non è sulla lista che il suo codice sta controllando?

dmidecode -s system-product-name

Testato su VirtualBox, risultato:

Virtualbox
scroll top