Riconoscere macchina virtuale

di Anonimizzato9942 il
16 risposte
Ciao a tutti,

vorrei impedire che un mio software venga eseguito all' interno di una macchina virtuale tipo VMWare o HyperV. Conoscete un modo per riconoscere se ci si trova in questa situazione? Sarei interessato più ad una soluzione C#, comunque ho postato in questa sezione perché anche altre soluzioni mi andrebbero bene.

16 Risposte

  • Ecco una soluzione C#:
    
            public bool VMTest()
            {
                using (var searcher = new System.Management.ManagementObjectSearcher(
                     "Select * from Win32_ComputerSystem"))
                {
                    using (var items = searcher.Get())
                    {
                        foreach (var item in items)
                        {
                            string manufacturer = item["Manufacturer"].ToString().ToLower();
                            if (manufacturer == "microsoft corporation"
                                || manufacturer.Contains("vmware")
                                || item["Model"].ToString() == "VirtualBox")
                            {
                                return true;
                            }
                        }
                    }
    
                    return false;
                }
            }
    
  • Stupendo! Immagino che " microsoft corporation" corrisponda a HyperV.
  • Si, esatto.
  • Mentre se non sono sotto una macchina virtuale cosa dovrei aspettarmi?
  • Dovresti trovare il nome del produttore del pc ad esempio "Acer".
  • In genere, la marca del costruttore (ad es. hewlett-packard per un sistema HP).

    Ma occhio perché esistono altri "virtualizzatori" (come XEN) da prevedere.

    E comunque è un metodo abbastanza semplice da "superare" ... (come altri, del resto).
  • Ok grazie a tutti e due

    Un' altra cosa, sapreste indicarmi dove trovare l' elenco delle query che si possono fare con un ManagementObjectSearcher? Non sono riuscito a trovare della documentazione utile.
  • Mi dispiace ma non so risponderti, pure io ho trovato solo informazioni frammentarie.
  • Ok, grazie comunque e sarebbe OT, apro un altro thread.
  • Una curiosità, come faceva osservare oregon esistono altri virtualizzatori, cosa fai metti l' elenco di tutti? E se poi cambiano stringa?
  • In realtà a me interessa sapere che non sono sotto una vm e che mi trovo su un ben determinato pc (vedi thread sulla protezione software) per cui se per esempio non mi risponde "Acer" il programma protesta.
  • barba59 ha scritto:


    In realtà a me interessa sapere che non sono sotto una vm e che mi trovo su un ben determinato pc (vedi thread sulla protezione software) per cui se per esempio non mi risponde "Acer" il programma protesta.
    Mah ... non mi pare che potrai avere facilmente questa certezza ...
  • oregon ha scritto:


    barba59 ha scritto:


    In realtà a me interessa sapere che non sono sotto una vm e che mi trovo su un ben determinato pc (vedi thread sulla protezione software) per cui se per esempio non mi risponde "Acer" il programma protesta.
    Mah ... non mi pare che potrai avere facilmente questa certezza ...
    Assolutamente d' accordo, su questo non ho dubbi che hai ragione.

    Però per i miei programmi e per il tipo di clientela che ho è una protezione più che adeguata. È un pò come dire che qualsiasi lucchetto si può aprire però io alla bicicletta ce lo metto comunque
  • barba59 ha scritto:


    È un pò come dire che qualsiasi lucchetto si può aprire però io alla bicicletta ce lo metto comunque
    Sì, vedi mia risposta nell'altro thread ...
Devi accedere o registrarti per scrivere nel forum
16 risposte