105 votes

La génération d'une machine unique id

J'ai besoin d'écrire une fonction qui génère un id qui est unique pour un ordinateur exécutant un système d'exploitation Windows.

Actuellement, je suis à l'aide de WMI à la requête de divers paramètres matériels et de les enchaîner ensemble et de hachage pour obtenir l'id unique. Ma question est, quels sont les paramètres suggérés que je devrais utiliser? Actuellement, je suis en utilisant une combinaison de bios\cpu\disque de données pour générer l'id unique. Et je suis en utilisant le premier résultat si plusieurs résultats sont là pour chaque métrique.

Cependant, j'ai couru dans un problème où une machine à double bottes en 2 différents système d'exploitation Windows génère différents codes de site sur chaque OS, qui, idéalement, devrait pas arriver.

Pour référence, voici les paramètres que j'utilise actuellement:

Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed
Win32_BIOS:Manufacturer
Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version
Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads
Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber
Win32_VideoController:DriverVersion, Name

72voto

Fabio Ceconello Points 8662

J'ai eu le même problème et après un peu de recherche, j'ai décidé que le mieux serait de lire MachineGuid dans la clé de registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography, comme @Agnus suggéré. Il est généré lors de l'installation de l'OS et ne changera pas, sauf si vous faites un autre fraîches installation du système d'exploitation. Selon la version de l'OS peut contenir le réseau adresse MAC de l'adaptateur intégré (plus quelques autres numéros, y compris au hasard), ou un nombre pseudo-aléatoire, le plus tard pour les nouvelles versions de système d'exploitation (après XP SP2, je crois, mais pas sûr). Si c'est un pseudo, théoriquement, il peut être forgé - si deux machines ont le même état initial, y compris l'horloge en temps réel. Dans la pratique, ce seront rares, mais sachez que si vous vous attendez à être une base pour la sécurité qui peuvent être attaqués par les pirates.

Bien sûr, une entrée de registre peut également être facilement changé par n'importe qui pour se forger une machine GUID, mais ce que j'ai trouvé, c'est que ce serait nuire au fonctionnement normal de nombreux composants de Windows que, dans la plupart des cas, aucun utilisateur normal le ferait (encore une fois, regarder dehors pour les hardcore pirates).

34voto

Paul Alexander Points 17611

Avec notre outil gestionnaire de licences , nous considérons les éléments suivants

  • Adresse MAC
  • CPU (Pas le numéro de série, mais le PROCESSEUR réel de profil comme de marcher et modèle)
  • Système Numéro De Série Du Disque (Pas De Nom De Volume)
  • De mémoire
  • Modèle de CD-ROM et des fournisseurs
  • Modèle de la Carte graphique et des fournisseurs
  • Contrôleur IDE
  • Contrôleur SCSI

Cependant, plutôt que de simplement le hachage et composants de la création d'un pass/fail système, nous allons créer un comparable d'empreintes digitales qui peuvent être utilisés pour déterminer comment les différentes deux machine profils sont. Si la différence de notation est au-dessus d'une tolérance spécifiée, puis demander à l'utilisateur de l'activer de nouveau.

Nous avons trouvé au cours des 8 dernières années dans l'utilisation avec des centaines de milliers d'utilisateur installe que cette combinaison fonctionne bien pour fournir de manière fiable unique de la machine id - même pour les machines virtuelles et cloné OS installe.

26voto

Jonas Gulle Points 3435

Analyser le SMBIOS vous-même et de hachage à une longueur arbitraire. Voir la spécification PDF pour tous les SMBIOS structures disponibles.

Pour interroger le SMBIOS info à partir de Windows vous pouvez utiliser EnumSystemFirmwareEntries et GetSystemFirmwareTable.

IIRC, le "identifiant unique" de l'instruction CPUID est déconseillé de P3 et les plus récents.

3voto

gizmo Points 8528

Qu'en est seulement à l'aide de l'id unique du processeur?

1voto

Kyle Cronin Points 35834

Vous devriez regarder dans l'aide de l'adresse MAC de la carte réseau (si elle existe). Ceux-ci sont généralement unique, mais peuvent être fabriqués. J'ai utilisé un logiciel qui génère son fichier de licence basé sur votre réseau adresse MAC de la carte, il est donc considéré comme un assez moyen fiable de distinguer entre les ordinateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X