7
votes

Comment générer un numéro de série unique de machine à Delphi?

J'ai question comment générer un numéro de série unique de machine à Delphi? J'ai essayé de faire cela en utilisant l'ID la carte mère ou le processeur, mais malheureusement, il est malheureusement supporté. Les numéros de série de partitions, etc. tombent, car cela évolue après le formaté. Je cherche quelque chose qui ne change pas après le formaté. Quelqu'un a-t-il une idée?


5 commentaires

Vérifiez cette question Stackoverflow.com/Questtions/1852134/...


Voulez-vous vraiment générer un numéro de série, ou demandez-vous comment découvrir les différents numéros de série qui sont déjà là?


Que se passe-t-il si votre utilisateur n'est pas toujours sur la même machine? Par exemple, quand il / elle travaille dans un environnement VDI (Virtual Desktop)?


Je suppose que la réponse dépend de la raison pour laquelle vous avez besoin de cela. C'est à dire. Qu'est-ce que tu vas faire avec cette information.


Je vois tellement de mauvaise réponse ici. La ligne directrice n'utilise jamais un identifiant / numéro «Soft» (comme Mac, WMI, Registre, ID de volume). Utilisez uniquement du matériel réel écrit (qui est réadis!) ID.


7 Réponses :


1
votes

J'ai eu un problème similaire dans les bons vieux Dos Days. J'ai découvert que la ROM du matériel installé c'est-à-dire. Carte vidéo, contrôleurs de disque Les ports Seriel, etc. ont été accessibles directement, car ils sont mappés sur la mémoire. Cela signifie que j'ai pu créer une liste de matériel installé et l'utiliser pour générer un "numéro de série", qui identifié de manière unique chaque ordinateur (jusqu'à ce que la configuration matérielle ait été modifiée). Je suis sûr que quelque chose de similaire est aussi possible aujourd'hui.

Vérifiez http://duartes.org/gustavo/blog / Post / Motherboard-Chipsets-Memory-Plan , si vous souhaitez utiliser cette approche.

considère

  • Frank

1 commentaires

Une application Delphi peut-elle vraiment accéder à la mémoire arbitraire? Autant que je connaisse les applications Windows ne soit pas censée pouvoir accéder à la mémoire qui ne leur était pas spécifiquement allouée par le système d'exploitation!



1
votes

Souvent, l'adresse MAC de la (a) la carte réseau est utilisée, il existe plusieurs façons d'interroger l'adresse MAC (à Delphi), mais le moyen le plus simple / le plus propre est probablement d'utiliser le GettaPaptersInfo API.


2 commentaires

Sachez simplement que les cartes WiFi peuvent apparaître / disparaître à volonté, WHNE L'utilisateur fermeture d'une carte Windows la supprime de la liste et la commande n'est pas toujours la même. L'adresse MAC peut également être modifiée par l'utilisateur s'il a la permission de modifier les paramètres matériels.


ID MAC ou ID de volume est totalement peu fiable car il peut être aussi facilement changé (juste à une recherche Google et vous verrez de nombreux outils gratuits qui le font). Le même pour WMI.



1
votes

Voici une solution simple

  • Générez un GUID
  • enregistrer la valeur du GUID dans le registre
  • Utilisez la valeur du GUID comme numéro de série

    Si vous inquiet sur la sécurité, utilisez un hachage sur le (guid + certaines données secrètes)


2 commentaires

Cela ne satisfera pas le besoin de l'OP, car vous ne pouvez jamais l'utiliser pour identifier la machine plus tard. c'est-à-dire que si vous essayez de licencer un logiciel de sorte qu'il ne puisse fonctionner que sur "cette machine", vous ne pouvez pas générer un nouveau GUID demain (ou l'année prochaine, ou après réinstaller Windows, etc.) et obtenir le même guide pour identifier la machine. Même 1 ms plus tard, cela ressemble à un PC différent.


ID MAC ou ID de volume est totalement peu fiable car il peut être aussi facilement changé (juste à une recherche Google et vous verrez de nombreux outils gratuits qui le font). Le même pour WMI. Mais la solution de registre ????????????????????? Pas une solution !!!!!!



6
votes

Inside Bibliothèque JCL , il existe plusieurs fonctions très utiles pour ce sujet: < Pré> xxx


0 commentaires

4
votes

Qu'est-ce que vous êtes après, c'est en fait une sorte d'empreinte "matérielle", pas un "numéro de série". Le problème de cette approche est que ce n'est pas fiable à 100%. Preuve: Microsoft n'a pas réussi à trouver un moyen de limiter correctement le logiciel OEM à un seul ordinateur, vous pouvez réinstaller une licence OEM sur un nouvel ordinateur après un certain temps! Une fois que vous êtes d'accord, vous ne pouvez pas y avoir une solution parfaite, vous pouvez regarder vos options et essayer de recevoir quelque chose suffisant.

Pour mes applications, je crée une empreinte digitale basée sur des informations retournées par GetSysteminfo, GetVolumeInformation et (pour la partition C: ') et une sélection de clés de registre de HKLM \ Hardware (beaucoup de clés de registre en fait, tout sauf usb , truc de clavier et souris). Je lis des informations matérielles auprès du registre car une application Windows ne peut pas vraiment accéder au matériel directement (les approches de style DOS ne peuvent pas fonctionner), et parce que je n'ai pas le temps de trouver des moyens de déterminer les informations relatives au matériel pour beaucoup de dispositifs différents.

Mon approche présente les inconvénients suivants:

  • utilise le numéro de série de partition, comme défini par format. Un format changerait clairement l'empreinte digitale.
  • utilise des informations sur les pilotes installés. La mise à jour d'un pilote pourrait réellement changer l'empreinte digitale! Déplacer une carte d'un port PCI à un autre pourrait changer l'empreinte digitale.

    Néanmoins, même avec toutes ces informations changeantes prises en compte, je reçois des collisions: quelque chose comme 1/1000 ordinateurs! Il y a plusieurs facteurs au travail ici:

    • Big OEM Construisez de nombreux ordinateurs à l'aide du même matériel. Ils clonent également des disques de disque dur afin d'accélérer l'installation de logiciels afin que différents PC puissent obtenir le même numéro de série.
    • Je construis un hachage très court de toutes ces informations, suffisamment courts pour que les gens puissent me le lire au téléphone sans trop d'erreurs.

      Ce système fonctionne pour moi, mais cela ne fonctionnera pas pour vous si vous prévoyez de ré-identifier des ordinateurs une fois qu'ils sont réinstallés.


3 commentaires

Je pense que si vous avez ajouté une adresse MAC de l'adaptateur Ethernet principal à bord (en supposant y en assumant une), vous devriez être capable d'éliminer les collisions.


Avez-vous un échantillon ou un code de test pour votre solution?


L'ID de volume est totalement peu fiable car il peut être aussi facilement modifié.



3
votes

Vous pouvez tester glibwmi qui extrait des informations de plusieurs composants sur Windows.
C'est gratuit et source incluse. Vous pouvez le trouver sur Mon Web ou dans Sourceforge .

Texte alt http://img175.imageshack.us/img175/1250/imagen344 .png

Inclure les composants pour biosinfo, diskinfo, processorinfo, ...

Avec ces trois composants, vous pouvez obtenir des informations comme ceci:

Texte alt http://img690.imagesShack.us/img690/6006/IMAGEN349 .png

Vous pouvez trouver la bin / exe of genericdemo (tous les composants) ici ; Vous pouvez tester toutes les informations que vous pouvez revenir à ces composants.


1 commentaires

J'ai trouvé cette bibliothèque totalement peu fiable pour ce travail (récupération des IDS). La bibliothèque fournit des informations matérielles non des informations matérielles.



0
votes

J'ai tendance à être d'accord avec le camp "On ne peut pas être fait". Au moins pas 100%, mais cela peut probablement être fait "assez bon" pour garder l'utilisateur moyen en ligne.

et si cela peut être fait, il a probablement été fait. Avez-vous vérifié à Tourry de Delpi300, etc. (peut-être même Sourceforge, bien que vous puissiez devoir traduire en Delphes).

http://www.google.com.sg/search?hl=fr&source=HP&q=how+to+Generate+Nique+Serial+Number+OfMachine+in+delphi a réellement l'air prometteur


0 commentaires