Question

Quelle est la meilleure façon de générer un matériel unique ID sur Microsoft Windows avec C ++ qui ne sont pas facilement outrepassées (avec par exemple changer l'adresse MAC)?

Était-ce utile?

La solution

Windows stocke un Guid unique par machine dans le registre:

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid

Autres conseils

Cette habitude d'être le numéro de série du processeur, mais aujourd'hui, il existe de nombreux types de cartes mères et ce facteur ne sont pas précis. adresse MAC peut être facilement falsifiée. Cela nous laisse avec le disque dur interne numéro de série. Voir aussi: http: //www.codeproject. com / articles / 319181 / Haephrati-Recherche-pour-un-Hardware-ID fiable

Il existe une variété de « trucs », mais la seule « réponse physique » réelle est « non, il n'y a pas de solution ».

Une « machine » est rien de plus qu'un bus passif avec un peu de matériel autour. Bien que chaque morceau de fer peut fournir un identifiant en quelque sorte utilisable, chaque morceau de fer peut être remplacé par un utilisateur pour quelque mauvaise ou une bonne raison, vous ne pouvez jamais être pleinement conscient (donc si vous basez votre fonctionnalité sur ce point, vous créez des problèmes à votre utilisateur, et donc -comme consequence- pour vous chaque fois qu'un matériel ont à remplacer / Reinitialized / reconfiguré etc etc.).

Maintenant, si votre problème est d'identifier une machine dans un contexte où de nombreuses machines doivent interopérer ensemble, c'est un rôle bien joué par adresses MAC ou IP ou les noms d'hôte. Mais préparez-vous à l'idée qu'ils ne sont pas nécessairement constante sur une longue période de temps (afin d'éviter à coder en dur les - au lieu « découvrir puis » sur l'un de vos démarrage)

Si votre problème est -instead- identifier une instance de logiciel ou d'une licence, vous avez sans doute préférable de se concentrer sur un autre type de solution: vous vendez des licences à des « utilisateurs » (il est l'utilisateur qui a l'argent, pas son ordinateur !), pas à leurs « machines » (que les utilisateurs doivent être libres de changer quand ils ont besoin / comme sans votre permission, puisque vous din't licence le matériel ou le système d'exploitation ...), d'où votre problème est de ne pas identifier un machine, mais un utilisateur (considérer qu'une même machine peut être un hôte pour de nombreux utilisateurs et qu'un même utilisateur peut travailler sur une variété de machines ..., vous ne pouvez pas supposer / imposer une relation 1: 1, sans courir dans une sorte des problèmes tôt ou tard, quand ce ifs idiome trouvé pour ne plus en forme).

L'idée devrait être d'enregistrer les utilisateurs dans un site peu accessible, leur donner les clés que vous générez, et vérifiez qu'un plus un nombre convenu de fois con-utilisé temporairement même utilisateur / paire de clés ne sont pas dans une période de temps donnée . Lorsque les violations dépassent, ou les touches devient vieux, bloquer juste et attendre que l'utilisateur de renouveler.

Comme vous pouvez le voir, la réponse dépend en grande partie la raison derrière votre question, plus que de la question elle-même.

Il existe différents ID attribués au matériel qui peuvent être lus et combinés pour former une clé de la machine. Par exemple, vous pouvez obtenir l'ID du disque dur sur lequel le logiciel est enregistré, l'ID proc, etc. Certains d'entre eux peuvent être réglés plus facilement que d'autres, mais une partie de la force est en combinant plusieurs morceaux qui ne sont pas nécessairement assez fort par eux-mêmes.

Voici un programme (également disponible en DLL ) qui peut lire et afficher votre ordinateur / ID matériel: http: //www.soft.tahionic.com/download-hdd_id/index.html

Utiliser les API Win32 système HDS. Ne lisez pas le registre, il n'a pas de sens du tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top