2012-06-05 7 views
7

Quiero hacer una aplicación de escritorio que solo se ejecute en máquinas que tienen clave o licencia. ¿Cómo se puede lograr esto?proteger la aplicación Java por licencia o clave

+0

¿Es una verificación en línea (por ejemplo, en cada inicio) una opción? – nfechner

+1

De todos modos, pienso en ello, es probable que su aplicación se rompa, ya que todo depende del cliente. – nhahtdh

+0

@nhahtdh Sin embargo, con suficiente esfuerzo, este es el caso para cualquier cosa ... – will

Respuesta

19

Esto depende totalmente de lo seguro que quiere que sea ...

El problema con Java es que se puede revertir compilarlo. Por lo tanto, si alguien quisiera, podría descargar su software, compilarlo en reversa y luego eliminar cualquier seguridad que haya puesto en su lugar (y luego redistribuirlo si lo desea).

Esto es solo un problema si planeas ir al mercado masivo y venderlo y la piratería en realidad sería un problema.

Si no le preocupa esto, puede optar por la verificación en línea o sin conexión.

La empresa con la que trabajo utiliza el método en línea; hay unos pocos pasos:

EDITAR: desde entonces he cambiado la forma en que esto funciona, ya que la antigua era una pesadilla de mantenimiento.

  1. Un archivo de licencia
    • (esta puede contener lo que quiera en realidad, sólo tiene que ser único por usuario La mayoría de la gente normalmente van con atuendo general;.
    • name
    • company
    • email
    • y luego un key. Es decir, JDU8-AJS9-88DF-SASF-ASF9 tipo de cosa que frecuentemente veo.
  2. El programa genera un hash del archivo de licencia.
    1. poner todos los datos desde el archivo de licencia en una cadena
    2. pasar la cadena a una función hash this page le puede mostrar cómo.
  3. tienen el programa de verificación en línea (en su servidor). Los datos se codifican en una solicitud HTML (post/get/json/lo que quieras) y se envían a la página de verificación de tu licencia, que luego verifica los datos. Incluido en los datos se encuentra una cadena generada aleatoriamente, que es utilizada por la página de verificación para generar otra contraseña.Esto luego se devuelve al programa, que también ha utilizado la cadena aleatoria para generar su propia contraseña. Si los dos coinciden, el programa se inicia.

Para generar las claves, simplemente use la misma función de hash, y luego cargue el hash en su servidor.

Si quiere que esté fuera de línea, puede incluir los valores hash en el código, supongo, y consultarlos allí.

Debo señalar, sin embargo, que no soy un experto en seguridad de ninguna manera, solo desarrollo para una empresa como parte de un doctorado y así es como lo hice.

Editar: esta imagen podría ser útil:

enter image description here

Segunda edición:

ahora he incluido "fuera de línea de verificación" en el proceso. En realidad, no se trata de verificación fuera de línea, solo usa al usuario como un proxy; es necesario que accedan a Internet de otra manera.

funciona así:

  1. sin conexión a Internet se encuentran: el usuario disponga de un código de 4 dígitos
  2. usuario va a fuera de línea página de verificación (optimizado para el uso móvil también)
  3. usuario selecciona el cual software que utilizan en la lista desplegable
  4. usuario enteres su nombre de usuario (este campo se acuerda de entradas)
  5. usuario introduce el código del programa les dio y se somete
  6. página web proporciona un código de 4 dígitos, que luego ingresan en el programa, y ​​comienza.
  7. El programa
  8. agrega algunos datos especiales al archivo de licencia, lo que significa que no será necesario repetir este proceso para la próxima semana/mes/independientemente de la duración.

cada vez que el programa con éxito verifica en línea, sino que también añade una contraseña de acceso fuera de línea para el archivo de licencia, lo que significa que es robusto frente a tiempo de inactividad temporales de Internet, y sólo dejará de funcionar si el Internet es presionado durante más de una semana/mes/sin importar cuánto tiempo esté configurado para trabajar.

+0

No lo entiendo, cuando un usuario hace una compra, les proporciona un archivo de licencia que contiene la clave de licencia hash utilizando la información que proporcionan al momento de la compra. o simplemente crea una clave y luego el usuario ingresa esta y la otra información en el programa y genera un archivo de licencia luego en la primera ejecución. –

+0

@PaulTaylor cuando alguien hace una compra, les devolvemos los detalles de la licencia (para confirmarlos con ellos). Cuando inicia el programa, busca el archivo de licencia. Luego concatena los datos en el archivo y pasa la cadena resultante a través de una función hash; si este hash coincide con el hash que tenemos para su clave de licencia en nuestros servidores, entonces comienza, de lo contrario, le solicita que complete un formulario. Luego crea el archivo de licencia que pasa por el hash en el futuro. – will

+0

@will exactamente qué servidor shoud devolverá en respuesta? booleano? algún tipo de llave? –

1

depende de cuántos clientes planee tener y el modo de distribución también. Puede utilizar un servidor de licencias, pero esto requiere una conexión a Internet para el cliente. También puede usar dongles USB para gestionar licencias.

No hay un sistema perfecto que necesite para hacer un compromiso entre simplicidad, esfuerzo y precio.

1

Puede rastrear la licencia de una máquina con macIP en línea. Incluso en Windows puedes escribir en el registro, no hay API, pero aún puedes hacerlo. Encuentra snippet abajo para leer registro -

public static final String readRegistry(String location, String key){ 
     try { 
      // Run reg query, then read output with StreamReader (internal class) 
      Process process = Runtime.getRuntime().exec("reg query " + 
        '"'+ location + "\" /v " + key); 

      StreamReader reader = new StreamReader(process.getInputStream()); 
      reader.start(); 
      process.waitFor(); 
      reader.join(); 
      String output = reader.getResult(); 

      // Output has the following format: 
      // \n<Version information>\n\n<key>\t<registry type>\t<value> 
      if(! output.contains("\t")){ 
        return null; 
      } 

      // Parse out the value 
      String[] parsed = output.split("\t"); 
      return parsed[parsed.length-1]; 
     } 
     catch (Exception e) { 
      return null; 
     } 

    } 

Y en el nivel de clase si desea ocultar el uso proGuard.

+0

Sin embargo, las direcciones de Mac pueden ser fácilmente falsificadas. Si desea seguir esta ruta, es más seguro intentar crear una huella dactilar de computadora única. – will

+0

¿Cómo se puede generar la huella digital de la computadora? –

+0

bueno, eso depende de ti realmente. Una vez hablé con una compañía que hace su licencia de esa manera, y el tipo dijo que usaron una gran cantidad de cosas, como la dirección MAC, los detalles de hardware, tal vez la dirección IP (pero eso cambia mucho, así que depende de cómo quiero que tu licencia funcione). Personalmente, solo hago un seguimiento de varios detalles, y no tengo restricciones, pero luego reviso los detalles de vez en cuando, y si parecen estar abusando de él (lo cual no ha sucedido todavía), entonces los corté. – will

Cuestiones relacionadas