Quelle est la meilleure façon de générer un ID matériel unique sur Microsoft Windows avec C++ qui n'est pas facilement usurpable (avec par exemple la modification de l'adresse MAC)?Génération d'un ID de matériel sous Windows
Répondre
Windows stocke un Guid unique par machine dans le registre:
HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid
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 où le logiciel est stocké, l'ID de proc, etc. Certains d'entre eux peuvent être définis plus facilement que d'autres, mais une partie de la force est de combiner plusieurs pièces qui ne sont pas nécessairement assez fort par eux-mêmes.
Utilisez les API Win32 System HDS. Ne lisez pas le registre, il n'a aucun sens du tout.
Vous souhaitez partager un lien? HDS ne montre rien. –
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
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 est pas précis. L'adresse MAC peut être facilement forgée. Cela nous laisse avec le numéro de série du disque dur interne. Voir aussi: http://www.codeproject.com/Articles/319181/Haephrati-Searching-for-a-reliable-Hardware-ID
Il existe une variété de "trucs", mais la seule vraie "réponse physique" est "non, il n'y a pas de solution".
Une "machine" n'est rien de plus qu'un bus passif avec du matériel autour. Bien que chaque morceau de fer puisse fournir un identifiant utilisable en quelque sorte, chaque morceau de fer peut être remplacé par un utilisateur pour quelque raison mauvaise ou bonne que vous ne pouvez jamais connaître complètement (donc si vous basez votre fonctionnalité dessus, vous créez des problèmes). votre utilisateur, et donc, par conséquent, à vous chaque fois qu'un matériel doit être remplacé/réinitialisé/reconfiguré, etc., etc.). Maintenant, si votre problème est d'identifier une machine dans un contexte où plusieurs machines doivent interagir ensemble, c'est un rôle bien joué par les adresses MAC ou IP ou les noms d'hôtes. Mais soyez préparés à l'idée qu'ils ne sont pas nécessairement constants sur une longue période de temps (évitez donc de les coder en dur - au lieu de "découvrir ensuite" lors de votre démarrage)
Si votre problème est - au lieu de identifier une instance de logiciel ou une licence, mieux vaut se concentrer sur un autre type de solution: vous vendez des licences aux "utilisateurs" (c'est l'utilisateur qui a l'argent, pas son ordinateur!), pas à leurs "machines" (que les utilisateurs doivent être libres de changer quand ils en ont besoin sans votre permission, puisque vous n'avez pas de licence sur le matériel ou le système d'exploitation ...), votre problème n'est donc pas d'identifier une machine, mais un utilisateur. 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 tomber dans un genre de problèmes tôt ou tard, lorsque cette idiome trouvé pas plus en forme). L'idée devrait être d'enregistrer les utilisateurs dans un site accessible, de leur donner les clés que vous générez, et de vérifier qu'un même utilisateur/paire de clés n'est pas utilisé temporairement plus d'un nombre convenu de fois dans un temps donné période. Lorsque les violations dépassent ou que les clés deviennent anciennes, il suffit de bloquer et d'attendre que l'utilisateur renouvelle.
Comme vous pouvez le voir, la réponse dépend principalement de la raison derrière votre question, plus que de la question elle-même.
- 1. Génération des ID de noeud Jena
- 2. ID de travail sous UNIX doute
- 3. Débogage de plantages JVM sous Windows
- 4. Implémentation d'une trace de pile sous Windows
- 5. Sous-id, le suivi-id ou id site dans http://cj.com buyUrl
- 6. Détection de matériel (inconnu) dans .NET
- 7. Est-ce que Windows Vista empêche les services Windows d'accéder à Internet ou au matériel USB?
- 8. Matériel global OnKeyPress
- 9. Windows Mobile, comment obtenir ID et série?
- 10. Exécution sous Windows CE 6 'et' Windows XP
- 11. Windows Live ID dans ASP.NET MVC
- 12. Installation de Starling sous Windows
- 13. Débogage de xsp sous Windows
- 14. Comment renifler un port USB sous Windows?
- 15. Récupération d'informations graphiques/de carte son sous Windows
- 16. séquences de génération pour des sous-ensembles d'une table
- 17. Rails sous-requête dans la génération de rapports
- 18. Matériel de certification HL7 V3
- 19. détecter les périphériques Errored sous Windows XP avec C#/Pinvoke
- 20. Performances QtCreator sous Windows
- 21. Mono-service sous Windows
- 22. IIS sous Windows XP
- 23. Communication interprocessus sous Windows
- 24. Liaison libsox sous Windows
- 25. GHC + wxHaskell sous Windows
- 26. Avertissements fatals sous Windows
- 27. Mono IDE sous Windows
- 28. CoreData - comment créer une sous-classe d'une sous-classe de NSManagedObject (génération de modèle Gap)
- 29. Fonctionnement de l'enregistrement COM sous Windows
- 30. Dimensionnement du matériel
Définir "facilement spoofable" - c'est-à-dire que votre grand-mère pourrait le faire, seulement l'élite hacker, ou personne du tout? – GalacticCowboy