Récemment, en écrivant un logiciel, j’ai eu une idée : si je lance un programme .exe bien protégé, mais que si la DLL n’est pas protégée, mon application utilisera le fichier dll, est-ce que d’autres déboguent mon programme via le fichier dll ?
Aujourd’hui, écrivons un programme spécial pour le tester, utilisons l’application pour appeler une méthode dans la DLL, comme suit :
Le code est simple :
Code DLL :
Code d’application :
Ensuite, je crée un nouveau projet, une nouvelle bibliothèque de classes, et copie le même type et le même fichier CS, comme suit :
Remplaçons la dll générée par la figure suivante :
Le programme appelle avec succès la méthode dll que nous avons forgée, comment pouvons-nous empêcher que la dll que nous avons générée soit forgée ?
J’ai eu une idée simple : ajouter un fichier de ressource à l’application, remplir le fichier dll à charger, ainsi que la valeur md5 du fichier, le point d’entrée de l’exécution du programme, puis vérifier d’abord la valeur md5 du dll à charger
Si la valeur MD5 du fichier DLL est incohérente avec la valeur MD5 du fichier dans la liste des ressources, cela signifie que le fichier DLL a été falsifié ou altéré de manière malveillante. Cela n’a pas été pratiqué, c’est logiquement faisable !
|