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.
¿Quiere decir protegerlos contra la descompilación o simplemente protegerlos contra el uso? – NotMe
Por ahora estoy buscando el uso, pero realmente buscando ambos. Actualizó la pregunta en consecuencia. – Matt