90 votes

Comment puis-je protéger mes assemblages .NET contre la décompilation ?

L'une des premières choses que j'ai apprises lorsque j'ai commencé à utiliser le C# était la plus importante. Vous pouvez décompiler n'importe quel assemblage .NET avec Reflector ou d'autres outils. De nombreux développeurs ne sont pas conscients de ce fait et la plupart d'entre eux sont choqués lorsque je leur montre leur code source.

La protection contre la décompilation reste une tâche difficile. Je suis toujours à la recherche d'un moyen rapide, facile et sûr de le faire. Je ne veux pas obscurcir mon code, donc les noms de mes méthodes seront a, b, c, etc. Reflector ou d'autres outils ne devraient pas du tout être en mesure de reconnaître mon application comme une assemblée .NET. Je connais déjà certains outils, mais ils sont très chers. Existe-t-il un autre moyen de protéger mes applications ?

EDITAR:

La raison de ma question n'est pas d'empêcher le piratage. Je veux seulement empêcher les concurrents de lire mon code. Je sais qu'ils le feront et ils l'ont déjà fait. Ils me l'ont même dit. Je suis peut-être un peu paranoïaque, mais des concurrents qui lisent mon code ne me font pas plaisir.

10 votes

Si reflector ne peut pas savoir si votre application est un assemblage .NET, comment l'application qui essaie de la charger est-elle censée le faire ?

1 votes

Re " Je ne veux pas obscurcir mon code, donc mes noms de méthodes seront a,b,c ou ainsi de suite." Pourquoi pas ? C'est la chose évidente à faire pour rendre plus difficile aux concurrents de donner un sens à votre logique.

0 votes

Oui, l'obscurcissement fonctionne à 100%. D'abord, vous ne devriez pas mettre de "secrets" dans votre code, des choses qui "une fois trouvées dans le code peuvent compromettre la sécurité". Deuxièmement, avez-vous déjà pris du code sur GitHub et essayé de le ré-utiliser ? Je veux dire, même le code non obfusqué peut être fou à réaffecter en raison des paradigmes utilisés, du couplage des classes, des responsabilités de classe floues, des festins de dépendance, des festins de callback et plus encore. Cela signifie que votre code obfusqué est parfaitement sûr, jusqu'à ce que nous ayons des programmeurs robots capables de comprendre la logique de programmation et de réécrire/réfacturer le code rapidement, ce qui n'est pas près d'arriver.

116voto

Joel Coehoorn Points 190579

Il convient de garder à l'esprit que vous devez procéder de manière à ce que votre activité soit rentable. Pour ce faire, vous devez définir vos objectifs. Alors, quels sont exactement vos objectifs ?

Prévenir le piratage ? Cet objectif n'est pas réalisable. Même le code natif peut être décompilé ou craqué ; la multitude de warez disponibles en ligne (même pour des produits comme Windows et Photoshop) est la preuve qu'un pirate déterminé peut toujours y avoir accès.

Si vous ne pouvez pas empêcher le piratage, pourquoi ne pas simplement le réduire ? Là encore, c'est une erreur. Il suffit qu'une seule personne déchiffre votre code pour qu'il soit accessible à tous. Vous devez avoir de la chance à chaque fois. Les pirates n'ont à avoir de la chance qu'une seule fois.

Je vous le demande l'objectif doit être de maximiser les profits. Vous semblez croire que l'arrêt du piratage est nécessaire à cette entreprise. Ce n'est pas le cas. Le profit est simplement le revenu moins les coûts. Mettre fin au piratage augmente coûts . Cela demande un effort, ce qui signifie un coût supplémentaire quelque part dans le processus, et réduit donc ce côté de l'équation. La protection de votre produit ne permet pas non plus d'augmenter vos revenus. Je sais que vous regardez tous ces pirates et que vous voyez tout l'argent que vous pourriez gagner si seulement ils payaient vos droits de licence à la place, mais la réalité est que cela jamais se produire. Il y a une certaine hyperbole ici, mais il est généralement admis que les pirates qui ne parviennent pas à craquer votre sécurité trouveront un produit similaire qu'ils pourront craquer ou s'en passeront. Ils vont jamais l'acheter à la place, et donc ils ne no représentent des ventes perdues.

En outre, sécuriser réellement votre produit réduit revenus . Il y a deux raisons à cela. La première est le faible pourcentage de clients qui ont des problèmes avec l'activation ou la sécurité, et qui décident donc de ne plus acheter ou de demander le remboursement de leur argent. L'autre est le faible pourcentage de personnes qui essaient réellement une version pirate d'un logiciel pour s'assurer qu'il fonctionne avant de l'acheter. Limiter la distribution pirate de votre produit ( si vous y parvenez d'une manière ou d'une autre) empêche ces personnes d'essayer votre produit, et donc de l'acheter. En outre, le piratage peut également contribuer à la diffusion de votre produit auprès d'un public plus large, touchant ainsi un plus grand nombre de personnes qui seront prêtes à payer pour l'acquérir.

Une meilleure stratégie consiste à supposer que votre produit sera piraté et à réfléchir aux moyens de tirer parti de la situation. Quelques liens supplémentaires sur le sujet :
Comment puis-je empêcher le vol de mon code ?
Sécuriser une application .NET

39 votes

L'objectif principal n'est pas d'empêcher le piratage. Le but est d'empêcher les concurrents de lire mon code. Je sais qu'ils le feront, ils l'ont déjà fait.

16 votes

Si tel est votre objectif, un obfuscateur est suffisant.

2 votes

Je ne dirais pas, que les pirates vont never acheter une licence si un logiciel n'est pas craquable. Ce n'est pas vrai à 100%. J'ai vu des gens dire I'm not gonna buy it that soft/game, can't afford, blah blah puis l'achètent après s'être aperçus que la version piratée est périmée, infectée par un virus ou ne leur permet pas d'accéder à certaines fonctionnalités en ligne.

16voto

Rhapsody Points 4131

Au travail ici, nous utilisons Dotfuscator de PreEmptive Solutions.

Bien qu'il soit impossible de protéger les assemblages .NET à 100%, Dotfuscator rend la tâche suffisamment difficile, je pense. Il est livré avec de nombreuses techniques d'obfuscation ;

Renommage des assemblages croisés
Plans de renommage
Renommer le préfixe
Induction améliorée en cas de surcharge
Obfuscation incrémentielle
Rapport de renommage HTML
Flux de contrôle
Cryptage des chaînes de caractères

Et il s'est avéré qu'ils ne sont pas très chers pour les petites entreprises. Ils ont un prix spécial pour les petites entreprises.

(Non, je ne travaille pas pour PreEmptive ;-))

Il y a logiciel gratuit des alternatives bien sûr ;

2 votes

Je l'utilise aussi. Très bon logiciel bien qu'il ait quelques fonctions inutiles (pour moi) comme celle qui fait expirer votre programme ou celle qui vous rapporte les exceptions par email. Mais le renommage et le flux logique sont très bons et je ne vois pas comment quelqu'un pourrait lire votre code après une bonne utilisation de ce programme.

14voto

David Points 6057

Hébergez votre service dans n'importe quel fournisseur de services en nuage.

10voto

kervin Points 7620

Comment empêcher la décompilation de toute application C#

Ça décrit bien toute la situation.

À un moment donné, le code devra être traduit en bytecode VM, et l'utilisateur pourra alors y accéder.

Le code machine n'est pas très différent non plus. Un bon désassembleur/débogueur interactif comme IDA Pro rend transparente n'importe quelle application native. Le débogueur est suffisamment intelligent pour utiliser l'IA afin d'identifier les API communes, les optimisations du compilateur, etc. Il permet à l'utilisateur de reconstruire méticuleusement les constructions de plus haut niveau à partir de l'assemblage généré à partir du code machine.

Et IDA Pro supporte également .Net dans une certaine mesure.

Honnêtement, après avoir travaillé sur un projet de rétro-ingénierie (pour la compatibilité) pendant quelques années, la principale chose que j'ai retirée de mon expérience est que je ne devrais probablement pas trop m'inquiéter des personnes qui volent mon code. Si quelqu'un le veut, il ne sera jamais très difficile de l'obtenir, quel que soit le système que j'implémente.

8 votes

Il suffit de faire en sorte qu'il soit plus difficile de lire le code que de l'écrire.

5voto

Muad'Dib Points 14260

Je sais que vous ne voulez pas obscurcir les choses, mais peut-être que vous devriez vérifier dotfuscator il prendra vos assemblages compilés et les obscurcira pour vous. Je pense qu'il peut même les crypter.

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