165 votes

Outils/stratégie d'obfuscation .NET

Mon produit a plusieurs composantes : ASP.NET, Windows Forms App et Windows Service. Environ 95 % du code est écrit en VB.NET.

Pour des raisons de propriété intellectuelle, je dois obfusquer le code, et jusqu'à présent j'utilisais une version de dotfuscator qui a maintenant plus de 5 ans. Je pense qu'il est temps de passer à un outil de nouvelle génération. Ce que je recherche, c'est une liste d'exigences que je devrais prendre en compte lors de la recherche d'un nouvel obfuscateur.

Ce que je sais que je dois rechercher jusqu'à présent :

  • Sérialisation/Dé-sérialisation . Dans ma solution actuelle, j'indique simplement à l'outil no pour obscurcir les membres des données de la classe, car la douleur de ne pas pouvoir charger des données qui ont été sérialisées auparavant est tout simplement trop grande.
  • Intégration au processus de construction
  • Travailler avec ASP.NET . Dans le passé, j'ai trouvé cela problématique en raison des changements de noms de .dll (il y en a souvent un par page), ce que tous les outils ne gèrent pas bien.

0 votes

Plusieurs doublons : google.com/

0 votes

0 votes

Voir Agile.net .NET Obfuscator pour une solution alternative d'obscurcissement de votre code. Vérifiez en particulier sa fonction de virtualisation du code.

50voto

Judah Himango Points 27365

Nous avons essayé un certain nombre d'obfuscateurs. Aucun d'entre eux ne fonctionne sur une grande application client/serveur qui utilise le remoting. Le problème est que le client et le serveur partagent certaines dlls, et nous n'avons pas trouvé d'obfuscateur qui puisse le gérer.

Nous avons essayé DotFuscator Pro, SmartAssembly, XenoCode, Salamander, et plusieurs petites applications dont les noms m'échappent.

Franchement, je suis convaincu que l'obscurcissement est un grand hack.

Même les problèmes qu'il aborde ne sont pas entièrement réels. La seule chose que vous devez vraiment protéger, ce sont les chaînes de connexion, les codes d'activation, les éléments sensibles de sécurité de ce genre. Cette absurdité selon laquelle une autre société va faire de l'ingénierie inverse sur l'ensemble de votre base de code et créer un produit concurrent à partir de celle-ci est un cauchemar de gestionnaire paranoïaque, pas une réalité.

1 votes

La plupart des outils d'obfuscation ont la possibilité d'exclure des classes ou des méthodes, etc... En fait, Dotfuscator a introduit une fonctionnalité qui, si elle détecte certaines utilisations des classes, l'exclut automatiquement pour vous.

1 votes

Dotfuscator lui-même est une application client-serveur utilisant des services web (si vous activez leur fonctionnalité SoS), et Dotfuscator s'utilise lui-même pour s'obfusquer. Cela ne devrait donc pas être un problème.

14 votes

Bravo Judah ! La seule façon de rester en tête est de développer un nouveau code, meilleur, et non de s'accrocher à un code que vous avez déjà écrit. Vous finissez par investir du temps, des efforts et peut-être même de l'argent dans quelque chose qui n'est pas pertinent. L'obscurcissement n'en vaut pas la peine.

47voto

Michael Dausmann Points 985

J'y suis plongé jusqu'aux genoux et j'essaie de trouver une bonne solution. Voici mes impressions jusqu'à présent.

Xenocode - J'ai une ancienne licence de Xenocode2005 que j'utilisais pour obscurcir mes assemblages .net 2.0. Cela fonctionnait bien sous XP et était une solution décente. Mon projet actuel est .net 3.5 et je suis sur Vista, le support m'a dit d'essayer mais la version 2005 ne fonctionne même pas sur Vista (elle plante) donc je dois maintenant acheter 'PostBuild2008' à un prix incroyable de 1900 $. C'est peut-être un bon outil, mais je ne vais pas le découvrir. Trop cher.

Reactor.Net - C'est un prix beaucoup plus attractif et il a bien fonctionné sur mon Standalone Executeable. Le module de licence est également intéressant et m'aurait épargné beaucoup d'efforts. Malheureusement, il lui manque une fonctionnalité clé, à savoir la possibilité d'exclure des éléments de l'obfuscation. Cela rend impossible l'obtention du résultat dont j'avais besoin (fusionner plusieurs assemblages, en obfusquer certains, ne pas obfusquer les autres).

SmartAssembly - J'ai téléchargé l'Eval pour cela et cela a fonctionné sans problème. J'ai pu réaliser tout ce que je voulais et l'interface était de première classe. Le prix est encore un peu élevé.

Dotfuscator Pro - Impossible de trouver le prix sur le site web. Actuellement en discussion pour obtenir un devis. C'est de mauvais augure.

Confuser - un projet open source qui fonctionne très bien (pour confondre les gens, comme son nom l'indique).

Note : ConfuserEx est apparemment "cassé" d'après l'étude de la Commission européenne. Numéro 498 sur leur repo GitHub.

8 votes

Pouvez-vous afficher combien dotfuscator a cité ?

6 votes

@Anthony J'ai récemment acheté une licence au début de 2011. Le devis était de 2475 USD pour le minimum de 1 machine de construction + 1 licence de développeur. Comprend 12 mois de mises à jour et de support.

0 votes

@Yoshi merci de me le faire savoir, j'apprécie beaucoup.

45voto

Keith Points 46288

À l'époque de .Net 1.1, l'obscurcissement était essentiel : la décompilation du code était facile, et vous pouviez passer de l'assemblage, à l'IL, au code C# et le faire compiler à nouveau avec très peu d'efforts.

Maintenant, avec .Net 3.5, je ne suis plus du tout sûr. Essayez de décompiler un assemblage 3.5 ; ce que vous obtenez est très loin de la compilation.

Ajoutez les optimisations de la 3.5 (bien meilleures que celles de la 1.1) et la façon dont les types anonymes, les délégués, etc. sont gérés par la réflexion (c'est un cauchemar de les recompiler). Ajouter les expressions lambda, la "magie" du compilateur comme la syntaxe Linq et le langage de programmation. var et des fonctions C#2 comme yield (ce qui donne lieu à de nouvelles classes avec des noms illisibles). Votre code décompilé se retrouve très loin d'être compilable.

Une équipe professionnelle disposant de beaucoup de temps pourrait toujours le désosser, mais il en va de même pour tout code obscurci. Le code qu'ils obtiendraient serait impossible à maintenir et très probablement très bogué.

Je recommanderais de signer vos assemblages par une clé (ce qui signifie que si les pirates peuvent en recompiler un, ils doivent recompiler tous les assemblages), mais je ne pense pas que l'obscurcissement en vaille la peine.

134 votes

Totalement en désaccord. La signature ne peut pas remplacer l'obscurcissement. La signature est destinée à empêcher le piratage de votre code. Mais si vous voulez cacher vos idées, vos algorithmes, etc., l'obscurcissement est le seul moyen.

25 votes

Je ne pense pas que la signature puisse remplacer l'obscurcissement, elle rend simplement le piratage beaucoup plus difficile. L'obfuscation ne parvient pas à cacher votre idée - s'ils veulent la copier, ils le feront de toute façon, et l'obfuscation ne rendra même pas les choses beaucoup plus difficiles. En particulier, comme les algorithmes sont tous des opérateurs, l'obfuscation n'a pas beaucoup d'effet sur eux - ils sont généralement l'une des choses les plus faciles à extraire.

6 votes

L'obscurcissement peut ne pas être utile si vous parlez d'une équipe disposant de beaucoup de ressources, mais l'obscurcissement est excellent pour se protéger contre le développeur "moyen" qui ne veut rien de plus que d'utiliser Reflector pour ouvrir votre assemblage et enregistrer le code source en tant que projet et faire des ajustements. L'obscurcissement a sa place et l'exclure complètement est une mauvaise attitude à avoir. C'est une couche de défense.

23voto

Sam Points 2005

Si vous en cherchez un gratuit, vous pouvez essayer DotObfuscator Community Edition qui est fourni avec Visual Studio ou Eazfuscator.NET .


Depuis le 29 juin 2012 Eazfuscator.NET est maintenant commercial. La dernière version gratuite disponible est la 3.3.

18voto

Shawn Points 8120

J'ai utilisé smartassembly. En gros, tu choisis une dll et elle te la renvoie obfusquée. Cela semble bien fonctionner et je n'ai eu aucun problème jusqu'à présent. Très, très facile à utiliser.

6 votes

Le Smartassembly est tout à fait inutile. Un pirate place votre application dans DumbAssembly et toute la "protection" est supprimée en un clic de souris : woodmann.com/collaborative/tools/index.php/Dumbassembly

2 votes

Pour l'instant, la navigation sécurisée de Google signale le site de Woodmann comme étant dangereux. De plus, le site de Woodmann contient un article entier sur le fait qu'il a déjà été victime d'une infection par un logiciel malveillant. Je n'ai donc pas vraiment envie de naviguer sur son site si Google ne lui fait pas confiance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X