Domanda

Domanda: che devo venire con ID univoco per ogni client in rete, in modo tale che:

  • esso (ID) non si risolve una volta che il software client viene installato sul computer di destinazione, e deve continuare a persistere se il software è re-installato nello stesso computer e lo stesso sistema operativo rata,
  • non dovrebbe cambiare se la configurazione hardware viene modificato nella maggior parte dei modi (ad eccezione di cambiare la scheda madre)
  • Quando hard disk con software client installato viene clonato in un altro computer con la configurazione hardware identico (o, il più possibile simili), il software client deve essere consapevole di questo cambiamento.

Un po 'di spiegazioni e alcuni retroscena:

Questa domanda è fondamentalmente questione vecchiaia che tocca anche il tema di copia-protezione del software, come alcuni dei meccanismi utilizzati in quella zona sono menzionati qui. Dovrei essere chiaro a questo punto che io non sto cercando un sistema di protezione anti-copia. Ti prego, continuate a leggere. :)

Sto lavorando su un software client-server che dovrebbe funzionare in una rete locale. Uno dei problemi che ho da risolvere è quello di identificare ogni cliente univoco nella rete (non tanto di un problema), in modo che posso applicare determinati attributi ad ogni cliente specifico, mantenere e far rispettare tali attributi durante la vita dispiegamento di una specifica cliente.

Mentre ero alla ricerca di una soluzione, io ero a conoscenza di quanto segue:

  • sistema di attivazione Windows utilizza qualche tipo di meccanismo fingerprinting pesante che è estremamente sensibile alle modifiche dell'hardware,
  • Disco copie di software di imaging lungo tutti gli ID di volume (legati a ogni partizione quando formattata), e personalizzato, ID generati unicamente durante il processo di installazione, durante la prima esecuzione, o in qualsiasi altro modo, che è rigorosamente software nella sua natura, e conservato nel registro di sistema o sul disco rigido, quindi è molto facile confondere due.

La scelta più ovvia per questo tipo di problema potrebbe essere quella di scoprire identificatori BIOS (non al 100% sicuro se questo è unico attraverso modelli di schede madri identiche, però), in quanto questo è l'unica cosa che posso fare affidamento su che non sia duplicato, trasferiti mediante clonazione, e che non può essere modificato (almeno non utilizzando qualche programma utente-spazio). Tutto il resto fallisce sia come essere non affidabili (MAC clonazione, chiunque?), O troppo esigente (in termini che è troppo sensibile ai cambiamenti di configurazione).

Sotto-domanda che vorrei porre è, sto facendo correttamente, l'architettura-saggio? Forse c'è uno strumento migliore per il compito che devo compiere ...

Un altro approccio che avevo in mente è qualcosa di simile a un meccanismo di stretta di mano, in cui un server mantiene una tabella interna di ricerca di ID client connessi (che può essere anche completamente basata su software e non univoco in un dato momento), e racconta il cliente a venire con un ID diverso durante la stretta di mano, se un ID duplicato viene fornito al momento della connessione. Tale approccio, purtroppo, non gioca bene con uno dei requisiti per legare gli attributi per uno specifico cliente durante la vita.

È stato utile?

Soluzione

Mi sembra che si dovrebbe costruire l'ID univoco corrispondente alle proprie esigenze. Questo ID può essere costruito come un hash (come MD5, SHA1 o SHA512) dalle informazioni che è importante per voi (alcune informazioni su software e componente hardware).

Si può rendere la vostra soluzione più sicura se ti iscrivi ad hash con la chiave privata e il software di verificare durante la partenza, che la chiave ( valore hash firmato ) è firmato (solo la chiave pubblica deve essere installato insieme con il software). Si può ampliare questo tipo di soluzione, con diversi servizi on-line, ma i clienti aziendali potrebbero trovare servizi online non è così bello.

Altri suggerimenti

Quello che stai cercando è la di Windows WMI . È possibile ottenere l'ID della scheda madre (che unico attraverso lo stesso tipo di scheda madre), o molti molti altri tipi di identificatori univoci e venire con qualche funzione testa di serie intelligente per generare un UHID. Whoa ho appena invento un acronimo?

E se siete alla ricerca specificamente per ottenere la scheda madre (BIOS) ID:

WMI class: Win32_BIOS
Namespace: \Root\Cimv2

Documentazione: http://msdn.microsoft.com /en-us/library/aa394077(VS.85).aspx
Codice di esempio: http://msdn.microsoft.com/ it-it / library / aa390423% 28VS.85% 29.aspx

Modifica :. Non hai specificato una lingua (e ho assunto C ++), ma questo può essere fatto in Java (con un driver COM), e qualsiasi linguaggio .NET, nonché

Molti programmi utilizzano il HOSTID al fine di costruire un codice di licenza (come quelli basati su FlexLM). Date un'occhiata a ciò che Matlab non a seconda del sistema operativo:

http://www.mathworks.com /support/solutions/en/data/1-171PI/index.html

hanno anche uno sguardo a questa domanda:

Ottenere un ID univoco da un sistema unix-like

Una volta ho visto anche alcuni programmi che basano le loro licenze sul numero di serie del disco rigido, un forse che è la cosa meno probabile che il cambiamento. Qualcuno potrebbe suggerire di utilizzare il MAC della vostra scheda ethernet, ma che può essere riprogrammato.

MAC
Non fare affidamento su MAC! MAI. E non è permanente. L'utente può facilmente cambiare ( meno di 30 secondi ).

ID Volume
Non fare affidamento su ID Volume! MAI. E non è permanente. L'utente può facilmente cambiare. Cambia anche formattando semplicemente l'unità.

WMI
WMI è un servizio. Può essere facilmente disabilitato. A dire il vero, ho provato quello e scopro che su molti computer è disattivata o rotti (sì, molto spesso rotto).

del server di licenza
Connessione a un server di convalida può causare anche un sacco di guai perché:
 * I vostri clienti non possono sempre essere collegati a Internet.
 * I clienti possono connettersi con impostazioni speciali (router / NAT / proxy / gateway) che hanno bisogno di inserire nel vostro programma, al fine di lasciare che la connessione al server di convalida.
 * Possono essere dietro un firewall che blocca tutti i programmi tranne pochi (il mio caso). In alcuni casi, il firewall non può essere sotto il loro controllo (valido per la maggior parte gli utenti aziendali)!
 * È super facile per reindirizzare la tua programma a un server web falso locale che emula il server di licenza.

Dati Hardware
Se avete bisogno di una forte protezione è necessario fare affidamento su hardware. Qualcosa che non può essere modificato dall'utente. Qualcosa come istruzione di ID CPU disponibile nel AMD CPU Intel / e il numero di serie scritto nella interfaccia IDE del drive.
L'ID della CPU e HDD ID sono permanenti. Non cambieranno mai, nemmeno dopo aver formattato il computer e reinstallare Windows.

E 'fattibile. Per esempio questa libreria legge l'ID hardware di un computer. C'è una demo compilato e anche codice sorgente / DLL . Disclaimer:. Il link rimanda a un prodotto commerciale (19 € / senza royalties)

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