Question

Je pensais à obscurcir une application commerciale .Net. Mais vaut-il vraiment la peine de choisir, d’acheter et d’utiliser un tel outil? Les fichiers binaires obfusqués sont-ils vraiment à l'abri de l'ingénierie inverse?

Était-ce utile?

La solution

Vous n’êtes pas obligé d’acheter un outil: Visual Studio.NET est fourni avec une version communautaire de Dotfuscator. D'autres outils d'obscurcissement gratuits sont répertoriés ici et peut répondre à vos besoins.

Il est possible que les fichiers binaires obfusqués ne soient pas à l'abri de l'ingénierie inverse, tout comme il est possible que le verrou de votre vélo soit cassable / sélectionnable. Cependant, il est fréquent qu'un petit inconvénient soit suffisant pour dissuader les voleurs de codes / vélos.

De même, si jamais le temps est venu de faire valoir vos droits sur un code en cour, s’être vu forcé de le protéger (en l’obscurcissant) peut vous donner des points supplémentaires. : -)

Cependant, vous devez prendre en compte les inconvénients: il peut être plus difficile d’utiliser la réflexion avec du code obscurci, et si vous utilisez quelque chose comme log4net pour générer des parties de lignes de journal basées sur le nom de la classe concernée, ces les messages peuvent devenir beaucoup plus difficiles à interpréter.

Autres conseils

N'oubliez pas que l'obscurcissement n'est qu'un obstacle pour l'examinateur occasionnel de votre code. Si quelqu'un veut vraiment comprendre ce que vous avez écrit, vous aurez beaucoup de mal à les arrêter.

Si vous avez des secrets dans votre code (comme des mots de passe), vous le faites mal.

Si vous craignez que quelqu'un produise votre propre logiciel avec vos idées, vous aurez plus de chance sur le marché en fournissant les nouvelles versions souhaitées par vos clients, avec le support technique et en étant leur partenaire. Les bonnes affaires gagnent.

Dans notre entreprise, nous avons évalué plusieurs technologies d’obscurcissement différentes, mais elles présentaient toutes des problèmes. Le plus gros problème était que nous comptions beaucoup sur la réflexion, par exemple. créer dynamiquement des grilles basées sur les noms de propriétés.

Ainsi, tous les obfuscateurs renomment des choses, vous pouvez le désactiver bien sûr, mais vous perdez beaucoup de bénéfice de l'obfuscation.

De plus, notre code contient de nombreux tests NUnit qui reposent sur un plus grand nombre de méthodes et de propriétés publiques, ce qui empêche certains obscurcisseurs de masquer ces classes.

Nous avons finalement opté pour un produit appelé .NET Reactor

.

Cela fonctionne très bien et nous n’avons aucun des problèmes associés aux autres produits.

"Contrairement aux obfuscateurs, .NET Reactor arrête complètement toute décompilation en mélangeant tout assemblage .NET pur (écrit en C #, VB.NET, Delphi.NET, J #, MSIL ...) avec du code machine natif. En détail, .NET Reactor construit un mur natif entre les pirates potentiels et votre code .NET. Le résultat est un fichier standard basé sur Windows et non compatible MSIL. Le code .NET d'origine reste intact, bien protégé par le code natif et invisible pour les regards indiscrets. Le code .NET d'origine n'est copié sur le disque dur à aucun moment. Il n’existe aucun outil capable de décompiler les assemblys protégés .NET Reactor. "

Le fait que vous puissiez réellement faire de la rétro-ingénierie ne rend pas l’obfuscation inutile. Cela élève considérablement la barre.

Un assemblage .NET non obscurci vous montrera toute la source, la surbrillance et tout simplement en téléchargeant le fichier .NET. Réflecteur . Ajoutez à cela une confusion et vous réduirez de manière significative le nombre de personnes qui pourront modifier le code.

Cela dépend de votre protection. Si vous l'envoyez sans l'avoir été, vous pouvez également ouvrir l'application à code source ouvert et tirer parti des avantages du marketing. L’expédition obscurcie ne permettra aux utilisateurs que de créer relativement facilement des fichiers binaires modifiés au moyen de correctifs, au lieu de pouvoir voler votre code et de créer un concurrent direct. Obtenir la source réelle à partir de code obfusqué est très difficile, cela dépend bien sûr de l'obfuscateur.

Je pense que cela dépend du type de votre produit. S'il est destiné à être utilisé par les développeurs, l'obfuscation nuira à vos clients. Nous utilisons les produits ArcGIS au travail et toutes les DLL sont obscurcies. Cela rend notre travail beaucoup plus difficile, car nous ne pouvons pas utiliser Reflector pour décrypter des comportements étranges. Et nous achetons des clients qui ont payé des milliers de dollars pour le produit.

Alors s'il vous plait, ne dissimulez rien sauf si vous devez le faire.

Éléments à prendre en compte:

  • Les obscurcissements ne protègent ni votre code ni votre logique. cela rend tout simplement plus difficile la lecture et la compréhension.
  • L’obscurcissement n’arrête pas l’ingénierie inverse. Cela ralentit simplement le processus.
  • Votre propriété intellectuelle est protégée par la loi dans la plupart des pays. Ainsi, si un concurrent utilise votre code ou une implémentation spécifique, vous pouvez le poursuivre en justice.

Le seul problème que l'obfuscation puisse résoudre est qu'une personne crée une copie 1: 1 (ou presque de 1: 1) de votre implémentation spécifique.

De même, dans un monde idéal, la rétro-ingénierie d'une application obfusquée est peu attrayante et économique.

Mais revenons à la réalité:

  • Il n’existe aucun outil sur cette planète qui empêche une personne de copier des interfaces utilisateur, des comportements ou des résultats fournis ou produits par une application. L’obscurcissement est dans cette situation 100% inutile
  • Le meilleur obfuscateur du marché ne peut empêcher l'utilisation d'un désassembleur ou d'un éditeur hexadécimal et, pour certains geeks, il est bon de se pencher au cœur d'une application. C'est juste plus difficile que sur un code non obscurci.

La réalité est donc que vous pouvez rendre plus difficile et fastidieux l'examen de votre application, mais vous n'obtiendrez pas vraiment de protection fiable. Que vous utilisiez un produit gratuit ou commercial.

Les technologies avancées telles que l’obscurcissement des flux de contrôle ou la virtualisation du code peuvent aider à rendre la compréhension de la logique parfois très difficile, mais elles peuvent également causer beaucoup de problèmes drôles et difficiles à résoudre ou à résoudre. Ils représentent donc parfois davantage un problème supplémentaire qu'une solution.

De mon point de vue, l'obfuscation ne vaut pas l'argent que certaines entreprises facturent pour leurs produits. Si vous voulez harceler les développeurs occasionnels, les obfuscateurs open source sont suffisants. Si vous souhaitez rendre le plus difficile possible l'analyse au cœur de vos applications, vous devez utiliser des conteneurs cryptographiques avec des environnements d'exécution virtuels et des systèmes de fichiers virtuels, mais ils fournissent également des vecteurs d'attaque et peuvent également constituer une source de problèmes. .

Votre propriété intellectuelle et vos produits sont dans la plupart des pays protégés par la loi. Ainsi, si un concurrent analyse et copie votre code, vous pouvez le poursuivre en justice. Si un méchant ou un pirate informatique ou un pirate informatique prend votre demande, vous êtes blagués - mais un obfuscateur ne fait pas une différence.

Vous devez donc d’abord réfléchir à vos cibles, à votre marché et à ce que vous souhaitez atteindre avec un obfuscateur. Comme vous pouvez le lire ici (et à d’autres endroits), l’obfuscation ne résout pas vraiment le problème de la rétroingénierie. Cela ne fera que rendre la tâche plus ardue et plus longue. Mais si c'est ce que vous voulez, vous pouvez jeter un coup d'œil aux obscurcissements open source tels que, par exemple. sharpObfuscator ou obfuscar qui peut être assez bon pour naguer les codeurs occasionnels (une liste peut être trouvée ici: Liste de. Obfuscators NET sur Wikipedia ).

Si votre scénario le permet, les concepts SaaS-Concepts pourraient également vous intéresser. Cela signifie que vous fournissez un accès à votre logiciel, mais pas au logiciel lui-même. Le client n'a donc normalement pas accès à vos assemblages. Toutefois, selon le niveau de service, la sécurité et le nombre d'utilisateurs, il peut s'avérer coûteux, complexe et difficile de créer un service SaaS fiable, confiant et performant.

Non, il est prouvé que l’obscurcissement n’empêche personne de déchiffrer le code compilé. Cela rend la tâche plus difficile mais pas impossible.

Je suis très à l'aise pour lire le code d'assemblage x86. Qu'en est-il des personnes qui travaillent avec l'assemblage depuis plus de 20 ans?

Vous trouverez toujours quelqu'un qui n'a besoin que d'une minute pour voir ce que fait votre code c # ou c ...

Juste un mot pour ceux qui liront ceci quelques années plus tard - je viens de parcourir la licence Dotfuscator Community Edition (fournie avec VS2008) il y a quelques heures et je crois que vous ne pouvez pas utiliser cette version pour distribuer un produit commercial. obscurcir le code d'un projet qui implique des développeurs autres que vous-même. Donc, pour les développeurs d'applications commerciales, il ne s'agit que d'une version d'évaluation.

  

... snip ...   ces messages peuvent devenir beaucoup plus   difficile à interpréter

Oui, mais l'édition de communauté gratuite fournie avec Visual Studio dispose d'une fonctionnalité de carte. Avec cela, vous pouvez remonter les noms de méthodes obscurcis vers les noms originaux.

J'ai réussi à placer la sortie d'un obfuscateur gratuit dans un autre obfuscateur . Dans Dotfuscator CE, seules certaines astuces d’obscurcissement sont incluses. Il est donc préférable d’utiliser un deuxième obfuscateur doté de différentes astuces.

Il est assez simple de procéder à l'ingénierie inverse d'une application .net à l'aide de réflecteur .net . - puisque l'application générera du code VB, VC et C # directement à partir de MSIL, et qu'il est possible d'extraire toutes sortes de gemmes utiles.

Les observateurs de code cachent assez bien le code de la plupart des piratages d’ingénierie inverse et il serait donc judicieux de l’utiliser sur du code propriétaire et concurrentiel qui ajoute de la valeur à votre application.

Il existe un très bon article sur l'obscurcissement et ça marche ici

Ce message et la question qui l’entoure ont une discussion qui pourrait être de valeur. Ce n'est pas un problème de type oui ou non.

Oui, vous devriez vraiment. Non pas pour le protéger d'une personne déterminée, mais pour obtenir des bénéfices et avoir des clients. En passant, si vous atteignez un point ici, si quelqu'un essaie de casser votre logiciel, cela signifie que vous vendez un logiciel populaire.

Le problème est quel outil choisir pour le travail. Découvrez mon expérience avec les obscurcisseurs commerciaux: https: //stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575

Oui, nous le faisons. Nous utilisons un obfuscateur BitHelmet. C'est nouveau, mais ça marche vraiment bien.

  

Mais vaut-il vraiment la peine de choisir, d’acheter et d’utiliser un tel outil?

J'ai trouvé Eazfuscator pas cher (gratuit) et facile à utiliser: cela a pris environ une journée. Comme je disposais déjà de tests automatisés approfondis (bonne couverture), j’estime donc que je pourrais trouver tous les bogues introduits par obfuscation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top