2011-09-03 5 views
1

J'ai une application RCP basée sur Java 1.6. J'utilise un identifiant unique de machine virtuelle sur une machine en tant que numéro pour identifier une machine de manière unique et générer une clé de licence basée sur ce numéro.Clé de licence pour application Java RCP sur VMId

J'ai fait des tests de base et cela semble fonctionner plutôt bien. Je suis capable d'identifier chaque machine de manière unique et VMId reste le même pour plusieurs sessions (redémarrage, déconnexion, etc.). Aussi, si je copie mon installation de logiciel sur une machine différente, cela ne fonctionne pas. La seule appréhension que j'ai est que si c'est la façon parfaite de construire un algo de licence pour une application RCP. Sont leurs scénarios de bord de la frontière où cela peut échouer. Je suis très inquiet si quelqu'un met à jour leur logiciel Java, cela va changer VMId.

En attente d'avis d'experts,

Naveen

+0

Comment calculez-vous le VMID? utilisez-vous 'java.rmi.dgc.VMID'? – Favonius

+0

ouais, j'utilise la même fonction. Est-ce correct ? – Naveen

Répondre

1

Si vous voyez le constructeur par défaut de java.rmi.dgc.VMID

public VMID() 
{ 
    addr = localAddr; 
    uid = new UID(); 
} 

alors vous trouverez que cela dépend du hash de la propriété intellectuelle adresse (qui sera la même pour toute la machine utilisant le localhost ou 127.0.0.1). Mais (et c'est un big mais), cela dépend aussi du java.rmi.server.UID.

Maintenant, comme par javadoc:

Une instance UID indépendamment généré est unique au fil du temps avec rapport à l'hôte, il est généré aussi longtemps que l'hôte nécessite plus d'un millième de seconde pour redémarrer et son système l'horloge n'est jamais réglée en arrière.

Maintenant, il n'y a pas de machine disponible qui redémarre en moins d'une milliseconde. Le plus rapide que j'ai vu sont MS-DOS (pas sûr de l'heure de démarrage) et Google OS (prend 3-4 secondes, selon leur promo). Donc, je me sentirai en sécurité si c'est le seul facteur mais je vais quand même tester le facteur setting the system clock backward.


Si je dois utiliser votre produit sur plusieurs machines, mais en ne payant que pour celui alors je l'installer sur un système d'exploitation en cours d'exécution sur VMPlayer ou VirtualBox. De cette façon, je pourrais distribuer plusieurs copies de votre outil. Avez-vous vérifié ce scénario.

En outre, sur ma machine de développement j'ai normalement deux JDK differnt (un dernier pour jouer autour et un deuxième pour le développement spécifique de client). Les classes VMID et UID sont connues pour avoir quelques problèmes avec plusieurs JVM. Vérifiez ceci: http://www.velocityreviews.com/forums/t131825-can-we-generate-unique-id-from-java.html.

En outre, un coup d'oeil à ce javadoc: http://fuseyism.com/classpath/doc/java/rmi/dgc/VMID.html

Normalement, les stratégies de licence que j'ai vu sont beaucoup plus impliqués. Comme (sur Windows machine) créer/utiliser des valeurs de clé de registre, sauvegardées par un service web pour une inscription unique, demander à l'utilisateur une valeur salée (comme son nom, son âge) et ensuite générer une clé de licence.Donc, enfin, si vous êtes sûr que vos utilisateurs n'utiliseront pas de technologie de virtualisation (comme vmplayer, etc.), il n'y a pas de problèmes multiples liés à la JVM et ils pourraient ne pas avoir d'Internet disponible pour l'activation. . Mais gardez à l'esprit que pour un attaquant déterminé, aucun logiciel n'est trop difficile à casser, comme en témoigne le nombre de jeux et de logiciels piratés/piratés disponibles sur le marché.

+0

ok, donc le VMId est différent pour plusieurs machines connectées au même routeur et aussi pour les machines autonomes. En outre, il reste même entre les redémarrages aussi. La seule chose que je testerai sera le voyage dans le temps. Je ne me soucierais pas de MS-DOS, ce n'est pas mon client :). Je me demandais juste s'il y avait quelque chose que je pourrais manquer avant de réellement pousser ceci à mon logiciel de prod – Naveen

+0

@Naveen: voir ma réponse mise à jour. – Favonius

+0

Merci pour la réponse détaillée. Je vais vérifier avec plusieurs copies de VM. Bien que mes utilisateurs ne soient pas bénis sur le plan technique, je ne les mettrai pas au défi d'adopter ma logique de licence. Je pense aussi à l'intégration de dongles de licence, etc., mais je ne sais pas comment l'autoriser de manière efficace. Merci pour votre aide – Naveen

Questions connexes