Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2100 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Implementer une limite de temps sur une appli = trialware

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Implementer une limite de temps sur une appli = trialware

n°410222
mauvais_ka​rma
I'll be damned
Posté le 28-05-2003 à 11:41:56  profilanswer
 

Bonjour,  
 
Ma question concerne sur les moyens pour implementer une limite de temps sur un programme dévelloppé en JAVA.  
 
De fait ca revient a un shareware de fonctionnalité totale mais limité dans le temps. Par contre je ne vois pas trop comment implementer quelquechose de solide et de secure en effet il s'agit d'un logiciel d'entreprise, donc il faut que se soit quelquechose de pro et non pas une simple bidouille.  
 
J'espere que l'un d'entre vous pourras m'éclairer mais surtout me conseiller sur quel moyen choisir.  
 
Merci  
 
PS: je dois aussi faire la meme chose pour une appli en C/C++ donc si dans la foulé vous avez des infos la dessus.

mood
Publicité
Posté le 28-05-2003 à 11:41:56  profilanswer
 

n°410228
bobuse
Posté le 28-05-2003 à 11:45:47  profilanswer
 

pour la limitation je sais pas trop, mais de toutes facons, il va falloir utiliser un obfuscateur (obfsucator) pour brouiller le code (sinon ca va etre trop facile a craquer), pour ca tu peux faire une recherche sur le forum, le sujet a deja ete aborde plusieurs fois :)


---------------
get amaroK plugin
n°410238
mauvais_ka​rma
I'll be damned
Posté le 28-05-2003 à 11:50:04  profilanswer
 

Merci Bobuse,
 
oui l'obfuscateur j'y avais pensé pas de probleme la dessus.
 
Mais c'est le bordel de temps limité c plus galere  :fou:

n°410252
senternal
Posté le 28-05-2003 à 12:02:42  profilanswer
 

Mauvais_Karma a écrit :

Ma question concerne sur les moyens pour implementer une limite de temps sur un programme dévelloppé en JAVA.


 
Voir les packages de Java Cryptography Extension java.sun.com/products/jce, sauf si tu as jdk > 1.4.x, ou c'est deja integré
 
Dans ton cas, la limitation peut se faire avec une clef (voir KeyGeneration)
Une classe A avec parametres d'entrée (dates de debut/fin, utilisateur...etc ), combinée avec JCE pour calculer une clef d'activation a la volée.
 
- Tu fournis un fichier "toto.key" au client
- Ce fichier contient les parametres identifiant le client, la date de debut, de fin d'utilisation, les fonctionnalités accessibles... Tout ca est bien sur encryptés (tu peux utiliser un RessourceBundle par ex encrypté via JCE)
- Ce fichier est lu par ton appli au demarrage via une classe spécialisée qui va decrypter le fichier (voir JCE), extraire les infos et les passer a une classe de traitement des acces
- La classe de traitement peut renvoyer un code de validation d'acces, une exception... Ce que tu veux


Message édité par senternal le 28-05-2003 à 12:17:26
n°410323
mauvais_ka​rma
I'll be damned
Posté le 28-05-2003 à 13:42:26  profilanswer
 

senternal, elle est bonne ton idée mais tu dis que dans le fichier toto.key il y a une date de fin ?
Donc je suis obligé de spécifier cette date a chaque fois que je distribue l'appli ?


Message édité par mauvais_karma le 28-05-2003 à 13:42:49
n°410344
El_gringo
Posté le 28-05-2003 à 14:01:35  profilanswer
 

Mauvais_Karma a écrit :

senternal, elle est bonne ton idée mais tu dis que dans le fichier toto.key il y a une date de fin ?
Donc je suis obligé de spécifier cette date a chaque fois que je distribue l'appli ?


 
Apparement, cette solution nécessite que chaque distribution ai une clé spécifique. ça n'a rien de choquant qu'un produit nécessite un clef d'activation spécifique. Et comme ça, tu peux utiliser le même système pour le débloquage de ton appli, en fournissant un clé de validation permanante.

n°410348
senternal
Posté le 28-05-2003 à 14:03:27  profilanswer
 

Mauvais_Karma a écrit :

senternal, elle est bonne ton idée mais tu dis que dans le fichier toto.key il y a une date de fin ?
Donc je suis obligé de spécifier cette date a chaque fois que je distribue l'appli ?


 
Tu n'es pas obligé de spécifier une date de fin... C'est un exemple...  :sarcastic:
 
Tu peux tout aussi bien ne pas mettre de date debut/fin et mettre uniquement une durée d'utilisation (30 par exemple pour 30 jours). Ensuite, dans ton code, tu peux aller lire cette durée dans la clef et vérifier que la date du jour - date d'install < durée d'utilisation. Je ne peux pas te donner une soluce clef en main... Un peu de reflexion !!  :D


Message édité par senternal le 28-05-2003 à 14:05:50
n°410357
El_gringo
Posté le 28-05-2003 à 14:08:16  profilanswer
 

senternal a écrit :


 
Tu n'es pas obligé de spécifier une date de fin... C'est un exemple...  :sarcastic:
 
Tu peux tout aussi bien ne pas mettre de date debut/fin et mettre uniquement une durée d'utilisation (30 par exemple pour 30 jours). Ensuite, dans ton code, tu peux aller lire cette durée dans la clef et vérifier que la date du jour - date d'install < durée d'utilisation. Je ne peux pas te donner une soluce clef en main... Un peu de reflexion !!  :D  


 
Il cherche peut être à empêcher une utilisation de + de 30 jours, même si l'utilisateur modifie la date de son PC.

n°410366
senternal
Posté le 28-05-2003 à 14:15:01  profilanswer
 

El_gringo a écrit :


 
Il cherche peut être à empêcher une utilisation de + de 30 jours, même si l'utilisateur modifie la date de son PC.


 
Auquel cas, sous Windows, il lui faut modifier les fichiers System (comme le bon vieux System.dat, base de registres ?? et encore...) et dans ce cas, tu oublies sous Linux/Unix... A ma connaissance (limitée peut-etre), il n'existe pas de systeme simple sans intervention sur les parametres de l'OS evitant a l'utilisateur de changer la date et de desinstaller/reinstaller l'appli... Y'a bien les dongles mais ca repondra pas forcement a son besoin...

n°410370
souk
Tourist
Posté le 28-05-2003 à 14:20:25  profilanswer
 

tu peux bidouiller directement tes fichier class pendant l'execution, le bytecode n'est pas tres complique, ca doit pouvoir se faire non?
 
 [:spamafote] enfin j'en sais rien, je propose juste hein :D c'est peut etre une idee stupide, mais il faut que tu stocke ca quelque part, et tu peux pas le faire dans un fichier texte, et si tu veux rester independant de l'OS tu peux pas utiliser autre chose non plus (genre base de registre sous windows etc..)

mood
Publicité
Posté le 28-05-2003 à 14:20:25  profilanswer
 

n°410405
lorill
Posté le 28-05-2003 à 14:41:23  profilanswer
 

toutes facons, en decompilant c'est trop simple a déplomber pour etre efficace (enfin je suppose, j'ai jamais vraiment essayé)

n°410407
souk
Tourist
Posté le 28-05-2003 à 14:43:31  profilanswer
 

ben si tu obfusque bien, il doit y avoir moyen de proteger un peu mieux, meme si ca reste crackable...

n°410411
lorill
Posté le 28-05-2003 à 14:46:58  profilanswer
 

souk a écrit :

ben si tu obfusque bien, il doit y avoir moyen de proteger un peu mieux, meme si ca reste crackable...


ben meme en obfuscant, il reste forcément les noms de classes et méthodes de l'api... donc on retrouve la vérif des clef assez facilement avec ca.
 
bref, a mon avis c'est pas une bonne idée...

n°410421
El_gringo
Posté le 28-05-2003 à 14:57:17  profilanswer
 

lorill a écrit :


ben meme en obfuscant, il reste forcément les noms de classes et méthodes de l'api... donc on retrouve la vérif des clef assez facilement avec ca.
 
bref, a mon avis c'est pas une bonne idée...


 
Via JNI, et du C ansi pour la vérif de la clé, on peut s'en sortir pas trop mal niveau sécurité j'pense.

n°410427
lorill
Posté le 28-05-2003 à 14:59:30  profilanswer
 

El_gringo a écrit :


Via JNI, et du C ansi pour la vérif de la clé, on peut s'en sortir pas trop mal niveau sécurité j'pense.


 :non:  
j'ai jamais utilisé jni, mais a mon avis coté java on voit l'appel, suffit soit de remplacer le bout de C, soit de squeezer l'appel. y'a pas de solution fiable dans ce genre de trucs

n°410457
souk
Tourist
Posté le 28-05-2003 à 15:16:47  profilanswer
 

et en utilisant une connection a un serveur web que l'on controle? genre on demande une clef au serveur, on peut verifier si elle est valide ou non. Si valide, ok, sinon pas ok.chaque appli s'identifie de facon unique et hop... non ? (je propose toujours hein, je sais pas si c'est bon  [:spamafote] )

n°410461
lorill
Posté le 28-05-2003 à 15:18:16  profilanswer
 

souk a écrit :

et en utilisant une connection a un serveur web que l'on controle? genre on demande une clef au serveur, on peut verifier si elle est valide ou non. Si valide, ok, sinon pas ok.chaque appli s'identifie de facon unique et hop... non ? (je propose toujours hein, je sais pas si c'est bon  [:spamafote] )


c'est encore ce que je vois de mieux, mais même probleme : trop facile de décompiler et de virer la partie verification :/

n°410472
chichos
Posté le 28-05-2003 à 15:24:05  profilanswer
 

suis d'accord avec lorill...
 
je pose ma petite contribution :  
j'ai utilisé Rational XDE et au lancement il se connecte à un serveur distant, contrôle les droits utilisateurs et télécharge un bout de code permettant de faire fonctionner l'appli... donc obligation de se connecter
 
ensuite, le tout est de savoir comment effacer ce bout de code lorsqu'on quitte l'appli..

n°410571
mauvais_ka​rma
I'll be damned
Posté le 28-05-2003 à 16:00:03  profilanswer
 

Merci pour toutes vos contributions.
 
C'est vrai que c'est genant que l'utilisateur puisse "by-passer" la sécurité en modifiant la date du system.
 
Mais aller modifier les parametres de l OS ce n'est pas l'ideal.
 
On m a aussi donné l'idée d'une activation par internet (server web autorisant le lancement) c'est la solution la plus sure et efficace mais demande trop de contrainte.
 
Reste la solution de la clé crypté qui me semble la plus simple mais tout cela est "facilement" crackable. ou alors hardcoder la date limite dans le code.
 
Reste alors le probleme de l'obfuscation ! es ce fiable car les outils de reverse engeneering sont assez efficace maintenant.
 
Mais bon je ne me voile pas la face , le systeme de protection ne sera pas infaillible, je veux juste éviter qu un utilisateur (informaticien) avec des compétences moyennes ne puisse virer la sécurité en 10 min.

n°410578
skeye
Posté le 28-05-2003 à 16:04:49  profilanswer
 

Je dis p-ê une connerie, mais pkoi pas une limitation au niveau du nb d'exécutions?
Ca évite les pbs de vérif de la date du système, déjà...

n°410591
mauvais_ka​rma
I'll be damned
Posté le 28-05-2003 à 16:11:25  profilanswer
 

skeye a écrit :

Je dis p-ê une connerie, mais pkoi pas une limitation au niveau du nb d'exécutions?
Ca évite les pbs de vérif de la date du système, déjà...


 
Oui j'y ai pensé mais il faut estimer ce nombre.
Et c moins contraignant de dire a un client :
"Vous avez 30 jours pour le tester"
 
que
 
"Vous pouvez lancer l'application x fois"
 
Dans mon cas je prefere une limite en jours.

n°410672
senternal
Posté le 28-05-2003 à 17:58:14  profilanswer
 

lorill a écrit :


ben meme en obfuscant, il reste forcément les noms de classes et méthodes de l'api... donc on retrouve la vérif des clef assez facilement avec ca.
 
bref, a mon avis c'est pas une bonne idée...


 
De toute facon, n'importe laquelle des solutions ne sera pas fiable tant qu'on aura acces sans aucune restriction au ClassLoader et a la magie du ClassLoader.defineClass... C'est la le gros hic...
 
L'obfuscation par encryption de ton byte-code (fait peter le terme obscure...) ne change rien. Il te suffit simplement de modifier ton rt.jar par ta propre implementation d'un ClassLoader et le tour est "presque" joué, mais ca prend un peu de temps, ca depend de la valeur que tu peux mettre en face de ton outil...
 
Disons que Java n'est pas en soit un langage "secure" des lors qu'on a la main sur l'environnement d'execution. Cela dit, la solution que je t'ai proposée est en soit parfaitement viable. Quand à l'utilisation d'une connexion a un serveur http pour recuperer une clef ou du code a executer a la volée, si c'est ca que vous utilisez pour securiser votre appli... :sarcastic:


Message édité par senternal le 28-05-2003 à 18:00:08
n°410694
souk
Tourist
Posté le 28-05-2003 à 18:28:20  profilanswer
 

d'un autre cote, si c'est une appli pro, les pro ils achetent, ils respectent les periodes d'essai et compagnie (suis-je trop naif ? :p)

n°410783
the real m​oins moins
Posté le 28-05-2003 à 21:07:59  profilanswer
 

souk a écrit :

d'un autre cote, si c'est une appli pro, les pro ils achetent, ils respectent les periodes d'essai et compagnie (suis-je trop naif ? :p)

demande aux mecs qui font intellij-idea [:spamafote]
apres avoir joué pendant 3 mois avec des licenses d'essai, on a fini par acheter 6 licenses au taf...
de toutes façons, le temps que tu t'amuses a essayer de plomber le truc y'aura deja un crack ou un serial qui traine [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°412110
Kahyman
Posté le 01-06-2003 à 05:16:29  profilanswer
 

1. Pour chaque nouveau client tu cree un nouveau compte (tu te debrouilles) sur ton systeme d'enregistrement
 
2. Tu donnes un ID au client et un mot de passe
 
3. Au 1er lancement l'ID et le mot de passe doivent etre fournis, tu stocke cette info ou tu veux cote client
 
4. 1ere connection, tu MAJ ta BDD client en donnant un timestamp pour cette premiere connection
 
5. A chaque connection, tu loades une classe distante (tu peux specifier une URL), dans l'url tu indiques l'ID et le mot de passe
 
6. Cote serveur tu verifies a la demande de la classe si le client a droit de lancer l'appli (temps depasse ou non)
 
7. La classe downloadee n'est jamais ecrite sur disque donc...
 
Plus precis que ca je ne peux pas...
 
 
7.  
 
Connection distante a un serveur

n°412178
R3g
fonctionnaire certifié ITIL
Posté le 01-06-2003 à 13:31:27  profilanswer
 

Kahyman a écrit :

1. Pour chaque nouveau client tu cree un nouveau compte (tu te debrouilles) sur ton systeme d'enregistrement
 
2. Tu donnes un ID au client et un mot de passe
 
3. Au 1er lancement l'ID et le mot de passe doivent etre fournis, tu stocke cette info ou tu veux cote client
 
4. 1ere connection, tu MAJ ta BDD client en donnant un timestamp pour cette premiere connection
 
5. A chaque connection, tu loades une classe distante (tu peux specifier une URL), dans l'url tu indiques l'ID et le mot de passe
 
6. Cote serveur tu verifies a la demande de la classe si le client a droit de lancer l'appli (temps depasse ou non)
 
7. La classe downloadee n'est jamais ecrite sur disque donc...
 
Plus precis que ca je ne peux pas...
 
 
7.  
 
Connection distante a un serveur


Et si la machine du client n'est pas connectée à Internet ? je sais que c'est pour une entreprise et qu'il y a peu de chances, mais n'ayant pas internet à disposition chez moi, je ne peux m'empecher de bondir à l'evocation de telles pratiques.

n°412213
Kahyman
Posté le 01-06-2003 à 16:07:36  profilanswer
 

R3g a écrit :


Et si la machine du client n'est pas connectée à Internet ? je sais que c'est pour une entreprise et qu'il y a peu de chances, mais n'ayant pas internet à disposition chez moi, je ne peux m'empecher de bondir à l'evocation de telles pratiques.


 
Relis le...
 

Citation :


Par contre je ne vois pas trop comment implementer quelquechose de solide et de secure en effet il s'agit d'un logiciel d'entreprise, donc il faut que se soit quelquechose de pro et non pas une simple bidouille.


 
Si la machine n'est pas connectee... et bien il peut oublier  

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Implementer une limite de temps sur une appli = trialware

 

Sujets relatifs
Pause en Java [ Résolu][java] ouverture de fichier ... [cai bon]
[PHP / BlaBla - limite][Java]Gestion de sources...
besoin d'aide sur excel pour une courbe de temps...java + swing + graph2D
[JAVA]Bouger la souris dans une appletProgrammation d'une appli Web : besoin de conseils
java + son avec le beepergif + java
Plus de sujets relatifs à : [JAVA] Implementer une limite de temps sur une appli = trialware


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR