J'ai un ancien projet en VB qui a créé un code pc unique à partir de l'adresse MAC et de l'identifiant du disque. Cela a été utilisé pour identifier un pc afin que les informations d'identification ne puissent pas être utilisées entre les pcs.
Ce projet a migré vers C #, et j'ai encapsulé cette logique dans un DLL qui appelle simplement une méthode qui retourne le pc_id.
Le problème que j'ai maintenant, c'est qu'il est sacrément facile de simplement créer un nouveau DLL qui a le même nom de classe et la même signature de méthode et de retourner tout pc_id qu'ils souhaitent.
Comment puis-je m'assurer que le DLL que mon programme référence est bien le mien?
J'ai pensé à comparer le hachage de mon DLL avec un code dur, mais est-ce sûr entre différents systèmes d'exploitation? Le hachage du fichier changera-t-il entre les systèmes de fichiers?
Ou quelle méthode est préférée pour garantir l'intégrité/l'origine des fichiers?
Pour les binaires Windows, je suggérerais de signer numériquement le fichier.
Lorsque vous utilisez des certificats, presque la même technologie que HTTPS.
Introduction à la signature de code
Ensuite, vous devez utiliser les API de chiffrement Windows pour vérifier la signature des DLL chargées.
Je sais que pour cela, il faut beaucoup de travail. Mais, pour Windows, il s'agit du chemin le plus sûr . Si SHA ne suffisent pas, c'est l'alternative.
Avec le faible niveau de protection offert par l'adresse MAC, je ne me dérangerais pas. Changer l’adresse MAC demande moins d’efforts que d’échanger votre DLL.
Les hachages ne changent pas entre les systèmes de fichiers. Vérifiez le hachage SHA1 du fichier par rapport à la "bonne" valeur connue dans votre code et vous devriez être absent!
Si votre objectif est d'empêcher les informations d'identification d'être utilisées sur d'autres PC, jetez un œil à API de protection des données Windows . Avec lui, vous pouvez crypter vos informations d'identification, ou toutes autres données, et elles ne seront décryptables que sur cet ordinateur (ou uniquement sous le compte d'utilisateur Windows actuel, si vous en avez besoin).
Non seulement l'adresse MAC n'est pas très protectrice, mais la saisir sur un ID de disque est une mauvaise chose - tous les "disques" ne renvoient pas un ID de disque cohérent. Le problème est que certains contrôleurs RAID répondent à une demande d'ID de disque en l'obtenant de n'importe quel lecteur disponible.
Sans parler de ce qui se passe si quelqu'un met à niveau du matériel.