¿Cómo puedo proteger mis ensamblados .NET de la descompilación?

Resuelto TalkingCode asked hace 14 años • 13 respuestas

Una de las primeras cosas que aprendí cuando comencé con C# fue la más importante. Puede descompilar cualquier ensamblado .NET con Reflector u otras herramientas. Muchos desarrolladores no son conscientes de este hecho y la mayoría se sorprenden cuando les muestro su código fuente.

La protección contra la descompilación sigue siendo una tarea difícil. Todavía estoy buscando una manera rápida, fácil y segura de hacerlo. No quiero ofuscar mi código, por lo que los nombres de mis métodos serán a,b,c o algo así. Reflector u otras herramientas no deberían poder reconocer mi aplicación como ensamblado .NET. Ya conozco algunas herramientas pero son muy caras. ¿Existe alguna otra forma de proteger mis aplicaciones?

EDITAR:

El motivo de mi pregunta no es prevenir la piratería. Sólo quiero evitar que los competidores lean mi código. Sé que lo harán y ya lo hicieron. Incluso me lo dijeron. Tal vez estoy un poco paranoico, pero que mis rivales comerciales lean mi código no me hace sentir bien.

TalkingCode avatar Mar 19 '10 21:03 TalkingCode
Aceptado

Una cosa a tener en cuenta es que desea hacer esto de una manera que tenga sentido comercial. Para hacer eso, necesitas definir tus objetivos. Entonces, ¿cuáles son exactamente tus objetivos?

¿Prevenir la piratería? Ese objetivo no es alcanzable. Incluso el código nativo se puede descompilar o descifrar; La multitud de warez disponibles en línea (incluso para productos como Windows y Photoshop) es una prueba de que un hacker decidido siempre puede obtener acceso.

Si no se puede prevenir la piratería, ¿qué tal simplemente reducirla? Esto también es un error. Sólo hace falta que una persona descifre tu código para que esté disponible para todos. Tienes que tener suerte cada vez. Los piratas sólo tienen que tener suerte una vez.

Les digo que el objetivo debe ser maximizar las ganancias. Parece creer que detener la piratería es necesario para lograr este objetivo. No lo es. La ganancia es simplemente ingresos menos costos. Detener la piratería aumenta los costos . Requiere esfuerzo, lo que significa agregar costos en alguna parte del proceso y, por lo tanto, reduce ese lado de la ecuación. Proteger su producto tampoco logra aumentar sus ingresos. Sé que miras a todos esos piratas y ves todo el dinero que podrías ganar si en su lugar pagaran tus derechos de licencia, pero la realidad es que esto nunca sucederá. Hay cierta hipérbole aquí, pero generalmente se sostiene que los piratas que no pueden vulnerar su seguridad encontrarán un producto similar que podrán vulnerar o prescindirán de él. En su lugar, nunca lo comprarán y, por lo tanto, no representan pérdida de ventas.

Además, proteger su producto en realidad reduce los ingresos . Hay dos razones para esto. Uno es el pequeño porcentaje de clientes que tienen problemas con su activación o seguridad, y por tanto deciden no volver a comprar o pedir la devolución de su dinero. El otro es el pequeño porcentaje de personas que realmente prueban una versión pirateada de software para asegurarse de que funciona antes de comprarlo. Limitar la distribución pirateada de su producto ( si de alguna manera puede lograrlo) evita que estas personas prueben su producto y, por lo tanto, nunca lo comprarán. Además, la piratería también puede ayudar a que su producto se difunda a un público más amplio, llegando así a más personas que estén dispuestas a pagar por él.

Una mejor estrategia es asumir que su producto será pirateado y pensar en formas de aprovechar la situación. Un par de enlaces más sobre el tema:
¿Cómo evito que me roben el código?
Proteger una aplicación .NET

Joel Coehoorn avatar Mar 19 '2010 15:03 Joel Coehoorn

Aloja tu servicio en cualquier proveedor de servicios en la nube.

David Fox avatar Mar 19 '2010 14:03 David Fox

Cómo evitar la descompilación de cualquier aplicación C#

Describe prácticamente toda la situación.

En algún momento, el código deberá traducirse al código de bytes de VM y el usuario podrá acceder a él en ese momento.

El código de máquina tampoco es muy diferente. Un buen desensamblador/depurador interactivo como IDA Pro hace transparente casi cualquier aplicación nativa. El depurador es lo suficientemente inteligente como para usar IA para identificar API comunes, optimizaciones del compilador, etc. Permite al usuario reconstruir meticulosamente construcciones de nivel superior a partir del ensamblaje generado a partir del código de máquina.

Y IDA Pro también es compatible con .Net hasta cierto punto.

Honestamente, después de trabajar en un proyecto de ingeniería inversa (para compatibilidad) durante algunos años, lo principal que saqué de mi experiencia es que probablemente no debería preocuparme demasiado de que la gente robe mi código. Si alguien lo quiere, nunca será muy difícil conseguirlo, sin importar el esquema que implemente.

kervin avatar Mar 19 '2010 14:03 kervin

Ningún ofuscador puede proteger su aplicación, ni siquiera ninguno de los descritos aquí. Vea este enlace, es un desfuscador que puede desfuscar a casi todos los ofuscadores que existen.

https://github.com/0xd4d/de4dot

La mejor manera que puede ayudarle (pero recuerde que tampoco son completamente profesionales) es usar códigos mixtos, codificar sus códigos importantes en un lenguaje no administrado y crear una DLL como en C o C++ y luego protegerlos con Armageddon o Themida. Themida no es para todos los crackers, es uno de los mejores protectores del mercado y también puede proteger su software .NET.

Tejashwi Kalp Taru avatar Oct 22 '2013 18:10 Tejashwi Kalp Taru