2010-12-13 23 views
6

¿Cuál es la mejor práctica para proteger DLL para los proyectos en los que está trabajando? Ciertas DLL que estoy interesada en desarrollar tendrán la capa de acceso a datos (DAL) y la funcionalidad de capa de lógica de negocios (BLL). Puede haber varias aplicaciones que puedan llegar a estas DLL para realizar funciones específicas de negocios.Cómo proteger .NET DLL's

¿Cuál es la mejor manera de proteger estos archivos DLL para que solo puedan ser utilizados por las aplicaciones del creador?

La seguridad tanto para bloquear el uso no autorizado de los DLL como para la seguridad contra la posible descompilación son deseables.

+2

¿Quiere decir protegerlos contra la descompilación o simplemente protegerlos contra el uso? – NotMe

+0

Por ahora estoy buscando el uso, pero realmente buscando ambos. Actualizó la pregunta en consecuencia. – Matt

Respuesta

4

Una opción podría ser marcar todas las clases expuestas en su DLL como "interna" en lugar de "pública", luego use el atributo "InternalsVisibleTo" en su DLL para nombrar explícitamente las DLL (y posiblemente ex) que pueden usar tus tipos internos Esto puede requerir que todos los participantes tengan un nombre fuerte, pero eso es algo bueno que hacer de todos modos.

En última instancia, no hay una forma absoluta de evitar que un pirata informático determinado acceda a su código cuando se está ejecutando su código en la máquina del hacker. Todo el código que puede ejecutar la máquina se puede desmontar y volver a ensamblar en otra cosa con herramientas y experiencia suficientemente avanzadas.

La mejor manera de abordar la seguridad del código es hacer la pregunta "¿Cuán difícil queremos que alguien use este código sin licencia o autorización, y cuánto tiempo/dinero estamos dispuestos a gastar para lograrlo? ? " Si no hace nada, es muy fácil para alguien usar sus archivos DLL en algún otro proyecto. Si hace algunas cosas simples, puede hacer que sea incómodo que alguien use sus archivos DLL en otro lugar. Si invierte meses de esfuerzo, es posible que pueda hacer que sea muy difícil que alguien abuse de su código, pero nunca puede hacerlo imposible.

Una técnica que es lo más segura que puedo imaginar es: no ejecute su código en la máquina del cliente (o hacker). En su lugar, ejecute un servicio web y mantenga su código en el servidor donde un hacker no puede desencadenar un depurador de forma casual en su proceso o desensamblar su código. La seguridad del código se define entonces por la seguridad física en la ubicación del servidor y la seguridad de acceso a la red en los puertos del servidor. Estos vectores de ataque son muchos órdenes de magnitud más difíciles de eludir que cualquier cosa que pueda hacer para codificar que se ejecuta en la máquina del pirata informático.

Para algunas compañías de software, trasladar una parte de sus aplicaciones del cliente a la nube no se trata de obtener una mejor escalabilidad o actualizaciones más fáciles o costos más bajos, se trata de seguridad del código y prevención de la piratería.

+0

No realmente. .NET también le permite hacer referencia a los ensamblados de archivos ejecutables, por lo que tiene poca o ninguna diferencia. –

+0

Con una herramienta como Reflector de Red Gate. Incluso en un ejecutable casi todo parece descompilarse con relativa facilidad. Entonces, ¿incluir esto en un exe proporciona mucha ayuda en realidad? – Matt

+0

Me retracto de la sugerencia de "extraer el código en la DLL", según el punto de Brian. El resto se mantiene: no hay bloqueos absolutos, por lo que debe decidir cuánto está dispuesto a invertir para que el pirateo resulte más inconveniente. – dthorpe

1

Establezca la autenticación utilizando el mecanismo Abrir clave. Las funciones en el DLL solo funcionarán si proporciona una clave válida y el token.

+0

¿Puede aclarar o proporcionar enlaces a algún tipo de ejemplo? – Matt

1

Si alguien tiene acceso a la máquina con todos los ensamblajes, tiene más de qué preocuparse que alguien reutilizándolos, simplemente pueden ir directamente a la base de datos en lugar de usar su ensamblaje.

Si se trata de una aplicación de escritorio o algo así y accede directamente a la base de datos, debe volver a pensar su aplicación, acceder a los datos a través de servicios web o algo así en lugar de ir directamente a la base de datos.

+0

El escenario existe en un entorno replicado. Las máquinas pueden o no tener conectividad a Internet en un momento dado, por lo que los servicios web no son una opción. – Matt

+0

Sooooo ... No veo cuál es tu punto. Hablar directamente con la base de datos es malo, y todavía no tienes motivos para hablar directamente con él. – Phill

+0

Ok Tengo un DAL y BLL en proyectos separados y luego compilado en DLL. Estas bibliotecas controlan nuestra lógica y operaciones DB. La aplicación principal es una aplicación WPF que contiene solo la capa de presentación. Hay otras aplicaciones secundarias que también afectarán algunas de las mismas operaciones DAL y BLL. Esto se hace simplemente para evitar la codificación duplicada de las diferentes aplicaciones necesarias. El propósito de DAL es hablar con el DB. – Matt

1

Proteger su propiedad intelectual no es realmente posible si lo envía en forma de DLL .NET a un cliente. Podría alojar su lógica de aplicación en la nube, aunque eso podría no adaptarse a su escenario.

Incluso los "mejores" ofuscados no son infalibles.Probablemente puedas posponer a un hacker casual, pero como dthorpe dice, si alguien realmente quiere descompilar tus ensamblajes, lo harán.