Pregunta

Duplicado de: Cómo proteger archivos dll?

Me gustaría proteger a mi C# DLL de ser utilizado por aplicaciones de terceros.Me gustaría sólo MI applycation para utilizar este archivo DLL.¿Cómo puedo lograr eso ?

Gracias.

¿Fue útil?

Solución

Esto simplemente no es posible.

Todo el código de acceso de seguridad del sistema se basa en la idea de que decisiones de seguridad vienen desde el usuario que ejecuta el código, no , desde el el autor de el código.Que, el código de autor, no se llega a decirle a sus usuarios lo que sus decisiones de seguridad son;eres el usuario del siervo, no el maestro del usuario.

Ahora, usted puede hacer difícil para el código de terceros el uso de su código.Se pueden utilizar diversos atributos de seguridad documento que su la intención es para el código de terceros para no utilizar el código.Esos son buenos pasos, pero en realidad no soluciona su problema en cualquier mundo en el que los usuarios son hostiles a usted. En el CAS modelo, los usuarios siempre se gana.

Por ejemplo:usted puede tener métodos en el código de las demandas de seguridad que desencadenan recorridos de pila para comprobar si todo el mundo en la pila de llamadas tiene ciertas pruebas asociadas con ellos.Por ejemplo, la evidencia", este archivo DLL se firmó con Guillaume fuerte nombre de la clave privada, que es encerrado en un cajón de Guillaume de la oficina" sería una buena evidencia para comprobar.Que casi garantizar que todo el mundo llame a su código es también su código.

Pero ese no es el propósito de fuerte nombre de la firma;el propósito de fuerte nombre de la firma es la de ayudar al usuario a saber que el código piensan que se están ejecutando en realidad viene de usted.El uso de una herramienta de seguridad para un propósito distinto de lo que fue la intención es peligroso, como veremos.Se le da una falsa sensación de seguridad.

Supongamos que el usuario quiere hacer una aplicación que no es tuyo que utiliza el archivo DLL.Los usuarios pueden escribir código de plena confianza, y código de plena confianza tiene derecho a falsificar pruebas.Eso es lo que "plena confianza" significa.Por lo que el usuario hace una solicitud que no fue firmada por usted, pero debido a que el usuario puede confiar plenamente en que la aplicación de la plena confianza de la aplicación se puede forjar la evidencia para decir que el código que viene de ti.

El asunto es que no hay nada que impida que el usuario simplemente tomar el código, la eliminación de su firma, y reemplazarla con su firma.Se puede decir que su contrato prohíbe que, y usted puede demandar si usted averiguar, pero no puede hacer nada para detenerlos.

Y diablos, el usuario puede desactivar TODO el sistema de la seguridad si se quiere, en cuyo caso nada se puede ejecutar.

Usted debe considerar si usted desea enviar su archivo DLL para los clientes en todo.Si contiene secretos que no quiere salir, entonces no compartir estos secretos con miles de clientes, algunos de los cuales podrían ser hostil.Si usted mantiene su archivo DLL en sus propios servidores y ofrecer su servicio a través de la web, entonces usted no vuelvas a enviar su archivo DLL para clientes y por lo tanto se puede utilizar en sus propias máquinas para fines distintos de lo que usted piensa.

Otros consejos

interna en el DLL y luego en Propiedades de \ AssemblyInfo.cs, establecen el InternalsVisibleTo atribuyen a único punto a la fuerte nombre de la aplicación.

No hay solo barrera eficaz Sin embargo, puede configurar una serie de obstáculos para poner a la gente unirse a su DLL.

  1. Utilice el editor y / o permisos de seguridad de acceso del código de identificación, de manera que se puede comprobar el código de llamada proviene de usted (a través de la prueba x509cert y StrongName). No se olvide de utilizar el -t al firmar el ensamblado de otro modo cuando su x509cert expira se producirá un error.

(Strong Name identifica la asamblea, Editorial identifica que publicó el montaje.)

Se podría también desee comprobar para la desactivación de la seguridad CAS en .NET que a su vez puede llevar a cabo mediante programación en el activo que está protegiendo.

  1. Ofuscación su DLL posterior acumulación (pero antes de firmar).

  2. Considere agregar algún tipo de verificación de licencias de verificación programática final.

HTH

Phil '

Tenga en cuenta que esta protección debe ser de dos tipos. Si se protege sólo el DLL, cualquier hacker acaba de empezar a analizar su aplicación para aprender cómo se llama la DLL. Por otra parte, si el tercero tiene acceso completo a su DLL entonces van a tener éxito en el descubrimiento de que es funcionamiento interno, no importa qué tan fuerte es su protección. Aunque algunos esquemas de protección tendrán más tiempo para romper que otros. Básicamente, la protección de su DLL debe depender del valor de esta DLL. Si un hacker puede guardar o ganar millones por el pirateo de su DLL, que seguramente hacerlo. Si el archivo DLL sólo les proporciona una ganancia financiera mínima, lo más probable es que no van a molestarse romperlo.

Si usted quiere mantener su código DLL segura, configurar un servicio web en cualquier sitio y configurar la aplicación para llamar a este servicio en lugar de un archivo DLL local. A continuación, los hackers tendrán muchos más problemas para acceder a su biblioteca. Por desgracia, también requiere que los usuarios tengan una conexión permanente a Internet.

(Básicamente, esta es la razón por la computación en nube es cada vez más popular. Los usuarios pueden utilizar aplicaciones en la nube, pero no tienen acceso a los archivos binarios.)

Obfusc su código es solución complementaria

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top