clr - quitar - Firma de ensamblados.NET: ¿Esto protege realmente mi ensamblaje contra manipulaciones?
como quitar sophos home (4)
La firma de ensamblaje está diseñada para permitir que las aplicaciones / ensamblajes hagan referencia a un ensamblaje y asegurarse de obtener el ensamblaje al que originalmente hicieron referencia. Si alguien quisiera, en teoría podrían descompilar toda su aplicación y volver a compilar sin firmar. (es decir, podrían recompilar el conjunto de referencia para que haga referencia a una versión sin firmar del ensamblado al que se hace referencia ).
Luego, podrían modificar el código como quisieran, porque el cliente (exe) ahora haría referencia a un dll sin firmar (o ''re-signed'').
Para dificultar el proceso de descompilación y recompilación, podría intentar crear un ensamblaje C ++ / CLI de modo mixto que contenga tanto códigos administrados como nativos. Pero sí ... en última instancia, la gente tiene todos tus binarios a mano y con suficiente esfuerzo probablemente puedas evitar cualquier sistema de licencias que pienses.
Estoy implementando un sistema de "bloqueo" en mi aplicación que protege mi aplicación contra copia y uso ilegal. El sistema verifica la firma de un código basado en hardware y espera que se firme con una clave privada que solo pertenece a mi empresa. (La aplicación tiene la clave pública para validar la firma).
Quiero asegurarme de que nadie cambie mi mecanismo de bloqueo en la aplicación, así que quiero firmar el ensamblaje de mi aplicación y creo que tiene sentido.
- Como no he visto nunca que el CLR hable de que la firma de un ensamblaje no es válida, quiero asegurarme de que este sistema realmente funcione. ¿Lo hace? ¿Qué debo hacer para que funcione?
- ¿Puede un atacante concentrar sus esfuerzos en el CLR para que no le importe mi firma? Es decir, si no puede alterar mi código porque lo he firmado, ¿puede manipular CLR?
- En general, me gustaría saber su experiencia sobre tales protecciones seguras y tecnologías de protección. ¿Alguien puede sugerir algo más?
Hay una gran cantidad de conceptos erróneos sobre las asambleas firmadas. La firma de la asamblea no es, como señaló mackenir, un mecanismo seguro que se utilizará para evitar que sus ensamblajes sean manipulados. El siguiente artículo sobre codeproject ofrece un tratamiento bastante bueno del tema:
http://www.codeproject.com/KB/security/StrongNameExplained.aspx
La firma de su código solo permite la detección de manipulación, no la previene. Alguien que sepa lo que está haciendo puede eliminar su firma y, si es necesario, agregar la suya.
En realidad, la mayoría de los esquemas de protección contra copia son una pérdida de tiempo y pueden ser subvertidos, y también tienden a molestar a sus clientes que pagan. En última instancia, no puede evitar que alguien modifique y ejecute su código en el hardware que controlan. Simplemente haga que sea lo suficientemente difícil que sea más fácil ir al departamento de compras y obtener un cheque por escrito, y que es difícil olvidar que no tiene una copia con licencia. Aquellos que se preocupan eventualmente pagarán, y aquellos que no lo harán nunca lo harán.
También tenga en cuenta que incluso si piensa que la mayoría de la gente no se molestará en descifrar su plan, o no tiene la habilidad para hacerlo, no importa. Porque una vez que una persona ha subvertido su esquema de protección contra copia, pueden ponerlo a disposición en un sitio de torrente para aquellos que no tengan la habilidad para hacerlo, y se acabó el juego.
Una de las técnicas que puede utilizar para evitar la manipulación es utilizar la clave pública de su ensamblaje para cifrar partes esenciales de su software, como los parámetros de aplicación / algoritmo. Si se cambió la clave pública, el descifrado no funcionará y su aplicación se bloqueará.
Algunos ofuscadores como Crypto Obfuscator usan esta técnica con la función de encriptación de cadenas. Utiliza la clave pública de su ensamblaje para encriptar todas las cadenas. Si la clave pública ha sido modificada o eliminada, el descifrado fallará y su aplicación ni siquiera comenzará.