2010-05-24 3 views
8

Actuellement, je développe une application C# .Net dans laquelle j'utilise un contrôle personnalisé que j'ai développé il y a quelque temps. J'ai besoin que la DLL soit envoyée dans la nouvelle application - mais je ne veux pas que le fichier dll soit utilisé pour des applications étrangères.Comment empêcher le chargement d'une DLL dans d'autres applications

C'est pourquoi j'ai besoin que la DLL personnalisée soit en quelque sorte compilée dans la nouvelle application. Actuellement, la DLL est copiée dans le répertoire de l'application.

Des idées? Devrait être trivial imho.

Merci & Cordialement, Daniel

+0

Si vous mettez votre code sur l'ordinateur de quelqu'un d'autre, ils peuvent l'exécuter. Tout ce que vous faites pour éviter cela est au mieux un speedbump. –

Répondre

3

Regardez dans IL Merge. Cet utilitaire vous permet de combiner plusieurs assemblys .NET en un seul assemblage.

je cite:

ILMerge est un utilitaire qui peut être utilisé pour fusionner plusieurs ensembles .NET en un seul ensemble. ILMerge prend un ensemble d'assemblages d'entrée et les fusionne en un assemblage cible. Le premier assemblage de la liste des assemblys d'entrée est l'assemblage principal. Lorsque l'assembly principal est un exécutable, l'assembly cible est créé en tant qu'exécutable avec le même point d'entrée que l'assembly principal. En outre, si l'assembly principal a un nom fort et qu'un fichier .snk est fourni, l'assembly cible est re-signé avec la clé spécifiée afin qu'il ait également un nom fort.

Un élément à prendre en compte est cependant que les utilisateurs peuvent toujours utiliser l'assemblage créé. Regardez dans l'obfuscation et l'octroi de licences pour garder les choses à distance, mais rappelez-vous que si quelqu'un veut votre code assez mal, il l'obtiendra.

Certaines choses rendent les choses beaucoup plus difficiles, comme avoir un service Web, mais même dans ce cas, ce n'est pas une preuve complète.

1

Si vous pouvez changer la DLL avec le contrôle exclusif, vous pouvez ...

  1. Mark tout dans la DLL de contrôle interne.
  2. Compilez votre assembly de sorte que votre DLL appelant ait accès aux membres internes de votre DLL de contrôle.
  3. Signez la DLL appelante.

Pour plus d'informations sur cette procédure, consultez la section .

0

Il ya un certain nombre de hacks différents que vous pouvez faire pour rendre cela plus difficile pour les gens à utiliser. Tous peuvent être contournés, mais telle est la vie.

Vous pouvez regarder cette réponse ici pour rejeter une assemblée inconnue pour référencer votre assemblée: Secure C# Assemblies from unauthorized Callers

Vous devez Occultation votre assemblée si vous êtes vraiment nerveux à ce sujet. Cela rendra plus difficile à décompiler.Quelque chose comme Babel fonctionne très bien: http://babelobfuscator.blogspot.com/

Vous pouvez également utiliser ILMerge pour stocker l'assemblage dans un autre assemblage. Cependant, cet assembly sera extrait et exposé lors de l'exécution. Vous pouvez faire quelque chose le long de ces lignes pour extraire une ressource binaire d'un assemblage et créer un assemblage temporaire qui est utilisé lors de l'exécution. Si quelqu'un est vraiment motivé, il peut aussi trouver l'assemblage temporaire ...

La vraie question est de savoir jusqu'où voulez-vous aller? À un moment donné, cela ne vaudra pas la peine. C'est là que vous arrêtez.

+0

Hum, je ne veux pas aller vraiment loin - tout ce que je veux, c'est que la DLL ne soit pas visible dans le répertoire de l'application à première vue ou en quelque sorte la protéger contre l'intégration facile. Je sais: tout ce qui est fait par les humains peut être piraté ou détruit par les humains. Si Microsoft, Apple et d'autres grandes entreprises ne sont pas en mesure d'obtenir une protection réelle contre le piratage de leur logiciel - comment puis-je envisager de pouvoir ... ;-) – dhh

Questions connexes