web-dev-qa-db-fra.com

Comment puis-je protéger mes assemblys .NET de la décompilation?

L'une des choses les plus importantes que j'ai apprises lorsque j'ai commencé à utiliser 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 cherche toujours un moyen rapide, facile et sécurisé de le faire. Je ne veux pas obscurcir mon code afin que mes noms de méthodes soient a, b, c ou à peu près. Le réflecteur ou d’autres outils ne devraient absolument pas reconnaître mon application en tant que .NET Assembly. Je connais déjà certains outils, mais ils sont très coûteux. Existe-t-il un autre moyen de protéger mes applications?

MODIFIER:

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 vont le faire et ils l'ont déjà fait. Ils me l'ont même dit… peut-être que je suis un peu paranoïaque, mais les entreprises rivales qui lisent mon code ne me font pas sentir bien. 

61
TalkingCode

Une chose à garder à l’esprit est que vous voulez le faire d’une manière qui ait du sens aux affaires. Pour ce faire, vous devez définir vos objectifs. Alors, quels sont vos objectifs?

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

Si vous ne pouvez pas empêcher le piratage, pourquoi ne pas simplement le réduire? Cela aussi est erroné. Une seule personne doit déchiffrer votre code pour qu'il soit disponible pour tout le monde. Vous devez avoir de la chance à chaque fois. Les pirates doivent seulement être chanceux une fois.

Je vous le propose l’objectif devrait être de maximiser les profits. Vous semblez croire qu’il est nécessaire de mettre un terme à la piraterie. Ce n'est pas. Le profit est simplement le revenu moins les coûts. Mettre un terme au piratage augmente coûts . Cela demande des efforts, ce qui implique d’ajouter des coûts quelque part dans le processus, et donc de réduire cet aspect de l’équation. La protection de votre produit n'augmente pas non plus vos revenus. Je sais que vous regardez tous ces pirates et que vous voyez tout l'argent que vous pourriez gagner si seulement les droits de licence à la place, mais la réalité est que cela se produira jamais. Il existe quelques hyperboles ici, mais il est généralement admis que les pirates incapables de craquer pour votre sécurité trouveront un produit similaire dont ils pourraient se servir ou dont ils pourraient se passer. Ils vont jamais l'acheter à la place, et donc ils pas représentent les ventes perdues.

En outre, sécurise votre produit réellement réduit ​​le revenu . Il y a deux raisons à cela. L'un est le faible pourcentage de clients qui ont des problèmes d'activation ou de sécurité et qui décident de ne plus acheter ou de demander le remboursement de leur argent. L'autre est le faible pourcentage de personnes qui essaient une version piratée d'un logiciel pour s'assurer qu'il fonctionne avant de l'acheter. Limiter la distribution piratée de votre produit (if vous êtes en mesure de le réussir) empêche ces personnes d’essayer votre produit et ne l’achètera jamais. De plus, le piratage peut également aider votre produit à se propager à un public plus large, atteignant ainsi davantage de personnes prêtes à payer pour cela.

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

101
Joel Coehoorn

Au travail ici, nous utilisons Dotfuscator de PreEmptive Solutions.

Bien qu'il soit impossible de protéger les assemblages .NET, 100% Dotfuscator le rend déjà assez difficile, je pense… .. Je viens avec beaucoup de techniques d'obfuscation;

Renommer Assemblage
Renommer des schémas
Renommer le préfixe
Induction de surcharge améliorée
Obscurcissement incrémental
HTML Renommer le rapport
Flux de contrôle
Cryptage de chaînes 

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

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

Il y a freeware alternatives bien sûr;

16
Rhapsody

Hébergez votre service chez n'importe quel fournisseur de services cloud.

13
David Fox

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

En gros, décrit la situation dans son ensemble.

À un moment donné, le code devra être traduit en bytecode VM et l'utilisateur pourra le lire ensuite.

Le code machine n'est pas si différent non plus. Un bon désassembleur/débogueur interactif comme IDA Pro rend pratiquement toute application native transparente. Le débogueur est assez intelligent pour utiliser l'IA pour identifier les API communes, les optimisations de compilateur, etc. Il permet à l'utilisateur de reconstruire méticuleusement les constructions de niveau supérieur à partir de l'assembly généré à partir du code machine.

Et IDA Pro prend également en charge .Net dans une certaine mesure.

Honnêtement, après avoir travaillé sur un projet d’ingénierie inverse (par compatibilité) pendant quelques années, la principale chose que j’ai tirée de mon expérience est que je ne devrais probablement pas trop me préoccuper du vol de mon code par des personnes. Si quelqu'un le souhaite, il ne sera jamais très difficile de l'obtenir, quel que soit le schéma que je mette en œuvre.

10
kervin

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

5
Muad'Dib

Aucun observateur ne peut protéger votre application, pas même celle décrite ici. Voir ce lien, il s’agit d’un désobsfuseur qui peut désobéir presque tous les observateurs.

https://github.com/0xd4d/de4dot

La meilleure façon de vous aider (mais rappelez-vous qu’ils ne sont pas non plus un prof complet) est d’utiliser des codes mixtes, de coder vos codes importants dans un langage non managé et de créer un DLL comme en C ou C++, puis de les protéger avec Armageddon ou Themida . Themida n'est pas pour tous les crackers, c'est l'un des meilleurs protecteurs du marché, il peut également protéger votre logiciel .NET.

4
Tejashwi Kalp Taru

J'ai entendu parler de projets compilant directement IL en code natif . Vous pouvez obtenir des informations supplémentaires à partir de ce message: Est-il possible de compiler du code .NET IL en code machine?

3

Nous utilisons {SmartAssembly} pour la protection .NET d'une application distribuée de niveau entreprise et cela a très bien fonctionné pour nous.

3
Dana Holt

Si vous souhaitez protéger totalement votre application de la décompilation, consultez le programme Hasp d'Aladdin. Vous pouvez envelopper vos assemblys dans un shell crypté auquel votre application ne peut accéder. Bien sûr, on se demande comment ils peuvent faire cela, mais ça fonctionne. Cependant, je ne sais pas s'ils protègent votre application des pièces jointes/réflexions à l'exécution, ce que Crack.NET est capable de faire. 

- Éditez .__ Faites également attention à ne pas compiler en code natif, il existe aussi des décompilateurs pour le code natif.

2
Michael Brown

Avez-vous une API?

Au lieu d'essayer de protéger votre fichier ddl unique dans l'un de vos produits sur tous les appareils de vos clients, pourquoi ne pas créer un service API pour vos précieuses fonctionnalités? Laissez le produit réel qui est enregistré sur un périphérique consomme cette API pour livrer le produit à votre guise.

Je pense que de cette façon, vous êtes à 100% sûr que votre code n'est pas décompilé et que vous définissez vos propres limites dans votre API afin que les développeurs/pirates ne consomment pas votre API de manière non désirée.

Bien sûr, il y a encore du travail à faire, mais à la fin, vous êtes en contrôle.

1
CularBytes

Si quelqu'un doit voler votre code, cela signifie probablement que votre modèle d'entreprise ne fonctionne pas. Qu'est-ce que je veux dire par là? Par exemple, j'achète votre produit et je demande ensuite de l'aide. Vous êtes trop occupé ou croyez que ma demande n'est pas valide et que vous perdez votre temps. Je décode votre produit afin de soutenir mes affaires relatives. Votre produit devient plus précieux pour moi et je priorise mon temps de manière à résoudre le modèle commercial permettant d’exploiter votre produit. Je recode et marque votre produit, puis je sors et gagne l'argent que vous avez décidé de laisser sur la table. Il existe des raisons de protéger le code, mais vous envisagez probablement le problème sous un angle erroné. Bien sûr, vous êtes. Vous êtes le "codeur" et je suis l'homme d'affaires. ;-) À votre santé!

ps. Je suis aussi développeur. c'est-à-dire "codeur"

0
Adam Cox

Outre les produits tiers répertoriés ici, il en existe un autre: NetLib Encryptionizer. Cependant, cela fonctionne d'une manière différente de celle des obfuscateurs. Les obscurcisseurs modifient l'Assemblée elle-même avec un "moteur" de désobfuscation intégré. Encryptionizer chiffre les DLL (gérées ou non gérées) au niveau du fichier. Donc, il ne modifie pas le DLL sauf pour le chiffrer. Dans ce cas, le "moteur" est un pilote en mode noyau situé entre votre application et le système d'exploitation. (Avertissement: je viens de NetLib Security )

0
Neil Weicher

Je sais que c'est vieux, mais Themida est le logiciel anti-cracking le plus avancé que j'ai utilisé.
Ce n'est pas gratuit, cependant.

0
sh4dowb