¿Cuáles son algunas buenas convenciones a seguir si quiero que mi aplicación sea más difícil de descifrar?¿Convenciones a seguir para hacer que el software comercial sea más difícil de descifrar?
Respuesta
Siempre que toda su aplicación sea del lado del cliente, es completamente imposible protegerla de grietas. La única forma de evitar que una aplicación se resquebraje es hacer que tenga que conectarse a un servidor para funcionar (como un juego en línea, por ejemplo).
E incluso entonces, he visto algunas grietas que simulan un servidor y envían una confirmación ficticia al programa, por lo que piensa que está hablando con un servidor legítimo real (en este caso estoy hablando de una "llamada a casa") estrategia de verificación, no un juego).
Además, tenga en cuenta que donde hay un testamento, hay una manera. Si alguien quiere tu producto mal, lo obtendrá. Y al final implementará protección que puede causar complicaciones a sus clientes honestos y simplemente se considera un desafío para los crackers.
También, vea this thread para una discusión muy detallada sobre este tema.
esto es casi como misión imposible, a menos que tenga muy pocos clientes.
considere: ¿alguna vez ha visto una versión de Windows que no esté rajada?
libro: Writing Secure Code 2
Hay 3 ª Parte herramientas para ofuscar su código. Visual Studio viene con uno.
PERO, primero, debes pensar seriamente por qué te molestaría. Si su aplicación es lo suficientemente buena y popular como para desear que se rompa, será, a pesar de todos sus esfuerzos.
Lo que ocurre con el código .NET es que es relativamente fácil realizar ingeniería inversa usando herramientas como .NET Reflector. La ofuscación del código puede ayudar, pero aún es posible funcionar.
Si inventa una forma de protegerlo, alguien puede inventar una forma de descifrarlo. Dedique suficiente esfuerzo para que cuando las personas lo usen de una manera "ilegal", lo sepan. La mayoría de las cosas más allá de eso corren el riesgo de ser una pérdida de tiempo; o)
Si desea una solución rápida (pero, por supuesto, no hay promesa de que no se rajeará, es solo una "protección"), puede buscar para algunas herramientas como Themida o Star Force. Estas son las dos cáscaras de protección famosas.
Es realmente imposible. Simplemente suelta un parche a menudo y luego cambia la sal en tu encriptación. Sin embargo, si su software se resquebraja, sea orgulloso, debe ser realmente bueno :-)
Muchas de las respuestas parecen perder el sentido de que la pregunta era cómo dificultarla, no cómo hacerla imposible.
La ofuscación es el primer paso crítico en ese proceso. Cualquier cosa más será demasiado fácil de resolver si el código no está ofuscado.
Después de eso, depende un poco de lo que intenta evitar. Instalación sin una licencia? La prueba cronometrada explotando? ¿Aumenta el uso del software (por ejemplo, en más CPU) sin pagar tarifas adicionales?
En el mundo de las máquinas virtuales de hoy en día, la estrategia a largo plazo contra la formación de grietas debe incluir algunas llamadas de hogar.El entorno es demasiado fácil de hacer prístino. Dicho esto, algunos tipos de software son inútiles si tiene que volver a un estado prístino para usarlos. Si ese es su tipo de software, entonces hay lugares bastante oscuros para poner cosas en el registro para rastrear las pruebas cronometradas. Y, en general, un esquema de clave de licencia que es difícil de falsificar.
Sin embargo, hay que tener en cuenta una cosa: no seas demasiado elegante. Muy a menudo, el esquema de licencias obtiene la menor cantidad de control de calidad, y golpea problemas serios en la producción donde los clientes legítimos quedan bloqueados. No aleje a los clientes que realmente pagan por temor a que las personas los copien, lo más probable es que no le hayan pagado ni un centavo.
Éstos son algunos consejos, no es perfecto, pero tal vez podría ayudar:
- actualización de su software con frecuencia
- si su software se conecta a algún servidor en algún lugar cambiar el protocolo de vez en cuando. incluso puede tener una serie de protocolos y alternar entre ellos en función de algún algoritmo
- almacenar parte de su software en un servidor que descarga cada vez que ejecuta el software
- cuando inicia su programa haga una verificación crc de su dlls que cargue, es decir, que tenga una lista de crc para los dll aprobados
- tenga un servicio que pase por alto su aplicación principal haciendo comprobaciones crc de vez en cuando y monitoreando sus otros dll's/assemblies dependientes.
Desafortunadamente cuanto más gasta en copiar y proteger su software, menos tiene que gastar en funcionalidad, todo sobre el equilibrio.
otro enfoque es vender su software barato, pero para hacer actualizaciones/actualizaciones frecuentes, baratas, de esa manera no será rentable crackear.
- 1. Cómo hacer que Application.Properties.Settings sea público y seguir así
- 2. ¿Lanzamiento temprano/lanzamiento a menudo para el software comercial?
- 3. Algoritmo de diferencias binarias para software comercial
- 4. Creación de software Java comercial (DRM)
- 5. ¿Cómo hacer que EditText sea más pequeño que el predeterminado?
- 6. ¿Cómo hacer que Rotate3dAnimation sea más suave?
- 7. Cómo hacer que TimePicker sea más pequeño
- 8. ¿Puedo hacer que JUnit sea más detallado?
- 9. Eclipse: hacer que el corchete sea más notable
- 10. Acuerdo de licencia comunitaria para software comercial (SaaS)?
- 11. ¿Una forma de hacer que md5_file() sea más rápido?
- 12. Distribuir licencia jquery en software comercial
- 13. QSplitter: ¿Cómo hacer que la segunda columna sea más pequeña?
- 14. ¿Cómo hacer que este código sea más SECO?
- 15. Cómo hacer que mi código sea más seguro
- 16. ¿Es Google Guava "más difícil" de usar que Apache Collections?
- 17. Scala, hacer que mi ciclo sea más funcional
- 18. ¿Cómo hacer que la deserialización XML sea más rápida?
- 19. ¿Cómo hacer que este Twisted Python Proxy sea más rápido?
- 20. Cómo hacer que un C++ EXE sea más grande (artificialmente)
- 21. Cómo hacer que la declaración if grande sea más legible
- 22. ¿Cómo hacer que Lucene QueryParser sea más indulgente?
- 23. ¿Cómo hacer que este script sed sea más rápido?
- 24. Hacer que el divisor sea visible para el Panel dividido
- 25. ¿Cómo puedo hacer que mi colisión sea más sólida?
- 26. ¿Cómo hacer que este código C++ sea más SECO?
- 27. ¿Qué idiomas idioms/paradigmas/características hacen que sea difícil agregar soporte para "tipos de proveedores"?
- 28. ¿Qué puede hacer que el código F # no optimizado sea más rápido que el código optimizado?
- 29. cómo puedo hacer que este código sea más optimizado
- 30. Haciendo que WCF sea más fácil de configurar