2009-05-26 16 views
15

Qual è il modo migliore per generare un ID hardware univoco su Microsoft Windows con C++ che non è facilmente falsificabile (con ad esempio la modifica dell'indirizzo MAC)?Generazione di un ID hardware su Windows

+1

Definisci "facilmente falsificabile", cioè potrebbe farlo tua nonna, solo l'élite hacker o nessuno? – GalacticCowboy

risposta

16

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

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid 
+0

È possibile utilizzare questo con il nome del programma come chiave per una funzione hash HMAC in CAPI. –

+2

È lo standard su TUTTE le versioni di Windows? Che dire di Windows Mobile? – JoshBerke

+0

La domanda sarebbe "quanto è facile spoofare ...?" – jesup

0

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

-1

Utilizzare le API Win32 System HDS. Non leggere il registro, non ha alcun senso.

+0

piace condividere un collegamento? HDS non visualizza nulla. –

1

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

Una "macchina" non è altro che un bus passivo con un po 'di hardware in giro. Anche se ogni pezzo di ferro può fornire un identificatore utilizzabile in qualche modo, ogni pezzo di ferro può essere sostituito da un utente per qualsiasi cattiva o buona ragione di cui non si possa mai essere pienamente consapevole (quindi se si basa la propria funzionalità su questo, si creano problemi a il tuo utente, e quindi -come conseguenza- a te stesso ogni volta che un hardware deve essere sostituito/reinizializzato/riconfigurato ecc. ecc.).

Ora, se il problema è identificare una macchina in un contesto in cui molte macchine devono interagire tra loro, questo è un ruolo ben interpretato da indirizzi MAC o IP o nomi host. Ma sii preparato all'idea che non sono necessariamente costanti per un lungo periodo di tempo (quindi evita di codificarli hard-code - invece "scopri poi" su qualsiasi start-up)

Se il tuo problema è -instead- identificare un'istanza software o una licenza, probabilmente è meglio concentrarsi su un altro tipo di soluzione: vendi le licenze agli "utenti" (è l'utente che ha i soldi, non il suo computer!), non alle loro "macchine" (che gli utenti devono essere liberi di cambiare ogni volta che hanno bisogno/mi piace senza la tua autorizzazione, dal momento che non hai la licenza dell'hardware o del sistema operativo ...), quindi il tuo problema non è identificare una macchina, ma un UTENTE (considera che una stessa la macchina può essere un host per molti utenti e che uno stesso utente può lavorare su una varietà di macchine ..., non puoi assumere/imporre una relazione 1: 1, senza imbattersi in qualche tipo di problema prima o poi, quando questo idioma fa trovato non più in forma).

L'idea dovrebbe essere quella di registrare gli utenti in un sito un po 'raggiungibile, dare loro le chiavi che si generano e controllare che una stessa coppia di utenti/chiavi non sia utilizzata temporaneamente più di un numero concordato di volte in un dato momento periodo. Quando le violazioni superano, o le chiavi diventano vecchie, basta bloccare e attendere che l'utente si rinnovi.

Come puoi vedere, la risposta dipende in gran parte dal motivo alla base della tua domanda, più che dalla domanda stessa.

Problemi correlati