Domanda

Qual è il modo migliore per generare un ID hardware unico su Microsoft Windows con C ++ che non è facilmente spoofing (con ad esempio cambiare l'indirizzo MAC)?

È stato utile?

Soluzione

Windows memorizza un GUID univoco per ogni macchina nel Registro di sistema:

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid

Altri suggerimenti

Questo era il numero di serie della CPU, ma oggi ci sono molti tipi di schede madri e questo fattore non è accurato. indirizzo MAC può essere facilmente forgiato. Questo ci lascia con il numero di serie disco rigido interno. Vedi anche: http: //www.codeproject. com / articoli / 319181 / Haephrati-Ricerca-per-un-affidabile-Hardware-ID

Ci sono una varietà di "trucchi", ma l'unica vera "risposta fisica" è "no, non esiste una soluzione".

Una "macchina" non è altro che un bus passivo con alcuni hardware intorno. Anche se ogni pezzo di ferro in grado di fornire un identificatore in qualche modo utilizzabile, ogni pezzo di ferro può essere sostituita da un utente per qualsiasi ragione buona o cattiva non si può mai essere pienamente consapevoli di (quindi se si basa la funzionalità su questo, si crea problemi alla vostra utente, e quindi -come consequence- a te stesso ogni volta che un hardware devono essere sostituiti / Reinitialized / riconfigurato ecc ecc.).

Ora, se il tuo problema è identificare una macchina in un contesto in cui molte macchine devono inter-operare insieme, questo è un ruolo ben giocato da MAC o indirizzi IP o nomi host. Ma essere pronti a l'idea che essi non sono necessariamente costante lungo periodo di tempo (in modo da evitare di codificare loro - invece "scoprire poi" su uno dei tuoi start-up)

Se il vostro problema è -instead- identificare un'istanza di software o una licenza, si deve probabilmente meglio concentrarsi su un altro tipo di soluzione: si vende licenze agli "utenti" (è l'utente che ha i soldi, non il suo computer !), non loro "macchine" (che gli utenti devono essere liberi di cambiare ogni volta che hanno bisogno / come senza il vostro permesso, dal momento che si din't licenza l'hardware o il sistema operativo ...), quindi il problema non è quello di identificare un la macchina, ma un utente (si consideri che una stessa macchina può essere un host per molti utenti e che uno stesso utente può lavorare su una varietà di macchine ..., non si può assumere / imporre un 1: 1 relazione, senza incorrere in qualche tipo dei problemi prima o poi, quando questo idioma IFS trovati a non più in forma).

L'idea dovrebbe essere quella di registrare gli utenti in un sito un po 'raggiungibile, dare loro le chiavi generate, e verificare che un / coppia di chiavi stesso utente non è con-temporaneamente utilizzato più di un numero concordato di volte in un determinato periodo di tempo . Quando violazioni superano, o le chiavi diventa vecchio, basta bloccare e attendere che l'utente di rinnovare.

Come si può vedere, la risposta dipende in gran parte il motivo dietro alla tua domanda, più che dalla domanda stessa.

Ci sono vari ID assegnati a hardware che possono essere letti e combinati per formare una chiave del computer. Ad esempio, si potrebbe ottenere l'ID del disco rigido in cui è memorizzato il software, l'ID proc, ecc Alcuni di questi possono essere impostati più facilmente di altri, ma una parte della forza è nella combinazione di più pezzi insieme, che non sono necessariamente abbastanza forte da soli.

Ecco un programma (disponibile anche come DLL ) in grado di leggere e mostrare il proprio computer / ID hardware: http: //www.soft.tahionic.com/download-hdd_id/index.html

API Win32 Usa Sistema HDS. Non leggere il Registro di sistema, non ha alcun senso a tutti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top