2009-05-26 8 views
15

Was ist der beste Weg, um eine eindeutige Hardware-ID unter Microsoft Windows mit C++ zu generieren, die nicht leicht fälschbar ist (z. B. Ändern der MAC-Adresse)?Generieren einer Hardware-ID unter Windows

+1

Definieren Sie "leicht spoofable" - d. H. Könnte Ihre Großmutter es tun, nur die Hacker-Elite, oder überhaupt niemand? – GalacticCowboy

Antwort

16

speichert Windows eine eindeutige Guid pro Maschine in der Registrierung unter:

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid 
+0

Sie könnten dies mit dem Namen Ihres Programms als Schlüssel für eine HMAC-Hash-Funktion in CAPI verwenden. –

+2

Ist das der Standard für ALLE Versionen von Windows? Was ist mit Mobile Windows? – JoshBerke

+0

Die Frage wäre "wie leicht ist das zu spoofen ...?" – jesup

0

Es gibt verschiedene IDs Hardware zugeordnet, die gelesen werden können und kombiniert, um eine Maschine Schlüssel zu bilden. Beispielsweise könnten Sie die ID der Festplatte, auf der die Software gespeichert ist, die Proc-ID usw. erhalten. Einige davon können einfacher als andere festgelegt werden, aber ein Teil der Stärke besteht darin, mehrere Teile miteinander zu kombinieren, die nicht unbedingt erforderlich sind stark genug für sich.

-1

Verwenden Sie Win32 System HDS APIs. Lesen Sie nicht die Registrierung, es hat überhaupt keinen Sinn.

+0

Möchten Sie einen Link teilen? HDS bringt nichts. –

1

Es gibt eine Vielzahl von "Tricks", aber die einzige wirkliche "physikalische Antwort" ist "Nein, es gibt keine Lösung".

Eine "Maschine" ist nichts weiter als ein passiver Bus mit etwas Hardware herum. Obwohl jedes Stück Eisen einen irgendwie verwendbaren Identifizierer zur Verfügung stellen kann, kann jedes Stück Eisen von einem Benutzer aus irgendeinem schlechten oder guten Grund ersetzt werden, den Sie nie voll bewusst werden können (wenn Sie also Ihre Funktionalität darauf aufbauen, schaffen Sie Probleme) Ihr Benutzer und folglich - als Konsequenz - für sich selbst jedes Mal, wenn eine Hardware ersetzt/neu initialisiert/rekonfiguriert werden muss usw. usw.).

Nun, wenn Ihr Problem eine Maschine in einem Kontext identifiziert, in dem viele Maschinen miteinander interagieren müssen, ist dies eine Rolle gut von MAC oder IP-Adressen oder Hostnamen gespielt. Aber seien Sie auf die Idee vorbereitet, dass sie nicht notwendigerweise konstant auf lange Zeitperiode sind (also vermeiden, sie hart zu kodieren - stattdessen "entdecken Sie dann" auf irgendeinem Ihrer Start-up)

Wenn Ihr Problem ist-statt- Identifizieren Sie eine Softwareinstanz oder eine Lizenz, Sie sollten sich wahrscheinlich besser auf eine andere Art von Lösung konzentrieren: Sie verkaufen Lizenzen an "Benutzer" (es ist der Benutzer, der das Geld hat, nicht seinen Computer!), nicht an seinen "Maschinen" (die Benutzer müssen frei sein, um zu ändern, wann immer sie brauchen/mögen, ohne Ihre Erlaubnis, da Sie die Hardware oder das Betriebssystem nicht lizenzieren ...), Ihr Problem besteht also nicht darin, eine Maschine zu identifizieren, sondern einen BENUTZER Maschine kann ein Host für viele Benutzer sein und dass ein und derselbe Benutzer an einer Vielzahl von Maschinen arbeiten kann ..., man kann keine 1: 1-Beziehung annehmen/erzwingen, ohne früher oder später irgendwelche Probleme zu bekommen, wenn dieses Idiom ifs ist nicht mehr passend gefunden).

Die Idee sollte sein, die Benutzer an einer leicht erreichbaren Site zu registrieren, ihnen Schlüssel zu geben, die Sie generieren, und zu überprüfen, dass ein Benutzer/Schlüsselpaar nicht mehr als eine vereinbarte Anzahl von Malen zu einer bestimmten Zeit verwendet wird Zeitraum. Wenn Verstöße überschritten werden oder die Schlüssel alt werden, blockieren Sie einfach und warten Sie, bis sich der Benutzer erneuert.

Wie Sie sehen, hängt die Antwort hauptsächlich von dem Grund hinter Ihrer Frage ab, mehr als von der Frage selbst.