Soy nuevo en la programación .NET, y me pregunto, desde una perspectiva de seguridad, si el esquema de denominación fuerte utilizado en los ensamblados .NET elimina completamente la necesidad de otras técnicas de uso común, como empaquetar el código ensamblado. / p>
Para ser claro, estoy hablando de aplicaciones .NET que se ejecutan en el lado del cliente y mi objetivo es asegurarme de que el usuario (cliente) no pueda modificar la aplicación. Este es un problema común para los desarrolladores de software y juegos, y sé que no se puede mitigar al 100%, pero estoy buscando una solución que detenga la mayoría de los crackers.
Si he malinterpretado completamente el uso de nombres fuertes, corríjame y apúnteme en la dirección correcta :)
editar: probablemente también debería mencionar que me preocupa más la integridad de la aplicación, no necesariamente manteniendo los algoritmos ocultos / secretos .
Editado para agregar respuesta gracias a CodeInChaos
Parece que los nombres fuertes están totalmente rotos y no ofrecen ningún tipo de seguridad, dado que el atacante tiene acceso a los ensamblajes en una máquina donde está root. Explicación de nombres importantes y .NET Framework-Rootkits explican esto.
Los ensamblajes en .NET Framework se colocan en carpetas dentro de la GAC con nombres de carpetas correspondientes a la firma cuando están firmados por el autor original. Las firmas nunca se verifican, por lo que si un atacante reemplaza una DLL del framework con la suya y la coloca en una carpeta "correcta", la DLL del atacante será aceptada como legítima. Esto significa, por supuesto, que el atacante puede cambiar las funciones en el marco utilizado para verificar nombres seguros en aplicaciones .NET, y por lo tanto permite que un atacante modifique las aplicaciones .NET con su propio código.