Cacher des données dans une application C# avec l'obfuscation

 

Lorsqu’on développe une application WinForm ou WPF en .Net, on peut être amené à avoir envie de stocker des informations qui doivent rester confidentielles, comme une clé de cryptage ou un morceau de code. Malheureusement, en .Net, tout ce qui est compilé peut être très simplement décompilé Frown !

Ainsi, si vous développez, par exemple, une application de chiffrement comme celle-ci :

N’importe qui peut, en lançant JustDecompile (ou n’importe quel autre décompilateur .Net), naviguer dans votre code pour trouver ce que vous auriez aimé cacher : la clé de cryptage de votre application.

Vous vous dites qu’ici ce n’est pas si grave... Mais si l’application stockait dans son fichier de configuration des informations d’authentification chiffrées, est-ce que ce serait grave ? Bien sûr ! Une autre personne ayant accès au fichier de configuration et à l’application pourrait très simplement récupérer les informations d’authentification et les utiliser ! Surprised

Comment faire pour cacher des données dans ce cas ?

Il n’y a, concrètement, aucun moyen de cacher des données dans une application .Net... N’importe qui d’assez déterminé pourra toujours se débrouiller pour y accéder... Cependant, vous pouvez toujours compliquer la vie du pirate à l’aide de l’obfuscation !

"Mais dis voir Tommy, qu’est ce que l’obfuscation ? Undecided"

D'après cette chère Wikipedia : "L'obfuscation, ou assombrissement, est une stratégie de protection de la vie privée qui consiste à publier en quantité des informations. De cette manière, on tente de "noyer" les informations existantes que l'on souhaite cacher."

Ainsi, en utilisant l’obfuscation sur notre programme, on le rendra bien plus difficile à lire et à comprendre.

Pour faire cela, j’ai trouvé un petit freeware très simple capable d’obfuscer en quelques clics un programme (ou une bibliothèque) .Net : EasyObfuscator.NET. Il vous suffit de le télécharger ici et de l’installer.

Une fois ceci fait, lancez-le, et vous vous retrouverez devant cette fenêtre :

Vous n’avez plus qu’à faire glisser votre .exe ou votre .dll dans l’application, et à attendre la fin du traitement :

Et voilà, votre objet a été obfuscé Cool ! Ouvrons-le maintenant avec JustDecompile :

On peut voir que tous les noms de méthodes / propriétés ont disparu ! Ca ne va pas simplifier la vie du petit malin qui essaie de décompiler votre application !

Enfin, si la personne arrive (par miracle Wink) à trouver la bonne méthode, voilà ce qu’elle verra :

Vous vous doutez bien que désormais, la personne mal intentionnée qui naviguera dans votre application dans l’espoir d’y retrouver la clé de chiffrement abandonnera vite, à moins d’être vraiment déterminée ! Laughing

(Imaginez-vous devoir naviguer dans des milliers de lignes de codes anonymes qui ne comportent que des adresses mémoires !)

Cependant, l’obfuscation est un processus qui alourdit le fonctionnement de l’application / la bibliothèque... Etant donné qu’on rajoute des données, les traitements et le poids des dll seront forcément plus conséquents. Frown

C’est donc à vous de voir si ça vaut le coup ou non, sachant qu’une personne décidée pourra toujours reconstituer les données !

J’espère que cet article vous a plu. Si vous connaissez d’autres façons de cacher des données au sein d’un programme C#, n’hésitez pas à les partager à travers les commentaires !

image modifiée de DominÖ, sous licence CC

Bienvenue

Logo Tommy

Bonjour à tous et bienvenue sur mon blog. Je me présente : Tommy, ingénieur développeur .Net.

Que trouverez-vous ici ? Beaucoup de choses, principalement mon point de vue sur l'actualité numérique, mais également des infos diverses, des idées, des astuces pour mieux développer, des bouts de code, ...

N'hésitez pas m'ajouter dans vos favoris ou à me suivre sur Facebook / Twitter !

Bonne visite !

Liens

Raccourci pour les développeurs : http://dev.howtommy.net

Mes liens dédiés aux développeurs : http://liens.howtommy.net/?searchtags=d%C3%A9veloppement

Commentaires

Comment RSS

Par mois

Dernier posts

Hall of fame

microsoft certified professional