.NET de l'obscurcissement des outils de stratégie/[fermé]
mon produit a plusieurs composants: ASP.NET, Windows Forms App and 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'ai utilisé une version de dotfuscator qui a maintenant plus de 5 ans. Je pense qu'il est temps de passer à un nouvel outil de nouvelle génération. Ce que je cherche est une liste d'exigences que je devrais considérer lors de la recherche d'un nouvel obfuscator.
Ce que je sais que je devrais chercher bien loin:
- la Sérialisation/Dé-sérialisation . Dans ma solution actuelle, je dis simplement à l'outil et non d'obscurcir les membres de données de classe parce que la douleur de ne pas être en mesure de charger des données qui a été précédemment sérialisé est tout simplement trop grande.
- intégration au processus de construction
- travaillant avec ASP.NET . Dans le passé, j'ai trouvé cela problématique à cause du changement .dll noms (Vous avez souvent un par page) - qui ne sont pas tous des outils manier bien.
30 réponses
de retour avec .Net 1.1 l'obfuscation était essentielle: décompiler le code était facile, et vous pouviez passer de l'assemblage, à IL, au C# code et le faire compiler à nouveau avec très peu d'effort.
maintenant avec .Net 3.5 Je ne suis pas du tout sûr. Essayez de décomposer un assemblage 3.5; ce que vous obtenez est loin de compiler.
ajouter les optimisations à partir de 3.5 (bien mieux que 1.1) et la façon dont les types anonymes, les délégués et ainsi de suite sont traités par la réflexion (ils sont un cauchemar pour recompiler). Ajouter des expressions lambda, compilateur 'magic' comme la syntaxe Linq et var
, et des fonctions C#2 comme yield
(qui résulte en de nouvelles classes avec des noms illisibles). Votre code décompilé est loin d'être compilable.
une équipe professionnelle avec beaucoup de temps pourrait encore la rétro-ingénierie il de nouveau, mais alors la même chose est vraie de tout code obscurci. Le code qu'ils en retireraient serait irréalisable et très susceptible de être très bogué.
je recommande de signer vos assemblages (ce qui signifie que si les hackers peuvent recompiler un, ils doivent recompiler tous) mais je ne pense pas que l'obscurcissement en vaille la peine.
nous avons essayé un certain nombre de brouilleurs. Aucun d'entre eux ne fonctionne sur une grande application client/serveur qui utilise la remoting. Le problème est que le client et le serveur partagent quelques dlls, et nous n'avons trouvé aucun brouilleur qui puisse le gérer.
nous avons essayé DotFuscator Pro, SmartAssembly, XenoCode, Salamander, et plusieurs petites applications time dont les noms m'échappent.
franchement, je suis convaincu que l'obscurcissement est un gros piratage.
Même les problèmes qu'il aborde n'est pas entièrement un réel problème. La seule chose que vous devez vraiment protéger est les chaînes de connexion, les codes d'activation, les choses sensibles à la sécurité comme ça. Cette absurdité qu'une autre entreprise va inverser votre base de données et créer un produit concurrent à partir de celle-ci est quelque chose du cauchemar d'un manager paranoïaque, pas la réalité.
je suis "Knee Deep" en ce moment, d'essayer de trouver une bonne solution. Voici mes impressions jusqu'à présent.
Xenocode - j'ai une ancienne licence pour Xenocode2005 que j'utilisais pour obscurcir mes assemblages .net 2.0. Il a fonctionné très 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 de donner son feu vert mais la version 2005 ne fonctionne même pas sur Vista (crashes) donc je Et maintenant je dois acheter "PostBuild2008" au prix de 1900$. Cela pourrait être un bon outil, mais je ne vais pas le savoir. Trop cher.
Reactor.Net - c'est un prix beaucoup plus attrayant et il a fonctionné très bien sur mon exécutable autonome. Le module de licence était également agréable et m'aurait épargné beaucoup d'efforts. Malheureusement, il manque une caractéristique clé et c'est la capacité d'exclure des choses de l'obscurcissement. De ce fait, il impossible d'obtenir le résultat dont j'avais besoin (fusionner plusieurs assemblages ensemble, brouiller certains, ne pas brouiller d'autres).
SmartAssembly - j'ai téléchargé l'évaluation 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. Point de prix est encore un peu lourd.
Dotfuscator Pro - ne pouvait pas trouver le prix sur le site. Actuellement en discussion pour obtenir un citation. Semble inquiétant.
Confuser - 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 aurait "brisé", selon Question n ° 498 sur leur dépôt GitHub.
si vous cherchez une version gratuite, vous pouvez essayer DotObfuscator Community Edition qui est livré avec Visual Studio ou Eazfuscator.NET .
depuis le 29 juin 2012 , Eazfuscator.NET est maintenant commercial. La dernière version disponible gratuitement est 3.3.
j'ai utilisé smartassembly. En gros, vous choisissez une dll et elle retourne obscurcie. Il semble bien fonctionner et je n'ai eu aucun problème jusqu'à présent. Très, très facile à utiliser.
j'ai essayé presque tous les obfuscator sur le marché et SmartAssembly est le meilleur à mon avis.
J'ai aussi utilisé SmartAssembly. J'ai trouvé que le réacteur Ezrinz .Net était beaucoup mieux pour moi sur les applications .net. Il obscurcit, supporte Mono, fusionne des assemblages et dispose également d'un module de licence très agréable pour créer une version d'essai ou relier la licence à une machine particulière (très facile à mettre en œuvre). Prix est également très concurrentiel et lorsque j'ai eu besoin de soutien ils où rapide. Eziriz
Juste pour être clair, je suis juste un client qui aime le produit et n'a aucun lien avec la société.
la réponse courte est que vous ne pouvez pas.
il y a divers outils autour qui rendront plus difficile pour quelqu'un de lire votre code - dont certains ont été signalés par d'autres réponses.
Cependant, toutes ces faire c'est plus difficile à lire - ils augmenter la quantité d'effort nécessaire, c'est tout. Souvent, cela est suffisant pour dissuader les lecteurs occasionnels, mais quelqu'un qui est déterminé à creuser dans votre code sera toujours en mesure de le faire.
nous avons une application multi-niveaux avec un asp.net et l'interface winform qui prend également en charge la remoting. Je n'ai eu aucun problème avec l'utilisation de n'importe quel obfuscator à l'exception du type de cryptage qui génère un chargeur qui peut être problématique dans toutes sortes de façons inattendues et tout simplement pas la peine à mon avis. En fait, mon conseil serait plutôt du genre "éviter de chiffrer les brouilleurs de Type loader comme la peste". :)
d'après mon expérience, n'importe quel fonctionne très bien avec tous les aspects de .net, y compris asp.net et remoting, vous avez juste à devenir intime avec les paramètres et apprendre jusqu'à quel point 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 de voir comment cela fonctionne avec les différents paramètres.
nous avons utilisé plusieurs au fil des ans dans nos applications commerciales et installé sur les épices obfuscator de 9rays.net parce que le prix est juste, il fait le travail et ils ont un bon soutien bien que nous n'ayons vraiment pas eu besoin de soutien depuis des années mais pour être honnête, je ne pense pas que cela importe vraiment quel masque que vous utilisez, 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 est l'équivalent d'un cadenas, garder les gens honnêtes à l'écart ou rendre plus difficile de simplement recompiler une application.
licence est généralement la clé pour la plupart des gens et vous devriez certainement utiliser une sorte de système de certificat signé numériquement pour la délivrance des licences de toute façon. Votre plus grande perte proviendra du partage occasionnel de licences si vous n'avez pas de système intelligent en place, les gens qui brisent le système de licence n'allaient jamais acheter en premier lieu.
il est vraiment facile d'aller trop loin et d'avoir un impact négatif sur vos clients et votre entreprise, faire ce qui est simple et raisonnable et puis ne pas s'en soucier.
depuis deux jours j'expérimente avec Dotfuscator Community Edition advanced (un téléchargement gratuit après avoir enregistré le CE de base qui est livré 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 faire tourner le code obscurci avec beaucoup d'effort. Le déploiement d'un projet simple via ClickOnce a été difficile, mais réalisable après avoir signé manuellement les manifestes avec mage. Le seul problème était que, par erreur, la trace de la pile est revenue brouillée et que le CE n'a pas de désobustateur ou de clarificateur empaqueté.
j'ai essayé d'obscurcir un vrai projet qui est VSTO basé dans Excel, avec l'intégration de la Terre virtuelle, beaucoup d'appels de service web et un conteneur CIO et beaucoup de réflexion. C'était impossible.
si l'obscurcissement est vraiment une exigence critique, vous devriez concevez votre application avec cela à l'esprit dès le début, en testant les constructions obscurcies que vous progressez. Sinon, si il est assez complexe, vous allez finir avec un montant graves de la douleur.
Crypto Obfuscator abordez toutes vos préoccupations et tous vos scénarios. It:
- exclut automatiquement les types/membres de la confusion fondée sur des règles. Les types/champs sérialisés en font partie.
- il peut être intégré dans le processus de construction en utilisant MSBUild.
- Supports ASP.Net projets.
j'ai récemment essayé de raccorder la sortie d'un obfuscator libre dans l'autre obfuscator libre - à savoir Dotfuscator CE et le nouveau Babel obfuscator sur CodePlex. Plus de détails sur mon blog .
quant à 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 sont pas dans le XML de toute façon, donc il n'a pas besoin d'être masqué. S'il y a un code grave dans ces classes, à l'aide des classes partielles dans l'assemblage principal doit couvrir.
vous devez utiliser ce qui est le moins cher et le plus connu pour votre plate-forme et appelez-le Un jour. L'obscurcissement des langages de haut niveau est un problème difficile, parce que les flux VM opcode ne souffrent pas des deux plus gros problèmes que les flux natifs opcode font: l'identification de la fonction/méthode et l'aliasing de registre.
ce que vous devriez savoir à propos de bytecode Inverser est qu'il est déjà pratique courante pour les testeurs de sécurité de passer en revue le code x86 hétérogène et de trouver des vulnérabilités dans il. Dans raw X86, vous ne pouvez pas nécessairement même 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 ont accès à des noms de fonctions et de variables --- à moins qu'ils ne passent en revue le code Microsoft, pour lequel MSFT fournit utilement cette information au public.
"Dotfuscation" travaille principalement en fonction de brouillage et les noms de variables. Il est probablement préférable de le faire que de publier le code avec informations de niveau de débogage, où le réflecteur donne littéralement votre code source. Mais tout ce que vous faites au-delà de cela est susceptible d'obtenir des rendements décroissants.
vous pouvez utiliser" Dotfuscator Community Edition " - il est livré par défaut dans Visual Studio 2008 Professional. Vous pouvez le lire à ce sujet à:
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 ton code est brouillé? Habituellement, il y a très peu de mal à ce que votre application soit décomposée, à moins qu'elle ne soit utilisée à des fins de sécurité. Si vous craignez que les gens "volent" votre code, ne le soyez pas; la grande majorité des gens qui regardent votre code le seront à des fins d'apprentissage. Quoi qu'il en soit, il n'y a pas de stratégie totalement efficace de brouillage pour .NET - quelqu'un avec suffisamment de compétences sera toujours en mesure de décompiler/changer votre application.
Éviter Le Réacteur. Il est complètement inutile (et oui j'ai payé pour une licence). Xenocode était le meilleur que j'ai rencontré et j'ai acheté une licence pour aussi. Le soutien était très bon, mais je n'en avais pas besoin car ça marchait. J'ai testé chaque brouilleur que j'ai pu trouver et ma conclusion est que xenocode était de loin le plus robuste et a fait le meilleur travail (également possibilité de post traiter votre .net exe à un exe natif que je n'ai vu nulle part ailleurs.).
il y a deux principales différences entre le réacteur et xenocode. Le premier est que Xenocode fonctionne réellement. La seconde est que la vitesse d'exécution de vos assemblées n'est pas différent. Avec le réacteur, il était environ 6 millions de fois plus lent. J'ai aussi eu l'impression que le réacteur était une opération d'un seul homme.
j'ai trouvé le Agile.Net fournir une assez bonne protection pour votre assemblage .Net parce qu'il offre non seulement l'obscurcissement, mais aussi le cryptage. Téléchargez une piste gratuite.
http://secureteam.net/NET-Code-Protection.aspx
http://secureteam.net/downloads.aspx
j'ai brouillé le code dans la même application depuis .Net 1, et ça a été un gros casse-tête du point de vue de la maintenance. Comme vous l'avez mentionné, le problème de sérialisation peut être évité, mais il est très facile de faire une erreur et d'obscurcir quelque chose que vous ne vouliez pas obscurcir. Il est facile de casser la construction, ou de changer le modèle d'obfuscation et de ne pas être en mesure d'ouvrir de vieux fichiers. De Plus il peut être difficile de trouver ce qui n'allait pas et où.
notre le choix a été Xenocode, et si je devais faire le choix à nouveau aujourd'hui, je préférerais ne pas brouiller le code, ou utiliser Dotfuscator.
voici un document de Microsoft eux-mêmes. Espère que ça aide... ça date de 2003, mais ça pourrait toujours être pertinent.
nous utilisons SmartAssembly sur notre client windows. Fonctionne très bien.
ajoute aussi des problèmes supplémentaires. L'impression de vos noms de classe dans les fichiers journaux/exceptions doit être désactivée. 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 coup d'oeil à votre client et de voir quels problèmes vous pouvez obtenir en brouillant les pistes.
tout dépend du langage de programmation que vous utilisez. Lire l'article: code obscurci
la voie libre serait d'utiliser dotfuscator de l'intérieur de visual studio, sinon vous auriez à sortir et acheter un obfuscator comme Postbuild ( http://www.xenocode.com/Landing/Obfuscation.aspx )
j'ai dû utiliser une obfuscation/protection des ressources dans mon dernier rpoject et j'ai trouvé Obfuscator Crypto comme un outil agréable et simple à utiliser. La sérialisation problème est qu'une question de paramètres de cet outil.
il y a 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 semble ne plus être mis à jour, quelqu'un l'a bifurqué ici: https://obfuscar.codeplex.com /
vous pouvez également examiner les nouvelles technologies de protection par code telles que Metaforic et V. I. Labs et de nouvelles technologies de protection de copie logicielle telles que ByteShield . Divulgation: je travaille pour ByteShield.
j'utilise aussi 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'il ne vérifie pas une licence avec un retour booléen. il est trop facile d'octets de la fissure. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx
SmartAssembly est génial,je l'ai a été utilisée dans la plupart de mes projets
j'ai essayé la version de démonstration D'Eziriz....J'ai bien aimé. Mais n'ont jamais apporté le logiciel.
L'obscurcissement n'est pas une véritable protection.
si vous avez un fichier .net Exe, il y a une solution bien meilleure .
j'utilise Themida et peut dire que ça fonctionne très bien.
le seul inconvénient de Themida est qu'il ne peut pas protéger. (Il protège également le code C++ dans Exe et DLLs)
Themida est de loin moins cher que les obfuscators mentionnés ici et il est le meilleur dans anti piratage protection sur le marché. Il crée une machine virtuelle lorsque des parties critiques de votre code sont exécutées et exécute plusieurs threads qui détectent la manipulation ou les points de rupture définis par un cracker. Il convertit le .net Exe en quelque chose que le réflecteur ne reconnaît même plus comme un assemblage de .NET.
s'il vous plaît lire la description détaillée sur leur site web: http://www.oreans.com/themida_features.php
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'Eziriz offre mais le prix pour le Rummage est trop bon...