Qual è un buon modo per identificare univocamente un computer?

Sto sviluppando alcuni software desktop per la rivendita di un cliente. Il cliente desidera limitare il software in modo che il codice di registrazione sia specifico per uno e un solo computer.

Oltre all’utilizzo del MAC dalla scheda di rete, qualcuno ha altre tecniche (che funzionano sia su Windows che su Mac OS X) per l’identificazione univoca di un computer?

Suonerò l’avvocato del diavolo qui e dirò che una cosa del genere probabilmente non è la cosa migliore da discutere in “pubblico”.

Detto questo, guarda ciò che gli altri potrebbero aver fatto e magari migliorare (o prenderne una parte). L’indirizzo MAC, come hai detto, è probabilmente accettabile. Ho sentito che Windows e altri programmi utilizzano le informazioni del disco rigido (numero di serie). Secondo questo sito , l’Attivazione di Windows controlla 10 elementi diversi e li trasforma in una chiave univoca.

Vorrei semplicemente utilizzare l’indirizzo MAC per generare una chiave di richiesta, quindi richiedere agli utenti di registrarsi con il cliente. Il tuo cliente avrà un’applicazione speciale che prende quella chiave di richiesta e produce una chiave di triggerszione che l’utente può utilizzare per triggersre il software. Una volta triggersto, il software funziona, funziona solo – non a volte telefonare a casa per la verifica e così via.

Questo è se fosse un requisito reale. Il mio primo compito sarebbe provare a convincere il cliente che questa era una ctriggers idea.

Il motivo è che questi schemi praticamente non impediscono mai che il tuo codice venga violato. Tuttavia, rendono più difficile la vita dei tuoi clienti autentici. Trovo difficile pensare a qualsiasi altra industria che faccia del suo modo di infastidire i suoi clienti genuini con schemi che non raggiungono mai i loro obiettivi (oltre al servizio governativo, ovviamente :-).

Se si deve fare questo, farei semplicemente uno sforzo token per soddisfare l’obbligo contrattuale (non dirlo al tuo cliente, tuttavia). Prendendo l’indirizzo MAC (o un numero casuale se, $DEITY voglia, il computer non ha una scheda di rete) come chiave di richiesta e usando un programma per farlo solo con una stringa ASCII per ottenere la chiave di triggerszione, sembra un approccio praticabile. Vorrei anche archiviare entrambe le chiavi poiché non vuoi che il software si disattivi se cambiano semplicemente la loro scheda di rete (o persino la scheda madre) – lo vedono ancora come lo stesso computer e non saranno felici se il software smetterà di funzionare.

Il tuo codice verrà scartato a prescindere (a meno che il programma sia spazzatura che sono sicuro non sia il caso) – questo metodo offrirà ai tuoi clienti reali una via per spostare il loro software su un’altra macchina se la compagnia del tuo cliente non risponde in qualche modo , fallisce, e così via).

Il problema principale di tutti gli schemi che si basano sull’unicità di un po ‘di hardware è che il cliente può scegliere di cambiare quel bit di hardware:

  • ghosting il loro contenuto del disco su un disco rigido più grande fa cambiare i numeri seriali HD.
  • utilizzare i numeri seriali della CPU significa che l’aggiornamento alla CPU Intel bigmutha più recente uccide il software.
  • usare l’indirizzo MAC significa che non possono cambiare la scheda di rete.

Questi possono essere risolti utilizzando questi valori per creare una chiave al momento dell’installazione e controllare solo quella chiave, non il valore modificato sei mesi lungo la traccia. Significa che devi memorizzare la richiesta e i valori di triggerszione, ma gli aggiornamenti non richiederanno agli utenti di passare attraverso il processo di ritriggerszione del loro software. Credimi, ti disprezzeranno per averlo fatto.

il modo migliore è prendere l’UUID usando C # in Windows

Il modo migliore per identificare in modo univoco una macchina Windows

 public string GetUUID() { var procStartInfo = new ProcessStartInfo("cmd", "/c " + "wmic csproduct get UUID") { RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true }; var proc = new Process() { StartInfo = procStartInfo }; proc.Start(); return proc.StandardOutput.ReadToEnd().Replace("UUID", string.Empty).Trim().ToUpper(); } 

Non esiste un modo sicuro per identificare univocamente un computer, se si assume che un computer sia costruito con molte parti che possono essere eventualmente sostituite.

Alcune parti hardware – indirizzo MAC, numero di serie del disco rigido, anche seriale della scheda madre, ecc. – sono alcune buone fonti di “unicità” ma come potresti sapere se un cliente decide di aggiornare la parte da cui dipende la licenza … preparati per qualche supporto clienti. Inoltre, tenere presente che alcune parti possono essere falsificate (il MAC è uno di questi).

Un controllo della licenza online è un altro buon modo per andare: puoi gestire tutto sul lato server e persino definire le tue regole (quante licenze per client / installazione, concorrenza, ecc.) Ma la cosa più importante da notare è che cosa succede quando la connessione non può essere stabilita?

Apri il registro e vai a

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography

Trova la chiave chiamata “MachineGuid” questa chiave viene generata in modo univoco durante l’installazione di Windows e non cambierà a prescindere da eventuali sostituzioni hardware (a parte la sostituzione del disco rigido di avvio su cui è installato il sistema operativo). Ciò significa che se si desidera mantenere l’installazione di tracciamento per sistema operativo, questa è un’altra alternativa. Non cambierà se non si esegue una nuova reinstallazione di Windows.

L’idea con cui sto giocando è l’utilizzo di alcuni numeri seriali o ID univoci relativi all’hardware e il loro raggruppamento.

Cose che vengono aggiornate: -Memory -MACs (può essere contraffatto, gli adattatori USB vengono collegati, ecc.)

Cose che non vengono aggiornate spesso: -CPU -BIOS -Mobile

Usare WMIC può essere un ottimo modo per prendere alcune informazioni, vorrei iniziare afferrando cose che non cambiano spesso come prima scelta e preferita, mi piacerebbe essere in grado di impronte digitali di almeno 2 numeri seriali o dispositivi da utilizzare per generare una chiave di registrazione.

 wmic cpu get DeviceId /format:value 

Questo prenderà l’ID della CPU, potresti eseguire quel comando per:

1 – CPU (cpu: DeviceID) 2 – Scheda madre (scheda di base: numero di serie) 3 – BIOS (bios: serialnumber)

se non ottieni almeno 2 valori popolati, allora prendi

4 – Scheda di rete – (nic: MACAddress) 5 – RAM – (memphis: SerialNumber)

A seconda della tua logica aziendale, puoi utilizzare i primi due numeri seriali disponibili per creare il tuo numero di registrazione e, se segui sempre lo stesso ordine, su re-installa il numero di registrazione funzionerà comunque, tuttavia se un dispositivo cambia o un utente prova a installare su un computer secondario la modifica dell’ID che ha invalidato il numero di registrazione. Per ridurre la quantità di supporto tecnico chiamate la quantità minima di hardware che l’impronta digitale darà il minor numero di mal di testa e se si tenta di impronte digitali degli elementi meno probabili da aggiornare che riduce ulteriormente il mal di testa. La mia preferenza è l’ordine di cui sopra.

È ansible utilizzare uno schema di scambio di chiavi Diffie-Hellman per consentire all’utente di generare una coppia di chiavi privata / pulica con i relativi ID hardware come payload, quindi passare queste informazioni a un server di registrazione in cui il server di registrazione utilizzerà una chiave pubblica / privata per decifrare il carico utile e calcolare la chiave di registrazione per tornare all’utente finale. Mi piace usare JWT per passare le cose avanti e indietro con le chiavi pubbliche incluse nel carico utile del JWT. Spero possa aiutare.

L’UUID è stato menzionato sopra ed è una grande idea che puoi ottenerlo con:

 wmic csproduct get UUID /format:vale 

Disclaimer questi comandi funzionano solo per Windows credo 2000 e successivi, ma è necessario verificare che siano disponibili per sistemi inferiori al 2000 ma a quel punto cerco davvero di non supportare tali dispositivi. In bocca al lupo.

Su Mac:

 system_profiler | grep "Serial Number (system)" 

Su Linux (debian):

 sudo dmidecode -t system | grep "Serial Number" 

dmidecode e system_profiler ha altri componenti che possono prendere numeri di serie simili a wmic in windows. Non lavoro su Mac quindi non posso confermare un elenco di specifiche esatte ma creando un elenco di LCD (minimo comune denominatore) i numeri seriali per le parti a cui tutti e tre i comandi possono accedere è assemblato e curato con meno probabilità parti da aggiornare o modificare. Quindi una combinazione dei top 2-3 numeri hash può creare un ID macchina univoco che è un po ‘più robusto e consente di triggersre un’app multipiattaforma anche su un dispositivo con il suo sistema operativo aggiornato.

C’era un numero seriale impresso nella CPU, per quanto ho visto però; questa informazione (PSN, Pentium Serial Number) è stata deprecata. L’informazione potrebbe ancora esistere, ma almeno nel mondo P3 non c’era più. Inoltre, penso che la scelta ovvia dell’indirizzo MAC sulla NIC per l’interfaccia principale utilizzata per l’host dovrebbe essere considerata come una possibilità reale. A meno che il tuo cliente non si aspetti che le interfacce ethernet siano presenti sugli host a cui vendono.

Ho una certa esperienza su questo. Nella mia soluzione emettiamo la chiave di servizio quando vendiamo il prodotto al cliente.

Quando il client installa l’applicazione, genera una chiave leggendo la seriale della scheda madre del computer client. Il client deve inviare via email la chiave di servizio e la chiave generata durante l’installazione alla nostra organizzazione per triggersre il prodotto.

Gestiamo un’applicazione di amministrazione presso le chiavi di triggerszione dell’organizzazione. Offriamo solo una chiave di triggerszione per la chiave per una particolare chiave di servizio.

Abbiamo venduto un numero di copie e funziona senza problemi. Ma poi abbiamo scoperto alcuni computer che non forniscono un numero seriale della scheda madre. Queste macchine restituiscono il valore null come numero seriale della scheda madre. stiamo ancora cercando di risolvere questo problema.

Che ne dici di utilizzare il numero di serie unico di MotherBoard?

Si può creare un codice seriale che l’utente deve inserire una volta. Dovrebbe includere l’indirizzo e-mail dell’utente (qualcosa come [email protected]-9828372-398232). Ciò impedirà a molte persone di provare a manometterlo o darlo ad altre persone. Durante l’triggerszione, il software dovrebbe verificare un db online se esiste la chiave seriale.

Potresti considerare un’utilità di licenza di terze parti che probabilmente otterrà questo “diritto” e fornirà anche tu (o il tuo cliente) con opzioni aggiuntive qualora i requisiti cambino (e non lo fanno sempre?). Ne menzionerei alcuni specifici per nome, ma non li conosco davvero intimamente.

Oppure potresti semplicemente non avere alcun codice di triggerszione e assicurarti di avere i diritti di verifica scritti nell’EULA e di esercitare di volta in volta il tuo diritto alla verifica.

Funziona a meraviglia per Oracle.

che ne dici di eseguire l’hashing di qualsiasi cosa che abbia un SN masterizzato, harddrive, proc, ram, ecc … questo hash rimarrà con il computer fino a quando non sarà sostituito.

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography

La chiave “MachineGuid” viene generata in modo univoco durante l’installazione di Windows e non cambierà indipendentemente dall’eventuale sostituzione dell’hardware (a parte la sostituzione del disco rigido di avvio su cui è installato il sistema operativo). Non ne sono sicuro.

IL MIO CONSIGLIO

È ansible utilizzare quel MachineGuid, il numero di serie del disco rigido, il numero di serie della scheda madre e l’UUID. Insieme HASH usando SHA 256 o qualsiasi altra funzione HASH.

UUID : wmic csproduct ottiene UUID

MachineGuid – HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography

Numero di serie del disco rigido – wmic diskdrive ottiene numero di serie

Numero di serie del BIOS : il bios wmic ottiene il numero di serie

Numero di serie della scheda madre – la scheda di base wmic ottiene il numero di serie