2009-02-17 24 views
5

Tengo esta aplicación java swing que pretendo vender a través de Internet. Por el momento me inclino por implementar la aplicación usando java webstart. El producto tendrá licencia para que el usuario use el programa en una computadora a la vez. Estoy preocupado por la piratería con este modelo. Me gustaría instalar algunas características de seguridad para hacer cumplir el modelo de licencia. El objetivo es, como mínimo, dificultar que un usuario con licencia copie el producto instalado, incluida la clave de licencia, a los usuarios sin licencia. Estas son las opciones que estoy viendo en este momentoCómo prevenir la piratería para la aplicación java webstart

  1. obligar al usuario a autenticar a la nave madre con un nombre de usuario/contraseña cada vez que se inicia el programa.

  2. Simplemente instale una clave de licencia en algún lugar (¿oculto?) En la PC del usuario después de que se hayan registrado y pagado. En tiempo de ejecución, verifique que haya una clave de licencia válida instalada.

  3. Utilice/cree un paquete de seguridad basado en una huella digital de hardware de la computadora del usuario. Esta huella digital se computaría cada vez que se inicia la aplicación y se compara con la clave de licencia instalada localmente utilizando algún tipo de hash. Esta clave de licencia solo sería válida con esta huella dactilar de hardware.

Uno de los problemas aquí es que una vez que se ha instalado esta aplicación, no hay ninguna necesidad de tiempo de ejecución para la aplicación ponerse en contacto con la nave nodriza, con excepción de la comprobación de actualizaciones de aplicaciones utilizando Java Web Start. Todo lo que hace la aplicación lo hace localmente y muestra los resultados al usuario que usa swing. Por lo tanto, cualquier solución que implique un buque nodriza significará básicamente construir una infraestructura de servidor con el único propósito de verificar la licencia.

Supongo que lo que estoy buscando es algo basado en Java que sea al menos algo seguro, fácil de implementar y que no le cueste al usuario. ¿Qué enfoque de seguridad/licenciamiento ha usado?

EDIT: Debo añadir que no estoy necesariamente buscando una bala de plata para evitar que absolutamente todos derroten la seguridad. Siempre habrá alguien con suficiente tiempo para buscar formas de hacerlo. No estoy tan preocupado con estos tipos. Básicamente busco dificultar que un usuario casual simplemente copie la clave de licencia y la envíe a sus amigos. Implementada correctamente, la solución debe convencer al usuario casual de que es más sencillo comprarla.

+0

¿Software que calcula una huella dactilar de su hardware y habla con la nave nodriza solo para fines de licencia? Suena como un dolor en el a ** y me recuerda esas cosas de activación de Windows. Por favor, no hagas esto. –

Respuesta

10

Yo diría que (2) es su mejor opción. Ya has hablado de (1) y (3) causaría problemas si el usuario, por ejemplo, compró una nueva placa base. (2) no será mucha protección contra un usuario razonablemente experto en informática, pero tampoco debería causar demasiados problemas.

Pero al final, nada que pueda hacer impedirá que un usuario determinado piratee su software.

De hecho, la estrategia más eficaz desarrollo de software anti-piratería es la más simple de todas:

  1. tiene un gran producto maldita.
  2. Cargue un precio justo.

- Jeff Atwood

+0

No estoy seguro de qué es un "producto maldito". –

9

IMO, tratar de hacer cumplir la protección contra copia en el lado del cliente es probablemente más problemas de lo que vale la pena. Pasarás innumerables horas tratando de burlar a tus clientes (horas que podrías gastar mejorando tu producto), pero al final los piratas siempre ganarán.

tiene otras opciones, sin embargo:

  1. tiene un modelo de fijación de precios atractivos, y que sea muy simple que la gente compre su producto. Si tiene barreras de entrada lo suficientemente bajas y trata a su cliente con respeto y confianza en lugar de sospechas, minimiza el riesgo de piratería.
  2. Ate su producto a algún tipo de servicio en línea. Regale al cliente, pero cobra por el servicio. Esto es lo que Blizzard hace con World of Warcraft, y ese es uno de los pocos juegos que no tiene ningún problema de piratería (tienen muchos otros problemas, pero esa es otra historia).
+0

Solo un pequeño detalle, pero el ejemplo del punto 2 es incorrecto: Blizzard también te cobra por el cliente, y tienen problemas de piratería, por lo que persiguen a personas que escriben software de emulación de servidor. – Powerlord

+0

Tienen problemas de piratería, pero esas personas no pueden obtener la misma experiencia que quienes pagan. Están atrapados en servidores privados de mala calidad con poblaciones más bajas. – ryeguy

+0

Mi ejemplo sobre WoW puede no ser del todo exacto, pero mi punto es que entre las compañías de juegos de PC, Blizzard tiene menos problemas con la piratería que la mayoría (comparar con las pésimas ventas de Crysis, un juego emblemático que fue fuertemente pirateado). –

3

Honestamente, a menos que el programa realmente necesita datos desde el servidor para funcionar (como Fred-o declaró que World of Warcraft necesita, y es cierto), entonces no hay nada que puede hacer el lado del cliente que será completamente a prueba de tontos. Las 3 ideas que tenías podrían ser eludidas fácilmente. El servidor/inicio de sesión puede ser un poco más difícil, pero incluso he visto grietas hasta el punto de crear localmente un servidor de inicio de sesión ficticio, por lo que el programa cree que está siendo autenticado.

La única forma verdadera de prevenir la piratería es tener alguna lógica del lado del servidor que el programa NECESITA ejecutar. Por ejemplo, estás creando un software que cambia el tamaño de las imágenes (lo sé, lo sé). Si la imagen original se envió a su servidor y se redimensionó allí y luego se devolvió al cliente (a diferencia del cliente que cambia el tamaño), entonces estaría seguro porque su servidor puede protegerse fácilmente con un sistema de inicio de sesión de algún tipo . Y sin un nombre de usuario o contraseña válidos (o si intentaron generar uno falso), el programa sería inútil.

Si implementa la funcionalidad del lado del cliente, se puede llegar a ella, haga lo que haga.

+0

Sí, no estoy buscando algo a prueba de tontos.Dado que realmente no hay datos y/o lógica en un servidor que esta aplicación necesita, probablemente estoy viendo alguna variación del n. ° 2. – startmeup

2

de sus tres soluciones:

La primera requiere una conexión de red para hacer cualquier cosa. Los usuarios no estarán contentos si no pueden usarlo fuera de línea. Google tuvo que lidiar con eso para su software de oficina.

El segundo no es mucha protección contra copia, a menos que la ubicación esté oculta, y una ubicación oculta tiene sus propias dificultades (algunas personas, por ejemplo, no les gusta instalar aplicaciones que les gusta ocultar cosas en varios lugares), y no t seguro de todos modos.

El tercero probablemente funcionará hasta que un usuario haga algo en una computadora que cambie la huella dactilar (no sé qué controlaría), o si desea mover la aplicación de una computadora a otra. Entonces tendrás un usuario potencialmente iracundo. ("Reemplacé el disco duro/moví a una conexión LAN diferente/tuve una falla del sistema/lo que sea, y la cosa [eliminada] dejó de funcionar!")

Entonces, mientras que el número 2 probablemente no cause un problemas del usuario, no funcionará para gran parte de un esquema de protección de copia. Los números 1 y 3 te van a hacer pasar por usuarios infelices, serán una gran cantidad de problemas para ti y no impedirán que personas determinadas copien de todos modos.

3

Mi mejor apuesta, implementar una solución fácil que no le gravar demasiado, y eso no significa que los clientes furiosos, para desalentar la piratería ocasional. Algo más complicado y será una carrera armamentista. Uno que es muy difícil de ganar.

1

Reconsideraría seriamente los requisitos de licencia, porque hacerlos perderá clientes legítimos. Si eres una gran empresa, puedes permitírtelo, pero si eres una startup o una persona no puedes.

Una salida es ofrecer una licencia individual, válida para todas las máquinas que utiliza el individuo. Esto, para bien o para mal, es la forma en que las personas piensan que el software "debería" venderse. Si les hace pagar por cada máquina que usan, sentirán que están tomando ventaja, y es entonces cuando comienzan a buscar la clave de licencia de otra persona en la web.

Si corresponde, también puede ofrecer una licencia corporativa, o 10 paquetes de licencias, o lo que sea, para obtener un descuento sobre la compra por separado. Esto les brinda a las personas y a las organizaciones formas de utilizar su software de manera legal que no los hacen sentir como si los exprimieran sin razón.

0

Considere usar JNLP para tener un componente de tiempo limitado en su aplicación: ¿el módulo de licencia? - que debe actualizarse regularmente a través de Internet. La accesibilidad a la versión actualizada requiere registro. Deje que

Tenga un período de gracia largo que le permita al usuario estar fuera de línea (o no querer actualizar) durante un período anterior a la desactivación de la funcionalidad.

0

A menos que la aplicación ya necesite conectarse a la red para hacer su trabajo real, llamar a casa podría clasificarse fácilmente como spyware.

Y no estoy seguro de si esto se aplica a Java Web Start, pero como los cortafuegos pueden bloquear su aplicación de llamar a casa, sus clientes que pagan aún pueden ver su aplicación bloqueada.

Entonces: No utilizaría algo que los teléfonos de la casa de vez en cuando.

(En cuanto a las claves de licencia: si una clave solo funciona con un nombre de registro específico, y si ese nombre se muestra en algún diálogo Acerca de, entonces no me preocuparía hacerlo dependiente del hardware. Claro, algunos nombres de registro y sus claves serán compartidas, pero cualquier cosa más sofisticada no vale la pena. Si mi Mac me falla, no me divertiría ver que mi restauración Time Machine de 1 clic en el hardware nuevo hace que la aplicación no se inicie).

Cuestiones relacionadas