.net - tecnicas - ofuscar codigo visual studio 2017
(¿Por qué) debería usar ofuscación? (8)
Me parece que la ofuscación es una idea que cae en algún lugar en el campo de "seguridad por oscuridad" o "falso sentido de protección". Para proteger la propiedad intelectual, hay derechos de autor; para evitar que se encuentren problemas de seguridad, está solucionando esos problemas . En resumen, lo considero como una solución técnica a un problema social. Esos casi nunca funcionan.
Sin embargo, parezco ser el único en nuestro equipo de desarrollo en sentirme así, así que estoy equivocado o simplemente necesito argumentos convincentes. Nuestro producto usa .NET, y un desarrollador sugirió .NET Reactor (que, dicho sea de paso, también se sugirió en este hilo SO ).
.NET Reactor detiene por completo cualquier descompilación mezclando cualquier ensamblado .NET puro (escrito en C #, VB.NET, Delphi.NET, J #, MSIL ...) con código máquina nativo.
Entonces, básicamente, ¿arrojas todas las ventajas de bytecode de una vez?
¿Hay buenos beneficios de ingeniería para la ofuscación?
La razón principal para usar la ofuscación es proteger la propiedad intelectual como usted ha indicado. En general, es mucho más rentable para una empresa comprar un producto de ofuscación como .NET Reactor que intentar legalmente hacer valer sus derechos de autor.
La ofuscación también puede proporcionar otros beneficios más incidentales tales como mejoras en el rendimiento y reducción del tamaño del conjunto. Estos serían los beneficios de ingeniería que está buscando.
Si bien no está relacionado con .net, consideraría ofuscación en Javascript y posiblemente en otros idiomas interpetados. Javascript se beneficia bien de la ofuscación porque reduce el ancho de banda necesario y los tokens que el analizador debe leer.
Pero ofuscar el bytecode compilado no parece realmente útil para mí. Quiero decir, ¿qué intentarías y lograrías? Solo puedo ver que la ofuscación es ligeramente útil en el código de verificación de licencia para evitar que se evite demasiado fácilmente.
Si se apega a la ofuscación pura del código administrado, puede reducir un poco el tamaño de un ensamblaje, y las clases / nombres de funciones ofuscados (contraídos en una sola letra) significan una menor huella de memoria. Esto es casi siempre insignificante, pero tiene un impacto (y se usa) en algunos dispositivos móviles / integrados (aunque principalmente en Java).
Si un gran equipo de programadores realmente quisiera obtener su código fuente y eso tuviera el tiempo, el dinero y el esfuerzo, entonces tendrían éxito.
La ofuscación, por lo tanto, debe detener a las personas que no tienen el tiempo, dinero o esfuerzo para obtener su fuente, los transeúntes pueden llamarlos.
Un posible beneficio de ingeniería es que en algunos casos la ofuscación puede crear ejecutables más pequeños u otros artefactos, por ejemplo, ofuscar los resultados de JavaScript en archivos más pequeños (porque todas las variables se llaman "a" y "b" en lugar de "descriptiveName" y todos los espacios en blanco es despojado, etc.). Esto da como resultado tiempos de carga más rápidos para las páginas web que usan javascript ofuscado. Obviamente, esto no se aplica (tanto) en el mundo .NET, pero es un ejemplo de una situación en la que hay un beneficio de ingeniería directo.
Use cifrado para proteger la información en el camino.
Use la ofuscación para proteger la información mientras su programa aún la tenga.
Usted pidió razones de ingeniería, por lo que no es estrictamente una respuesta a la pregunta. Pero creo que es una aclaración válida.
Como dices, la ofuscación tiene la intención de abordar un problema social. Y los problemas sociales (o comerciales), a diferencia de los técnicos, rara vez tienen una solución completa. Solo hay grados de éxito para abordar o minimizar el problema.
En este caso, la ofuscación levantará las barreras para que alguien descompile y robe su código. Desalienta los ataques casuales y, por inercia, puede hacer que su propiedad intelectual sea menos probable que sea robada. Para hacer una analogía tediosa, un inmovilizador no evita que te roben el auto, pero lo hará menos probable.
Por supuesto, hay un costo, en mantenimiento, (posiblemente) en el rendimiento y, lo más importante, en hacer más difícil que los usuarios envíen informes de fallas con precisión.
Como dijo GateKiller, la ofuscación no impedirá que un equipo determinado se descompile, pero (y depende de cuál sea su producto) ¿cuán determinado es probable que un equipo lo ataque?
Entonces, esta no es una solución técnica a un problema social, es una decisión técnica que agrega una influencia a una estructura social compleja.
Publiqué una pregunta que podría ayudarlo a medida que discute algunos de los problemas: should-i-be-worry-about-ofuscating-my-net-code