[java][protection logiciel]

[protection logiciel] [java] - Java - Programmation

Marsh Posté le 06-02-2005 à 23:15:23    

Bonsoir a tous.
 
Je vais avoir une application java a ecrire, mais qui doit etre protegée par une sorte de licence.
En gros, l'application serait simplement un repertoire avec une page html, un fichier class, et des fichiers de config.
 
Pour "installer" le logiciel, l'utilisateur aurait juste a copier ce repertoire sur son disque dur.
Au premier demarrage de l'appli, celle ci s'appercoit que le fichier licence n'existe pas.
L'appli informe donc l'utilisateur, et celui ci doit alors placer un fichier licence dans le repertoire pour activer l'application.
 
La difficulté, c'est que si la personne copie le repertoire sur une autre machine, donc avec le fichier licence, l'appli doit le detecter, ne pas se lancer, et demander une nouvelle licence.
 
Ca parait difficile a faire, mais je sais exactement comment on peut arriver a ce principe de fonctionnement. Le truc, c'est que je ne sais pas si c'est faisable en java...
 
En fait, au 1er demarrage, l'appli doit calculer un code qui soit propre a la machine. Pour obtenir sa licence, l'utilisateur envoit a l'administreur le code que l'appli lui a fourni. L'administreur calcule un fichier licence avec ce code, et l'envoit a l'utilisateur.
Ensuite, a chaque demarrages, l'appli recalcule ce code propre a la machine et verifie qu'il correspond bien avec le fichier de licence.
 
Si la personne copie l'appli sur une autre machine, le code calculé ne correspondra pas avec le fichier licence, donc on demande a l'utilisateur un nouveau fichier licence.
 
La difficulté est donc que l'appli doit pouvoir identifier la machine ou elle tourne, meme en cas de desinstallation, reinstallation de l'os, et tout et tout.
 
En fait, comme l'appli est une appli reseau, la machine possedera forcement une ou plusieurs interfaces reseaux.
Le but serait donc de pouvoir recuperer la ou les adresses MAC des cartes reseaux de la machine.
 
Avec cette adresse mac, l'appli peut calculer un code propre a la machine, que l'utilisateur envoit a l'admin. Celui ci lui fournit en retour un fichier licence.
S'il copie le tout sur une autre machine, l'appli ne marche plus.
 
Le principe est donc simple, mais la question est : peut on recuperer en java les adresses MAC des interfaces reseaux ?
 
Ou bien avez vous une autre idée, ou connaissez vous un autre moyen simple de proteger une application, de facon a ce qu'elle ne puisse fonctionner que sur une machine ?
 
 
Bonne soirée a tous.
 
Cyril

Reply

Marsh Posté le 06-02-2005 à 23:15:23   

Reply

Marsh Posté le 07-02-2005 à 09:29:13    

On en a parlé récemment sur ce forum -> fonction recherche.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-02-2005 à 21:24:06    

Ben j'avais regardé mais visiblement j'ai du merder quelque part car au debut j'avais rien vu.
 
Apres quelques heures de recherches sur le net, c'est donc possible mais le code n'est pas tres portable puisqu'il faut appeler une commande systeme dans l'os, (ipconfig ou ifconfig par exemple), et traiter la chaine pour recuperer l'adresse MAC.
 
Ca me parait assez complexe, mais je ne vois pas bien comment generer un code propre a une machine sans utiliser ces fameuses adresses mac.
 
J'imagine que je ne suis pas le seul a vouloir proteger une application java contre la copie ?
 
Quelle solution adopter d'apres vous ?
 
Bonne soirée a tous,
 
Cyril

Reply

Marsh Posté le 07-02-2005 à 21:29:23    

Ouais, j'sais bien, c'est pas la panacée... [:djswad]
 
D'un autre côté, ce code n'est pas destiné à être porté, puisqu'il doit justement se limiter à une machine bien précise !


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-02-2005 à 21:30:48    

http://www.macrovision.com/service [...] jfaq.shtml


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 07-02-2005 à 21:36:50    

Je demande à voir comment ils font pour attaquer si bas niveau en Java ?
 

Citation :

Node-locked licenses
On most non-PC systems, the software is locked to a unique serial number, "burned in" by the manufacturer, called a "hostid." Hostid equivalents exist for Windows machines.


 
Tu as déjà utilisé ce produit ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-02-2005 à 21:38:18    

Justement pas moi sircam, je ne sais pas du tout sur quelle machine va tourner mon soft.
C'est pour cette raison que j'ai choisi le java. C'est pour etre independant de la machine. Le java faisant l'interface entre le haut niveau et le systeme (fichiers, ports serie, ports parallele, etc..).
C'est donc dommage qu'il n'y ait pas un moyen simple d'acceder aux cartes reseau par exemple.
 
A+

Reply

Marsh Posté le 07-02-2005 à 21:47:03    

Le lien sur macrovision semble etre un systeme a base de client/serveur. Le client interroge le serveur pour verifier la licence.
 
Dans mon cas, il faudrait plutot pouvoir comparer un fichier licence avec un identiant unique a la machine.
Comme ca pas besoin de serveur.
 
Je crois que le plus simple c'est d'avoir un dongle sur le port parallele par exemple.
 
Le logiciel ne s'execute pas si le dongle n'est pas present.
Par contre j'ai cru voir que le java est facilement decompilable, donc c'est facilement piratable...
Mais bon, ce n'est pas un logiciel commercial. En fait, dans une grosse boite par exemple, c'est juste pour que le logiciel ne puisse fonctionner que d'une machine, et pas d'une autre. (d'ailleurs le dongle ne va donc pas !)
 
A+

Reply

Marsh Posté le 07-02-2005 à 22:05:41    

Contournable, ça l'est relativement facilement en java, mais bon, l'entreprise moyenne ne s'amuse pas à décompiler pour hacker (quoique).
 
Ces trucs de dongles, c'est assez limitatif et plutôt dédié (si ttes les applis commençaient comme ça, je me demande comment on ferait).


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 07-02-2005 à 22:07:22    

Juste un conseil : demande toi si le fait de devoir développer, maintenir et surtout gérer les licenses de tout ce bordel vaut le coup par rapport aux bénéfices que tu as à en tirer.


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 07-02-2005 à 22:07:22   

Reply

Marsh Posté le 07-02-2005 à 22:16:19    

Ce n'est pas vraiment un probleme de benefices.
 
Comme je l'ai dit plus haut, ce n'est pas un logiciel commercial. C'est juste que je dois par exemple autoriser l'appli sur une machine, et pas les autres.
 
Si quelqu'un d'autre veut l'installer, il faut imperativement que ca passe par moi.
 
Mais niveau developpement, c'est 3 fois rien. Une fois le moyen trouvé pour avoir un identifiant unique par machine, c'est 90% du boulot de fait.
 
Ensuite l'appli recupere ce code dans la machine, le passe dans une moulinette et le compare au fichier licence.
 
Et de mon coté, j'ai juste un soft dans lequel je rentre l'identifiant unique et il me sort le fichier licence correspondant.

Reply

Marsh Posté le 08-02-2005 à 01:20:09    

Il faut que ca soit limité à une machine déterminé quel que soit l'utilisateur ou plustôt à un utilisateur déterminé quelle que soit la machine?
 
Dans le premier cas, tu pourais utiliser l'adresse IP et un fichier. A la premiére conection, le fichier n'existe pas, ca envoie une demande de license, le serveur conait l'adresse IP du client et peut donc créer la license. les autres fois, le client envoie le contenu du fichier (la license quoi) et son adresse IP afin que le serveur en vérifie la validité. Si la license est pas bonne, le serveur peut prendre en compte qu'il y a erreur de license sur tel poste et donc enclancher une nouvelle demande de license avec choix de l'administrateur.
Cette méthode me semble compatible avec les infos que t'as doné plus haut (un serveur de création de license) et, bonus, ca permet également d'empêcher le craquage de la vérification de la license par décompilation du programme client. Par contre si quelqu'un modifie le client, là, ca se complique. Autre défaut, c'est si t'as des IP dynamique, là, cette méthode ne marchera pas et pour cause. :(
 
Dans le second cas, un simple login + mot de passe avec le controle fait soit au niveau d'un serveur soit au niveau de chaque client comme tu préfaire.

Reply

Marsh Posté le 08-02-2005 à 07:59:07    

nlc a écrit :

Ce n'est pas vraiment un probleme de benefices.


 
Lorsque je parle de bénéfice, je ne parle pas forcément de bénéfice pécunier ...
 
 

nlc a écrit :


Si quelqu'un d'autre veut l'installer, il faut imperativement que ca passe par moi.


 
Ca par exemple c'est un bénéfice.
 

nlc a écrit :


Mais niveau developpement, c'est 3 fois rien. Une fois le moyen trouvé pour avoir un identifiant unique par machine, c'est 90% du boulot de fait.


 
Tu oublies :  
- les machines qui répondent 0000000000000000 à tous les identifiants (certains portables)
- les machines qui laissent pas acceder au hardware
- les machines sans carte reseau (ou pire : avec la carte reseau qui s'active au branchement du cable)
- les gens qui changent de machine comme de chemises (tu vas passer pas mal de temps à refaire des licenses, je te le garantie).
 
De part ce que je fais professionnellement, je suis bien placé pour le savoir. Si ça ne tenais qu'a moi, je l'aurais viré ce truc...


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 08-02-2005 à 08:19:35    

Pour omega2 :  
 
Dans le cadre d'une verification de licence client/serveur, il n'y a pas de probleme, evidemment.
Mais le but du jeu est d'avoir un systeme anti copie sans avoir besoin d'une gestion compliquée de licence avec un serveur.
Plus haut je ne parlais pas de serveur de mon coté, juste d'une application permettant de calculer un fichier licence avec l'identifiant unique de la machine que l'utilisateur m'envoit. Ensuite je lui renvois par mail le fichier licence.
 
Pour Elianor :
 
Effectivement, pas facile de calculer un identifier un identifiant unique pour une machine dans ces conditions !
Je crains qu'il n'y ait donc pas de solution a mon probleme.
 
J'ai bien vu des solutions commerciales sur le net, ils calculent un identifiant unique par rapport a la structure des repertoires du systeme. Et ils ont un demon qui permet a chaque modification du systeme de mettre a jour l'identifiant. Voir http://www.chainkey.com/en/jchains/ pour les curieux.
 
A+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed