Pour obtenir une obligation de générer des clés de licence PER-PC, j'ai besoin d'un code qui retournera une clé unique stable et (proche) sur n'importe quel PC. Ça ne EM> doit-il être garanti grave, mais proche. Il em> doit-il être raisonnablement stable cependant, de sorte qu'un PC donné génère toujours le même résultat que si le matériel ne soit sensiblement changé. P>
Ceci est pour une application Windows, à l'aide de WXWidgets, mais une option Win32 ou une autre option est correcte. P>
Je pensais à l'adresse MAC, mais qu'en est-il des ordinateurs portables qui peuvent systématiquement désactiver la carte réseau en mode d'économie d'énergie? Je suis tombé sur getcurrithwprofile mais ça ne fait pas tout à fait ressembler à ce que je veux? p>
7 Réponses :
Une idée que j'ai eu un moment de retour pour cela est d'utiliser CryptProtectData comme moyen d'identifier une machine. Dans les coulisses de cette API, Microsoft a fait ce que vous recherchez. Je ne l'ai jamais testé et je suis curieux si c'est réellement viable. P>
En gros, vous encoderiez une valeur magique constante avec cryptprotectdata code> avec cryptprotect_local_machine code>, et le résultat est votre identifiant de machine. P>
C'est assez intéressant. Nous pourrions l'essayer si nous le faisons, je posterai.
J'ai testé cela et il ne semble pas fonctionner. Crypter la même chaîne à plusieurs reprises donne différents résultats à chaque fois. Fournir une "poptionalentropie" constante n'aide pas.
Pour un test de mort joli cerveau, j'utilise le code ProductId du système d'exploitation et le nom de l'ordinateur - tous deux extraits du registre. Pas vraiment sécurisé, mais sa sécurité tout en prétend de toute façon. P>
Répondre à la question de John sur les clés que je lis: p>
logiciel \ Microsoft \ Windows NT \ CurrentVersion \ ProductID P>
Système \ CurrentControlset \ Control \ ComputerName \ ComputerName \ ComputerName P>
Nous avons essayé cela une fois mais a découvert que de nombreuses machines d'entreprise (machines clonées), ou des machines en attente, partagent le code de la licence; Cela a fait cette solution complètement non viable.
@Tenfour - Je suis totalement d'accord que c'est une mesure stupide. Mais je joue au théâtre de sécurité avec mon "produit" de sorte que cela ne mérite rien de plus que cela. Je me souviens quand j'y ai examiné la dernière fois que même les clés USB sont en train d'être spoofées maintenant.
La licence Windows ne serait-elle pas signale qu'elle se brise s'ils mettent à niveau le système d'exploitation? Mais de toute façon, pouvez-vous développer votre réponse avec les touches spécifiques que vous accédez, ou le code que vous utilisez?
@John .. Mon "produit" est une solution de niche spécifique à l'industrie, donc je travaille toujours 1 sur 1 avec les clients. Ainsi, les mises à niveau, etc. ne sont pas un problème - s'ils ont un problème, ils viendront à moi. Quant aux clés de registre .. Je vais devoir te tuer maintenant: D
Merci. Notre situation est similaire, c'est un produit spécialiste qui n'est pas un vendu librement. Je suppose donc que nous pourrions fournir de nouvelles clés de licence si cela s'est passé.
J'irais simplement avec la méthode d'adresse MAC; Lorsque les cartes sans fil / LAN sont désactivées, elles apparaissent toujours dans des connexions réseau. Vous devriez donc toujours être capable d'obtenir le Mac. P>
Considérez ceci: chaque fois que vous pourrez contacter votre serveur Web ou tout ce que vous catalogez ces identifiants avec, l'utilisateur va avoir em> avoir une forme de carte réseau disponible. < / p>
Oh, et vous pourrez peut-être utiliser le numéro de série du CPU de l'ordinateur du client le supporte. p>
Les deux peuvent être spoofés. Vous ne pourrez pas obtenir le MAC adressé utilisé par le client s'il passe par un routeur pour atteindre le serveur (qui est le plus susceptible d'être le cas).
Je pense que le logiciel fonctionne directement sur les machines clientes, il serait donc possible d'obtenir l'adresse MAC.
@Bruno - Je dirais que tout bie d'informations qui est écritable peut être spoofed. En ce qui concerne l'obtention de l'adresse MAC, un programme local sur le PC peut l'extraire, puis transmettre que des données sur le système de licence.
Bien sûr, mais cela peut être réglé assez facilement avant que le programme local ne le lit. C'est bien sûr beaucoup plus facile à faire sur une machine virtuelle, mais cela peut également être fait avec du matériel réel.
Ne vous souciez pas de l'entrepooftage. Cependant, nous devons obtenir ce code lorsque l'application commence, pour valider le fichier de licence ... non seulement quand il va en ligne
S'il vous plaît, pour toute technique que vous avez mentionnée comme ID CPU, donner un exemple ou un lien.
@John: Comment pouvez-vous valider le fichier de licence et vérifier qu'il est sur cette machine unique sans une liste de toutes les machines? Quoi qu'il en soit, vous pouvez obtenir le numéro de série du processeur de WMI: MSDN. Microsoft.com/en-us/Library/aa394373(vs.85).aspx IIRC.
@Billy: Je ne sais pas que je comprends la question. Étant donné que nous n'avons pas l'application Web-activé, l'idée est sur l'installation qu'elle crachera d'un code spécifique à la machine pour leur envoi par courrier électronique. Prise en charge de générer un fichier de licence à l'aide de ce code renvoyé à l'utilisateur, qui le dépose simplement dans le bon dossier. Lorsque l'application démarre, il vérifie la licence est valide contre la clé spécifique à la machine de la manière.
Si vous voulez quelque chose d'un peu plus difficile de surfer que toute la machine elle-même peut vous dire, vous aurez probablement besoin de fournir une dongle USB dédiée à cette fin (non seulement un lecteur flash). P>
Quand j'ai regardé il y a quelques années, même les clés USB étaient allongées comme non sécurisées. Mais tout cela revient à $$ - combien d'argent vous investissez dans la sécurité vs le coût pour les personnes qui le craquent (plus combien cela vaut pour eux).
Oui, rien n'est sécurisé à 100%, c'est une question d'évaluation des risques.
J'ai suggéré cela mais le client n'allait pas pour cela. Les informations du PC sont belles, qui ne sont pas inquiètes pour l'usurpointe - mais cela n'a pas besoin de ne pas changer quand ils désactivent le WiFi ou quoi que ce soit.
Je soupçonne que la plupart des ordinateurs portables ont une carte réseau câblée. Vous pouvez essayer de lire l'adresse MAC à partir de celle-ci, même si elle n'est pas utilisée ou que le câble n'est pas connecté.
Que diriez-vous d'utiliser le numéro de série du disque dur où Windows est installé? p>
La fonction getvolumeInformation () sera vous donner un tel numéro de série. Pour accéder à l'ID attribué par le fournisseur HardDisk au lieu de l'ID attribué par Windows, vous pouvez utiliser la classe Win32_PhysicalMedia. P>
Pour déterminer le lecteur dans lequel Windows est installé, vous pouvez développer la variable% Windir "en utilisant la fonction expandenviravageStrings () p>
Une autre option, si votre architecture permet, est d'utiliser uuidcreate () pour générer un guid aléatoire au moment de l'installation et l'enregistrer en permanence dans le registre. Ce GUID peut ensuite être utilisé comme identifiant tant que le registre reste. Une nouvelle base de données de registre est généralement considérée comme une nouvelle installation. P>
Une troisième option consiste à avoir un serveur bien connu attribuer l'IDS. Lors du démarrage, le logiciel pourrait rechercher l'identifiant dans le registre et, si non trouvé, contacterait le serveur et l'approfondirait avec son adresse MAC, son nom d'hôte, son numéro de série HardDisk, SID de la machine et un nombre quelconque d'informations indentificielles (clés). p>
Le serveur détermine alors si le client est déjà enregistré ou non basé sur les informations données. Le serveur pourrait avoir une stratégie détendue et, par exemple, ne nécessite que la plupart des clés d'un match, de sorte que le mécanisme fonctionnerait même en cas d'effacement complet du registre et de la partie (mais pas toutes) du matériel était remplacé. p>
Que diriez-vous d'utiliser le numéro de série d'une CPU. Je me souviens que Microsoft a été utilisé pour fournir une API pour cela qui exécuterait le code d'assembleur nécessaire et vous donnerait toutes sortes d'informations sur la CPU, y compris le numéro de série. Je ne sais pas si cela fonctionne avec des copeaux AMD ou non, je pense que c'était spécifique Intel. P>
Identifiant CPU sûrement est suffisamment sécurisé et statique !! p>
Cela ne fonctionnerait pas. Le numéro de série de la CPU n'est pas lisible: Stackoverflow.com / Questions / 21642347 / CPU-ID-UTILISANT-C-WINDOWES
Je pense qu'il n'y a pas une méthode vraiment simple et unique jusqu'à présent découverte ici. P>
Cordialement Mickel. P>
Les identifiants matériels peuvent être sécurisés (difficiles à changer) ou uniques - jamais tous les deux.
@Chrisbecke pourquoi pas les deux?