La signature des assemblages .NET: Est-ce que la protection contre la falsification de mon assemblée vraiment?

StackOverflow https://stackoverflow.com/questions/377619

  •  22-08-2019
  •  | 
  •  

Question

Je suis en place un système « de verrouillage » dans mon application qui protège mon application contre la copie et utilisé illégalement. Le système vérifie la signature d'un code basé sur le matériel et attend d'être signé avec une clé privée que seule ma société est propriétaire. (L'application a obtenu la clé publique pour valider la signature.)

Je veux faire en sorte que personne ne change mon mécanisme de verrouillage dans l'application, donc je veux signer l'assemblée de mon application et je pense qu'il est logique.

  1. Depuis que je ne l'ai pas vu le CLR jamais parler de la signature d'un ensemble étant invalide, je veux vous assurer que ce système fonctionne vraiment. Est-il? Que dois-je faire pour le faire fonctionner?
  2. Un attaquant peut concentrer ses efforts sur le CLR pour le faire se soucient pas de ma signature? Autrement dit, s'il ne peut pas altérer mon code parce que je l'ai signé, peut-il altérer CLR?
  3. En général, je voudrais savoir votre expérience sur ces gardes de sécurité et des technologies de protection. Quelqu'un peut-il suggérer quoi que ce soit d'autre?
Était-ce utile?

La solution

signature de l'Assemblée est conçue pour permettre aux applications / ensembles de référencer un assemblage et assurez-vous qu'ils obtiennent l'assemblage à l'origine ils référencés. Si quelqu'un voulait, ils pourraient, en théorie, décompiler votre application entière et recompiler sans signature. . (Elles pourraient recompiler le Assemblée référencement afin que renvoyait à un version non signée du assembly référencé )

Ils seraient alors en mesure de modifier le code comme ils le voulaient, parce que le client (exe) serait maintenant référence à un dll non signé (ou « re-signé »).

Pour rendre le processus de décompilation et recompilation plus difficile, vous pouvez essayer de créer un mode mixte d'assemblage C ++ / CLI contenant à la fois le code managé et natif. Mais oui ... en fin de compte les gens ont tous vos fichiers binaires à la main et avec assez d'effort peut probablement contourner tout système de licence vous imaginer.

Autres conseils

Il y a une quantité de certaining d'idées fausses au sujet des ensembles signés. signature de l'Assemblée est pas, comme mackenir a souligné, à utiliser un mécanisme sécurisé pour empêcher vos assemblées d'être falsifié. L'article suivant sur CodeProject donne un très bon traitement du sujet:

http://www.codeproject.com/KB/security/StrongNameExplained.aspx

La signature du code ne permet la détection de sabotage, il ne l'empêche pas. Quelqu'un qui sait ce qu'ils font peut retirer votre signature et, si nécessaire ajouter leur propre.

vraiment la plupart des systèmes de protection contre la copie sont une perte de temps et peut être subverti, et ils ont aussi tendance à agacer l'enfer de vos clients payants. En fin de compte, vous ne pouvez pas empêcher quelqu'un de modifier et d'exécuter votre code sur le matériel qu'ils contrôlent. Il suffit de le rendre suffisamment difficile qu'il est plus facile d'aller au service d'achat et obtenir un chèque par écrit, et qu'il est difficile d'oublier que vous n'avez pas une copie sous licence. Ceux qui se soucient va payer à terme, et ceux qui ne le font pas ne le sera jamais.

Notez également que même si vous pensez que la plupart des gens ne dérangera pas la fissuration de votre système, ou pas la compétence pour le faire, il n'a pas d'importance. Parce qu'une fois qu'une personne a subverti votre système de protection contre la copie, ils peuvent le mettre à la disposition sur un site torrent pour ceux sans l'habileté de le faire, et il est game over.

Une technique que vous pouvez utiliser est d'éviter toute manipulation est d'utiliser la clé publique de votre assemblée pour chiffrer des éléments essentiels de votre logiciel tels que les paramètres application / algorithme. Si la clé publique a été modifiée, le décryptage ne fonctionnera pas et votre application se bloque.

Certains obfuscators tels que Crypto Obfuscator utiliser cette technique avec le cryptage de chaîne fonctionnalité. Il utilise la clé publique de votre assemblée pour chiffrer toutes les chaînes. Si la clé publique a été modifié ou supprimé, le décryptage échouera et votre application même ne démarre pas.

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