security - Outils / stratégie d'obscurcissement .NET

Translate

Mon produit comporte plusieurs composants: ASP.NET, Windows Forms App et Windows Service. 95% environ du code est écrit en VB.NET.

Pour des raisons de propriété intellectuelle, je dois obscurcir le code, et jusqu'à présent j'utilise 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 devrais rechercher jusqu'à présent:

  • Sérialisation / désérialisation. Dans ma solution actuelle, je dis simplement à l'outilne paspour masquer tous les membres de données de classe, car la douleur de ne pas pouvoir charger des données qui ont été précédemment sérialisées est tout simplement trop grande.
  • Intégration avec le processus de construction
  • Travailler avec ASP.NET. Dans le passé, j'ai trouvé ce problème en raison de la modification des noms .dll (vous en avez souvent un par page) - que tous les outils ne gèrent pas bien.
This question and all comments follow the "Attribution Required."

Toutes les réponses

Joyce Lee
Translate

De retour avec .Net 1.1, l'obscurcissement était essentiel: la décompilation du code était facile, et vous pouviez passer de l'assembly, à l'IL, au code C # et le faire recompiler avec très peu d'effort.

Maintenant, avec .Net 3.5, je ne suis pas du tout sûr. Essayez de décompiler un assemblage 3.5; ce que vous obtenez est loin d'être compilé.

Ajoutez les optimisations de 3.5 (bien mieux que 1.1) et la façon dont les types anonymes, les délégués, etc. sont traités par réflexion (ils sont un cauchemar à recompiler). Ajoutez des expressions lambda, un compilateur 'magic' comme Linq-syntax etvar, et C # 2 fonctionne commeyield(ce qui entraîne de nouvelles classes avec des noms illisibles). Votre code décompilé est loin d'être compilable.

Une équipe de professionnels disposant de beaucoup de temps pourrait encore faire de l'ingénierie inverse, mais il en va de même pour tout code obscurci. Le code qu'ils en tirerait serait impossible à maintenir et très probablement très bogué.

Je recommanderais la signature de vos assemblys (ce qui signifie que si les pirates peuvent en recompiler un, ils doivent tous recompiler) mais je ne pense pas que l'obfuscation en vaille la peine.

La source
Translate

Nous avons essayé un certain nombre d'obfuscateurs. Aucun d'entre eux ne fonctionne sur une grande application client / serveur qui utilise la communication à distance. Le problème est que le client et le serveur partagent certaines dll et nous n'avons trouvé aucun obfuscateur capable de 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'obfuscation est un gros hack.

Même les problèmes qu'il aborde ne sont pas entièrement un problème réel. La seule chose que vous devez vraiment protéger est les chaînes de connexion, les codes d'activation, des éléments sensibles à la sécurité comme ça. Cette absurdité qu'une autre entreprise va rétroconcevoir l'ensemble de votre base de code et en créer un produit concurrent est quelque chose du cauchemar d'un manager paranoïaque, pas de la réalité.

La source
Translate

Je suis «Knee Deep» dans ce domaine maintenant, essayant de trouver une bonne solution. Voici mes impressions jusqu'à présent.

Xénocode- J'ai une ancienne licence pour Xenocode2005 que j'utilisais pour masquer mes assemblages .net 2.0. Cela fonctionnait bien sur 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 (plante), donc je dois et maintenant je dois acheter 'PostBuild2008' à un prix décevant 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 cela a bien fonctionné sur mon exécutable autonome. Le module Licences était également très bien et m'aurait économisé beaucoup d'efforts. Malheureusement, il manque une fonctionnalité clé et c'est la possibilité d'exclure des éléments de l'obscurcissement. Cela rend impossible d'obtenir le résultat dont j'avais besoin (fusionner plusieurs assemblages ensemble, masquer certains, pas masquer d'autres).

SmartAssembly- J'ai téléchargé Eval pour cela et cela a fonctionné parfaitement. 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. Cela semble inquiétant.

Confuseur- un projet open source qui fonctionne assez bien (pour confondre ppl, comme son nom l'indique).https://confuser.codeplex.com/
(ajouté par jgauffin)

Remarque: ConfuserEx serait "cassé" selonÉmission n ° 498sur leur dépôt GitHub.

La source
Translate

Si vous recherchez un logiciel gratuit, vous pouvez essayer DotObfuscator Community Edition fourni avec Visual Studio ouEazfuscator.NET.


Depuis le 29 juin 2012, Eazfuscator.NET est désormais commercial. La dernière version gratuite disponible est la 3.3.

La source
Eunice Lee
Translate

J'utilise smartassembly. Fondamentalement, vous choisissez une dll et elle la renvoie obscurcie. Cela semble bien fonctionner et je n'ai eu aucun problème jusqu'à présent. Très, très facile à utiliser.

La source
Jerome Lee
Translate

J'ai essayé presque tous les obfuscateurs du marché et SmartAssembly est le meilleur à mon avis.

La source
Yves Lee
Translate

J'utilise également SmartAssembly. J'ai trouvé que Ezrinz .Net Reactor était bien meilleur pour moi sur les applications .net. Il obscurcit, supporte Mono, fusionne les assemblages et il dispose également d'un très bon module de licence pour créer une version d'essai ou lier la licence à une machine particulière (très facile à implémenter). Le prix est également très compétitif et lorsque j'ai besoin de support, ils sont rapides.Eziriz

Pour être clair, je ne suis qu'un client qui aime le produit et qui n'a aucun lien avec l'entreprise.

La source
Carl Lee
Translate

La réponse courte est que vous ne pouvez pas.

Il existe divers outils qui rendront la lecture de votre code plus difficile pour quelqu'un - dont certains ont été signalés par d'autres réponses.

Cependant, tout cela rend la lecture plus difficile - ils augmentent l'effort requis, c'est tout. Souvent, cela suffit à dissuader les lecteurs occasionnels, mais quelqu'un qui est déterminé à fouiller dans votre code sera toujours en mesure de le faire.

La source
Madge Lee
Translate

Nous avons une application à plusieurs niveaux avec une interface asp.net et winform qui prend également en charge la communication à distance. Je n'ai eu aucun problème avec l'utilisation d'un obfuscateur à l'exception du type de cryptage qui génère un chargeur qui peut être problématique de toutes sortes de manières inattendues et ne vaut tout simplement pas la peine à mon avis. En fait, mon conseil serait plutôt du type "Évitez de chiffrer les obfuscateurs de type chargeur comme la peste". :)

D'après mon expérience, tout obfuscateur fonctionnera bien avec n'importe quel aspect de .net, y compris asp.net et la communication à distance, il vous suffit de devenir intime avec les paramètres et d'apprendre jusqu'où vous pouvez le pousser dans quelles zones de votre code. Et prenez le temps d'essayer la rétro-ingénierie sur ce que vous obtenez et voyez comment cela fonctionne avec les différents paramètres.

Nous en avons utilisé plusieurs au fil des ans dans nos applications commerciales et nous nous sommes installés sur l'obfuscateur d'épices de 9rays.net parce que le prix est correct, il fait le travail et ils ont un bon support bien que nous n'ayons plus vraiment besoin du support depuis des années, mais pour être honnête Je ne pense pas que l'obfuscateur que vous utilisez ait vraiment d'importance, les problèmes et la courbe d'apprentissage sont tous les mêmes si vous voulez qu'il fonctionne correctement avec Remoting et asp.net.

Comme d'autres l'ont mentionné, tout ce que vous faites vraiment est l'équivalent d'un cadenas, empêchant les personnes honnêtes de sortir et / ou rendant plus difficile la simple recompilation d'une application.

L'octroi de licences est généralement le domaine clé pour la plupart des gens et vous devriez de toute façon utiliser une sorte de système de certificat signé numériquement pour les licences. Votre plus grande perte proviendra du partage occasionnel de licences si vous n'avez pas de système intelligent en place, les personnes qui enfreignent le système de licences n'achèteraient jamais.

Il est vraiment facile d'aller trop loin et d'avoir un impact négatif sur vos clients et votre entreprise, faites ce qui est simple et raisonnable, puis ne vous inquiétez pas.

La source
Eric Lee
Translate

Au cours des deux derniers jours, j'ai expérimenté Dotfuscator Community Edition advanced (un téléchargement gratuit après l'enregistrement du CE de base fourni avec Visual Studio).

Je pense que la raison pour laquelle plus de gens n'utilisent pas l'obscurcissement comme option par défaut est que c'est un problème sérieux par rapport au risque. Sur des projets de test plus petits, je pouvais exécuter le code obscurci avec beaucoup d'efforts. Déployer un projet simple via ClickOnce était gênant, mais réalisable après avoir signé manuellement les manifestes avec mage. Le seul problème était que, en cas d'erreur, la trace de la pile est revenue obscurcie et le CE n'a pas de désobfuscateur ou de clarificateur emballé.

J'ai essayé de brouiller un vrai projet qui est basé sur VSTO dans Excel, avec l'intégration de Virtual Earth, beaucoup d'appels de service Web et un conteneur IOC et beaucoup de réflexion. C'était impossible.

Si l'obfuscation est vraiment une exigence critique, vous devez concevoir votre application en gardant cela à l'esprit dès le début, en testant les versions obscurcies au fur et à mesure de votre progression. Sinon, si c'est un projet assez complexe, vous allez vous retrouver avec une grosse douleur.

La source
Theobald Lee
Translate

Crypto Obfuscatorrépondre à toutes vos préoccupations et scénarios. Il :

  1. Exclut automatiquement les types / membres de l'obscurcissement en fonction des règles. Les types / champs sérialisés sont l'un d'entre eux.
  2. Il peut être intégré au processus de construction à l'aide de MSBUild.
  3. Prend en charge les projets ASP.Net.
La source
Rae Lee
Translate

J'ai récemment essayé de canaliser la sortie d'un obfuscateur gratuit dans un autre obfuscateur gratuit - à savoir Dotfuscator CE et le nouvel obfuscateur Babel sur CodePlex. Plus de détailssur mon blog.

En ce qui concerne la sérialisation, j'ai déplacé ce code dans une DLL différente et l'ai inclus dans le projet. J'ai pensé qu'il n'y avait pas de secrets là-dedans qui ne soient de toute façon pas dans le XML, donc cela n'avait pas besoin d'être obscurci. S'il y a du code sérieux dans ces classes, l'utilisation de classes partielles dans l'assembly principal devrait le couvrir.

La source
Wilbur Lee
Translate

Vous devez utiliser ce qui est le moins cher et le plus connu pour votre plate-forme et l'appeler un jour. L'obscurcissement des langages de haut niveau est un problème difficile, car les flux d'opcode VM ne souffrent pas des deux plus gros problèmes que font les flux d'opcode natifs: l'identification de fonction / méthode et l'alias de registre.

Ce que vous devez savoir sur l'inversion de bytecode, c'est qu'il est déjà une pratique standard pour les testeurs de sécurité d'examiner le code X86 pur et d'y trouver des vulnérabilités. Dans le X86 brut, vous ne pouvez même pas nécessairement trouver des fonctions valides, encore moins suivre une variable locale tout au long d'un appel de fonction. Dans presque aucun cas, les inverseurs de code natifs n'ont accès aux noms de fonction et de variable - à moins qu'ils n'examinent le code Microsoft, pour lequel MSFT fournit utilement ces informations au public.

"Dotfuscation" fonctionne principalement en brouillant les noms de fonction et de variable. Il est probablement préférable de le faire que de publier du code avec des informations de niveau de débogage, où le réflecteur abandonne littéralement votre code source. Mais tout ce que vous faites au-delà de cela entraînera probablement des rendements décroissants.

La source
Stan Lee
Translate

Je n'ai eu aucun problème avec Smartassembly.

La source
Translate

Vous pouvez utiliser "Dotfuscator Community Edition" - il est fourni par défaut dans Visual Studio 2008 Professional. Vous pouvez en savoir plus sur:

http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html

La version "professionnelle" du produit coûte de l'argent mais est meilleure.

Avez-vous vraiment besoin de votre code obscurci? Habituellement, il y a très peu de problèmes avec votre application en cours de décompilation, sauf si elle est utilisée à des fins de sécurité. Si vous craignez que les gens «volent» votre code, ne le soyez pas; la grande majorité des personnes qui consultent votre code le seront à des fins d'apprentissage. Quoi qu'il en soit, il n'y a pas de stratégie d'obfuscation totalement efficace pour .NET - quelqu'un avec suffisamment de compétences sera toujours en mesure de décompiler / modifier votre application.

La source
Glenn Lee
Translate

Évitez Reactor. C'est complètement inutile (et oui j'ai payé une licence). Xenocode était le meilleur que j'ai rencontré et j'ai acheté une licence pour aussi. Le support était très bon mais je n'en avais pas vraiment besoin car cela fonctionnait. J'ai testé tous les obfuscateurs que j'ai pu trouver et ma conclusion est que xenocode était de loin le plus robuste et faisait le meilleur travail (également possibilité de post-traiter votre exe .NET dans un exe natif que je n'ai vu nulle part ailleurs.).

Il existe deux différences principales entre le réacteur et le xénocode. Le premier est que Xenocode fonctionne réellement. La seconde est que la vitesse d'exécution de vos assemblys n'est pas différente. Avec le réacteur, il était environ 6 millions de fois plus lent. J'ai également eu l'impression que le réacteur était une opération d'un seul homme.

La source
Robert Lee
Translate

J'ai trouvé qu'Agile.Net fournissait une assez bonne protection pour votre assemblage .Net car il offre non seulement l'obscurcissement mais aussi le cryptage. Téléchargez un parcours gratuit.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

La source
Cheryl Lee
Translate

J'ai obscurci le code dans la même application depuis .Net 1, et cela a été un casse-tête majeur du point de vue de la maintenance. Comme vous l'avez mentionné, le problème de sérialisation peut être évité, mais il est vraiment facile de faire une erreur et d'obscurcir quelque chose que vous ne vouliez pas obscurcir. Il est facile de casser la compilation ou de modifier le modèle d'obfuscation et de ne pas pouvoir ouvrir les anciens fichiers. De plus, il peut être difficile de savoir ce qui ne va pas et où.

Notre choix était Xenocode, et si je devais refaire ce choix aujourd'hui, je préférerais ne pas obscurcir le code ou utiliser Dotfuscator.

La source
Una Lee
Translate

Voici un document de Microsoft eux-mêmes.J'espère que ça aide ..., c'est à partir de 2003, mais cela pourrait encore être pertinent.

La source
Benjamin Lee
Translate

Nous utilisons SmartAssembly sur notre client Windows. Fonctionne très bien.

Ajoute également des problèmes supplémentaires. L'impression de vos noms de classe dans les fichiers journaux / exceptions doit être désobscurcie. Et bien sûr, ne peut pas créer une classe à partir de son nom. C'est donc une bonne idée de jeter un œil à votre client et de voir quels problèmes vous pouvez obtenir en obscurcissant.

La source
Eugene Lee
Translate

Tout dépend du langage de programmation que vous utilisez. Lire l'article:Code obscurci

La source
Dylan Lee
Translate

le moyen gratuit serait d'utiliser dotfuscator depuis Visual Studio, sinon vous devrez acheter un obfuscator comme Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)

La source
Translate

J'ai dû utiliser une protection d'obfuscation / ressource dans mon dernier rpoject et j'ai trouvéCrypto Obfuscatorcomme un outil agréable et simple à utiliser. Le problème de sérialisation n'est qu'une question de paramètres dans cet outil.

La source
Translate

Il existe une bonne version open source appelée Obfuscar. Semble bien fonctionner. Les types, propriétés, champs, méthodes peuvent être exclus. L'original est ici:https://code.google.com/p/obfuscar/, mais comme il ne semble plus être mis à jour, quelqu'un l'a fait ici:https://obfuscar.codeplex.com/

La source
Cathy Lee
Translate

Vous pouvez également envisager de nouvelles technologies de protection de code telles queMétaforiqueetViLabset les nouvelles technologies de protection contre la copie de logiciels telles queByteShield. Divulgation: je travaille pour ByteShield.

La source
Shirley Lee
Translate

J'utilise également smartassembly. Cependant, je ne sais pas comment cela fonctionne pour une application Web. Cependant, je tiens à souligner que si votre application utilise une protection de type shareware, assurez-vous qu'elle ne vérifie pas une licence avec un retour booléen. il est trop facile de cracker des octets.http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

La source
Amanda Lee
Translate

SmartAssembly est génial, j'ai été utilisé dans la plupart de mes projets

La source
Murray Lee
Translate

J'ai essayé la version démo d'Eziriz .... Je l'ai aimé. Mais jamais apporté le logiciel.

La source
Translate

Obscurcir n'est pas une vraie protection.

Si vous avez un fichier .NET Exe, il existe unBien mieuxSolution.

j'utiliseThemidaet peut dire que cela fonctionne très bien.

Le seul inconvénient de Themida est qu'il ne peut pas protéger les DLL .NET. (Il protège également le code C ++ dans Exe et DLL)

Themida est de loin moins cher que les obfuscators mentionnés ici et est le meilleuranti le piratage protectionsur le marché. Il crée une machine virtuelle où les parties critiques de votre code sont exécutées et exécute plusieurs threads qui détectent la manipulation ou les points d'arrêt définis par un pirate. Il convertit le .NET Exe en quelque chose que Reflector ne reconnaît même plus comme un assembly .NET.

Veuillez lire la description détaillée sur leur site Web:http://www.oreans.com/themida_features.php

La source
Rupert Lee
Translate

J'ai essayé un produit appelé Rummage et il fait un bon travail en vous donnant un certain contrôle ... Bien qu'il manque beaucoup de choses qu'offre Eziriz mais le prix du Rummage est trop bon ...

La source