Yo trabajo para una compañía que vende protegido software de Java.
No comentaré sobre el esquema de autenticación de usuario, pero puedo comentar sobre la verificación de licencia en línea.
No lo hagas ni siquiera "trabajar durante dos días": así es como pirateo la mayoría del software ... Máquina virtual configurada "atrás en el tiempo" y cortada con un firewall externo para que ya no "llame a casa" (eso es: solo permitiéndole contactar al servidor una vez, para obtener la clave de prueba), siempre reimpactada desde el punto donde el software se instaló recientemente y el bingo, la prueba de 30 días (o dos días de prueba) se ha convertido en una prueba de por vida. ¿Por qué hago esto? Para aprender cómo proteger mejor nuestra aplicación, por supuesto;) (ok, ok, lo hago solo por diversión)
Lo que hacemos en nuestro software comercial de Java es verificar la licencia en cada inicio.
Tenemos cientos de clientes y nadie se ha quejado al respecto. Ni una sola vez. Generamos una clase única en cada ejecución, que es diferente en cada ejecución, que depende tanto de las cosas únicas para ese lanzamiento en el lado del cliente como de las cosas generadas una vez en el lado del servidor.
Además de tener la aplicación, póngase en contacto con su servidor en cada lanzamiento para recopilar análisis: descarga a prueba, nb promedio de lanzamientos por prueba, etc. Y ya no es tan desagradable tener un Urchin/Google JavaScript rastreador en cada página web es desagradable.
Simplemente deje claro a las personas que su software realiza la verificación de la licencia en línea: hemos activado o desactivado una enorme casilla de verificación que dice: "Verificación de licencia en línea: OK/Fallido". Y eso es. La gente sabe que hay un cheque. Si no les gusta, usan productos inferiores de la competencia y la vida es buena.
La gente está acostumbrada a vivir en un mundo cableado.
¿Con qué frecuencia puede no acceder a GMail porque su conexión a Internet está caída?¿Con qué frecuencia puede no acceder a FaceBook o SO porque su conexión a Internet no funciona?
Point es: hacer tanto como sea posible el cálculo depende del lado del servidor:
- comprobación de licencia
- guardar las preferencias del usuario
- copia de seguridad de los datos generados por la aplicación
- etc.
Nadie se quejará. Tendrá un 0,1% de usuarios que se quejan y, de todos modos, no los quiere a estos usuarios: son ellos los que se quejan de otras cosas y publican comentarios negativos sobre su aplicación en línea. Es mejor que no usen el software y se quejan de que requiere una conexión a Internet siempre activa (que es el 99.99% de su público objetivo y por lo tanto no les importará la queja) en lugar de utilizarlas. la aplicación, y quejarse de otras cosas relacionadas con su aplicación.
En cuanto a la descompilación, .class generalmente se puede descompilar de nuevo en .java, a menos que esté utilizando un ofuscador de flujo de código que produzca un bytecode válido pero que sea imposible generarlo desde el archivo .java (por lo tanto, es imposible recuperarlo archivo .java válido).
El ofuscador de cuerdas ayuda a que sea más difícil de descifrar.
El código fuente obfuscator ayuda a que sea más difícil de descifrar.
Bytecode obfuscator como Proguard gratuito lo hace más difícil (y produce código más rápido, especialmente notable en el mundo de los dispositivos móviles) para averiguarlo.
Si está enviando Windows/Linux sólo entonces se puede usar un convertidor de Java a los nativos como Excelsior Jet (no libre y un poco caro para los arranques, pero produce código nativo desde el que simplemente puede no encontrar el archivos .java de vuelta).
Como nota curiosa verá a gente tratando de meterse con su servidor en línea ... Cerca de 30 beta-testers ya teníamos personas (que sabemos que formaban parte de la prueba) tratando de piratear nuestros servidores en línea .
http://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14764#14764 – RCIX
¿Podría cambiar el título de la pregunta para reflejar que se trata de DRM/asegurar que su aplicación no se agriete? ? – Kissaki