2010-05-24 12 views
8

Actualmente desarrollo una aplicación C# .Net en la que estoy usando un control personalizado que desarrollé hace algún tiempo. Necesito que se envíe el dll dentro de la nueva aplicación, pero comprensiblemente, no quiero que el archivo dll se use para aplicaciones extranjeras.Cómo evitar que un dll se cargue en otras aplicaciones

Es por eso que necesito que el dll personalizado sea compilado de alguna manera dentro de la nueva aplicación. Actualmente, el dll se copia en el directorio de la aplicación.

¿Alguna idea? Debería ser un imho trivial.

, gracias & cordiales, Daniel

+0

Si pones tu código en la computadora de otra persona, pueden ejecutarlo. Cualquier cosa que hagas para evitar eso es, en el mejor de los casos, un speedbump. –

Respuesta

3

Mira en IL Merge. Esta utilidad le permite combinar múltiples ensamblajes .NET en un solo ensamblaje.

cito:

ILMerge es una utilidad que se puede utilizar para combinar múltiples NET en un solo conjunto. ILMerge toma un conjunto de ensamblajes de entrada y los combina en un ensamblaje de destino. El primer conjunto en la lista de ensamblados de entrada es el ensamblaje principal. Cuando el ensamblaje principal es un ejecutable, el ensamblaje objetivo se crea como un ejecutable con el mismo punto de entrada que el ensamblaje primario. Además, si el ensamblaje principal tiene un nombre fuerte y se proporciona un archivo .snk, el ensamblaje de destino se vuelve a firmar con la clave especificada para que también tenga un nombre seguro.

Algo a tener en cuenta, sin embargo, es que las personas aún pueden usar el ensamblaje creado. Observe las ofuscaciones y las licencias para mantener a raya la tranquilidad, pero recuerde que si alguien quiere su código lo suficientemente mal, lo obtendrá.

Ciertas cosas lo hacen mucho más difícil, como tener un servicio web, pero incluso así no es una prueba completa.

1

Si puede cambiar la DLL con el control de la propiedad, se puede ...

  1. Marcar todo en la DLL de control interno.
  2. Compile su ensamblado para que su DLL de llamada tenga acceso a los miembros internos de su DLL de control.
  3. Firme la DLL que realiza la llamada.

Consulte este MSDN page para obtener detalles sobre cómo hacerlo.

0

Hay una serie de diferentes hacks que puede hacer para que esto sea más difícil de usar para la gente. Todos ellos pueden ser eludidos, pero así es la vida.

Usted puede mirar en esta respuesta aquí para no permitir un montaje desconocida hacer referencia a su montaje: Secure C# Assemblies from unauthorized Callers

Usted debe ofuscar su montaje si está realmente nervioso por ello. Esto lo hará más difícil para descompilar.Algo como Babel funciona muy bien: http://babelobfuscator.blogspot.com/

También puede usar ILMerge para almacenar el conjunto en otro ensamblaje. Sin embargo, este ensamblado se extraerá y expondrá en tiempo de ejecución. Puede hacer algo a lo largo de estas líneas para extraer un recurso binario de un ensamblaje y crear un ensamblaje temporal que se utiliza en tiempo de ejecución. Si alguien está realmente motivado, también pueden encontrar el ensamblaje temporal ...

La verdadera pregunta es ¿qué tan lejos quieres ir? En algún momento no valdrá la pena. Ahí es donde te detienes.

+0

Hum, no quiero ir muy lejos, todo lo que quiero es que el dll no sea visible en el directorio de la aplicación a primera vista o que de alguna manera lo proteja contra la incrustación. Lo sé: todo lo humano puede ser pirateado o destruido por los humanos. Si Microsoft, Apple y otras grandes compañías no pueden lograr una protección real contra la piratería de su software, ¿cómo puedo pensar en poder ... ;-) – dhh

Cuestiones relacionadas