¿Cómo puedo proteger mis ensambles .NET de la descomstackción?

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

La protección contra la descomstackción sigue siendo una tarea difícil. Todavía estoy buscando una forma 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 más. Reflector u otras herramientas no deberían poder reconocer mi aplicación como ensamblado de .NET. Ya sé sobre algunas herramientas, pero son muy caras. ¿Hay alguna otra forma de proteger mis aplicaciones?

EDITAR:

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

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

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

Si no puede evitar la piratería, ¿qué hay de simplemente reducirla? Esto también está mal orientado. Solo hace falta que una persona descifre tu código para que esté disponible para todos. Tienes que tener suerte todo el tiempo. Los piratas solo tienen que ser afortunados una vez.

Te lo planteo, el objective debería ser maximizar las ganancias. Pareces creer que detener la piratería es necesario para este esfuerzo. No lo es. El beneficio es simplemente ingresos menos costos. Detener la piratería aumenta los costos . Requiere esfuerzo, lo que significa agregar costos en algún punto del proceso, y así reduce ese lado de la ecuación. Proteger su producto tampoco hace nada para boost sus ingresos. Sé que miras a todos esos piratas y ves todo el dinero que podrías ganar si solo pagaran los aranceles de tu licencia, pero la realidad es que esto nunca sucederá. Aquí hay algo de hipérbole, pero generalmente sostiene que los piratas que no puedan dañar su seguridad encontrarán un producto similar del que pueden crackear o prescindir. Nunca lo comprarán, y por lo tanto no representan ventas perdidas.

Además, asegurar 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 lo tanto deciden no volver a comprar o pedir que les devuelvan 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 comprar. Limitar la distribución pirateada de su producto ( si de alguna manera puede tener éxito en esto) evita que estas personas prueben su producto alguna vez, y entonces nunca lo comprarán. Además, la piratería también puede ayudar a que su producto se extienda a un público más amplio, llegando así a más personas que estarán dispuestas a pagar por ello.

Una mejor estrategia es suponer 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 mi código sea robado?
Asegurar una aplicación .NET

En el trabajo aquí utilizamos Dotfuscator de PreEmptive Solutions.

Aunque es imposible proteger ensamblajes .NET 100% Dotfuscator lo hace bastante difícil, creo. Viene con muchas técnicas de ofuscación;

Cambio de nombre de ensamblado cruzado
Renombrar esquemas
Prefijo de cambio de nombre
Inducción de sobrecarga mejorada
Ofuscación incremental
Informe de cambio de nombre HTML
Flujo de control
Cifrado de cadena

Y resultó que no son muy caros para las pequeñas empresas. Tienen un precio especial para pequeñas empresas.

(No, no estoy trabajando para PreEmptive ;-))

Hay alternativas de freeware por supuesto;

Aloje su servicio en cualquier proveedor de servicios en la nube.

Cómo prevenir la descomstackción de cualquier aplicación C #

Más o menos describe la situación completa.

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

El código de la máquina tampoco es muy diferente. Un buen desensamblador / depurador interactivo como IDA Pro hace que cualquier aplicación nativa sea transparente. El depurador es lo suficientemente inteligente como para usar IA para identificar API comunes, optimizaciones de comstackdor, etc., lo que permite al usuario reconstruir meticulosamente las construcciones de mayor nivel a partir del ensamblado generado a partir del código de máquina.

Y IDA Pro también es compatible con .Net.

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

Sé que no quieres ofuscar, pero tal vez deberías echar un vistazo a dotfuscator , tomará tus ensamblajes comstackdos y los ofuscará por ti. Creo que incluso puede encriptarlos.

Ningún obsfuscator puede proteger su aplicación, ni siquiera la que se describe aquí. Vea este enlace, es un desobsuscador que puede desobstruir casi todos los obsfuscadores.

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

La mejor manera que puede ayudarlo (pero recuerde que tampoco son expertos) es usar códigos mixtos, codificar sus códigos importantes en un lenguaje no administrado y crear una DLL como 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, también puede proteger su software .NET.

He oído hablar de algunos proyectos que comstackn directamente IL en código nativo. Puede obtener información adicional de esta publicación: ¿es posible comstackr el código .NET IL para el código de máquina?

Usamos {SmartAssembly} para la protección .NET de una aplicación distribuida de nivel empresarial, y nos ha funcionado de maravilla.

Si quieres proteger completamente tu aplicación de la descomstackción, mira Aladdin’s Hasp. Puede envolver sus ensamblajes en un shell cifrado al que solo puede acceder su aplicación. Por supuesto, uno se pregunta cómo pueden hacerlo, pero funciona. No obstante, no sé si protegen su aplicación del archivo adjunto / reflexión en tiempo de ejecución, que es lo que Crack.NET puede hacer.

– Editar También tenga cuidado de comstackr a código nativo como una solución … también hay descomstackdores para código nativo.

Si alguien tiene que robar su código, es probable que su modelo comercial no funcione. ¿Qué quiero decir con eso? Por ejemplo, compro tu producto y luego pido ayuda. Está demasiado ocupado o cree que mi solicitud no es válida y una pérdida de tiempo. Decodifico tu producto para apoyar mi negocio relativo. Tu producto se vuelve más valioso para mí y le doy prioridad a mi tiempo para resolver el modelo comercial para aprovechar tu producto. Recodigo y renombro su producto y luego salgo y gano el dinero que decidió dejar sobre la mesa. Hay razones para proteger el código, pero lo más probable es que esté mirando el problema desde una perspectiva equivocada. Por supuesto que lo eres. Tú eres el “codificador”, y yo soy el hombre de negocios. 😉 ¡Salud!

PD. También soy un desarrollador. es decir, “codificador”

¿Tienes API?

En lugar de tratar de proteger su archivo ddl en uno de sus productos en todos los dispositivos de sus clientes, ¿por qué no crear un servicio API para sus características de productos preciosos? Deje que el producto real que se guarda en un dispositivo consum esa API para entregar el producto como lo desee.

Creo que de esta manera estás 100% seguro de que tu código no está descomstackdo y estableces tus propios límites en tu API para que los desarrolladores / hackers no consumn tu API de una manera que no la desees.

Claro, hay algo más de trabajo, pero al final, tienes el control.

Sé que esto es antiguo, pero Themida es el software anti-cracking más avanzado que he usado.
Sin embargo, no es gratis.