Intégrer un système de licenses

Eddy58Eddy58 Membre
22:46 modifié dans Actualités #1
Comment faire un système de licences genre photoshop ou autres ? Comment savoir que le numéro de license rentré est correct, et comment se génèrent ces numéros de license ? Je suis preneur de toutes infos.
Je pourrais trés bien faire un système pour générer des keyfiles avec le numéro de license dedans, mais je trouve ça moins élégant. :o

Réponses

  • septembre 2005 modifié #2
    Pour savoir si un numéro est correct, il faut appliquer une formule dessus. Par exemple la somme des nombres qui composent le numéro de série doit valoir 3. Avec trois chiffres, les numéros valables seraient:
    111 021 012 102 201 120 210 300 030 003.

    Maintenant à  toi de trouver une formule plus complexe, genre faisant en sorte que la somme numérologique des codes ascii qui composent l'adresse mail (pour 4585, cette somme vaut 4+5+8+5 = 22, et on répète l'opération jusqu'à  n'avoir qu'un chiffre, donc 4 ici) et la somme numérologique des codes ascii du numéro de série soient différents. Il y a plein de variantes possibles.

    Mais juste un détail, aussi complexe que soit la génération d'un numéro de série, si ton soft présente un intérêt, un numéro que tu n'auras même jamais donné se retrouvera sur le net.
  • Eddy58Eddy58 Membre
    22:46 modifié #3
    Bon, alors je crois que je vais en rester aux keyfiles, ça sera moins compliqué et bien suffisant. :o
  • mpergandmpergand Membre
    22:46 modifié #4
    Même avis que Renaud, ça sert pas à  grand chose, fais une recherche sur la dev list cocoa, le sujet y revient régulièrement.

    ou alors attends les mactels avec la gestion des DRM  :)
  • Eddy58Eddy58 Membre
    22:46 modifié #5
    C'est pas une usine à  gaz que j'ai fait ;D, mais bon il faut quand même que je fasse quelque chose de ce côté là . 
  • AntilogAntilog Membre
    22:46 modifié #6
    Ma technique:
    Faire un calcul bien complexe a partir d'un numero (compteur) avec deux methodes differentes (avec des formules 'inversibles'). Obtenir un seul code en melangeant les caracteres des deux formules -> generateur de clef.
    Faire ensuite la methode de test du logiciel, elle decode la clef et verifie qu'on obtient bien deux fois le meme nombre.
    Placer cette methode dans un programme qui teste en boucle un paquet de codes pour verifier qu'il n'y a pas trop de codes corrects si on saisit au hasard.
    Verifier que les codes simples (blanc, tous des zeros, tous des A, etc...) ne donnent pas un code valide.

    Et surtout (je l'ai appris a mes depends et j'ai du ajouter la fonction), prevoir dans le logiciel de facilement refuser un code qui serait correct.

    A chaque fois qu'un code doit etre desactive, mettre a jour ton logiciel au plus vite dans une version le refusant (astuce: sans prevenir personne ni changer de numero de version).

    HTH
  • veveveve Membre
    22:46 modifié #7
    c'est quoi un keyfiles ?
  • Eddy58Eddy58 Membre
    22:46 modifié #8
    dans 1126287967:

    c'est quoi un keyfiles ?

    C'est un fichier dans lequel est encodé le numéro de license du logiciel, et d'autres informations aussi si on le souhaite. Si le keyfile est détecté et qu'il est correctement décodé par l'appli, alors le mode démo est désactivé (s'il y en a un). :o

    De toutes façon, que ça soit avec un sytème de calcul de licence comme le décrit Antilog, ou avec un système de cryptage par keyfile, un désassemblage du logiciel permettra une rétro-ingénierie sur les algos de calcul ou/et de cryptage. Pour aller plus loin, un réassemblage en ayant pris soin d'amputer le logiciel de ses routines de protection (du pure hacking en faites), et là  plus besoin de se soucier de rien, je parle bien sur de l'utilisateur pirate.

    Je vais donc aller au plus simple, faire un bon vieux générateur de keyfiles...Je ne suis pas contre faire évoluer mes protections plus tard, je verrais bien, mais je vois aussi le fait de me concentrer avant tout sur le développement pur. Il y a aussi un point important, c'est que mon appli est plutôt destinée au monde des commerçants, tpe/pme, donc si un contrôle arrivait et que l'intéressé était pris à  utiliser une version pirate, ça pourrait lui couter assez cher.
  • elfelf Membre
    22:46 modifié #9
    Bah ce que je te conseil c'est de générer tes licenses via PHP comme ça:

    $nodelicenses = md5(sha1(rand(2).microtime));
    


    Il est pratiquement impossible d'avoir 2 fois la même clé, et au car ou tu l'enregistre dans une BDD et tu fais un test si elle n'existe pas déjà  avec un champ utilisé a false (vous appellez ça NO je crois, en PHP c'est false comme en RB et la plupart des langage de programmation, un boolean quoi) et tu donne cette clé à  ton client.

    Ensuite quand tu entre la clé de licence dans le logiciel tu fais une conection avec la BDD de ton hébérgeur (qui dois accepter les connection externes) et tu vérifie la clé et si elle est bonne et que elle n'est pas déjà  utilisé (champ utilisé a true) est si c'est le cas tu valide ton soft (fout un champ suplémentaire dans les pref du system ("library/preferences/.globalpreferences normalement")) et change le champ utilisé dans la BDD sur ton serveur pour true.

    Ensuite il te faidras faire un system "transférer ma licence" qui se connecte au serveur remplace le champ utilisé de la clé de licence de true vers false et te suprime la licence du soft en local (supprimer le champ dans les pref du system)

    L'ordre est important dans les 2 car par exemple dans le 2eme si la licence est suprimmée en local en premier et qu eensuite il y a un bug avec la connection au serveur l'urilisateur perd ça licence alors que si c'est dans l'autre ordre il supprime le licence que quand la licence à  été rendue réutilisable sur le serveur.

    Bon voilà , en esperent t'avoir aidé.
    C'est le system le plus sur et tu ne risque pas de te le faire pirater par quelqu'un sauf si il sais quel champ tu as des les pref system. Mais tu peux très bien trouver un autre fichier pour cacher ta licence, juste que si l'utilisateur connais ce fichier il peut le copier d'un ordi a l'autre!

    PS: c'est normal toute ces notices sur le foruM:

    Notice:  Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121

    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121                                                    <!--
    var smf_theme_url = "http://www.objective-cocoa.org/forum/Themes/classic";
    var smf_images_url = "http://www.objective-cocoa.org/forum/Themes/classic/images";
    // -->                                                                       
    <!--

    function MM_preloadImages() { //v3.0
      var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
        var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
        if (a.indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a;}}
    }

    function MM_swapImgRestore() { //v3.0
      var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a)&&x.oSrc;i++) x.src=x.oSrc;
    }

    function MM_findObj(n, d) { //v4.0
      var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
      if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
      for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
      if(!x && document.getElementById) x=document.getElementById(n); return x;
    }

    function MM_swapImage() { //v3.0
      var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
      if ((x=MM_findObj(a))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
    }

    // -->     
           





                   
           
                           
                   

                   
           
           
                   

     
                                    Salut, SeoxyS, vous avez 7 messages, 1 est nouveau.
    Voir les derniers messages non lus !                               
    Septembre 11, 2005, 09:20:00                         


                                    Index du forum |                                  Recherche |                                  Profil |                                  Déconnexion                           

           
                   

           
                   

                    <!--
    setTimeout("fetchSession();", 600000);
    function fetchSession()
    {
    fetchById("fetchSessionTemp").src = "http://www.objective-cocoa.org/forum/index.php?action=jsoption;sesc=93f94eed8b0530de10e1d927dbebc107;"; + (new Date().getTime());
    setTimeout("fetchSession();", 600000);
    }
    function showimage()
    {
    document.images.icons.src="http://www.objective-cocoa.org/forum/Themes/classic/images/post/"; + document.postmodify.icon.options[document.postmodify.icon.selectedIndex].value + ".gif";
    }
    function updateFields()
    {
    if (document.layers || document.all || document.getElementById)
    {
    pForm = document.postmodify;
    pForm.attachmentp.value = pForm["attachment[]"].value;
    }
    }
    var currentSwap = false;
    function swapOptions()
    {
    fetchById("postMoreExpand").src = smf_images_url + "/" + (currentSwap ? "collapse.gif" : "expand.gif");
    fetchById("postMoreExpand").alt = currentSwap ? "-" : "+";

    fetchById("postMoreOptions").style.display = currentSwap ? "" : "none";

    if (fetchById("postAttachment"))
    fetchById("postAttachment").style.display = currentSwap ? "" : "none";
    if (fetchById("postAttachment2"))
    fetchById("postAttachment2").style.display = currentSwap ? "" : "none";

    currentSwap = !currentSwap;
    }
    // -->

                                                                           

                                                      objective-cocoa
      Autres forums techniques
      Autres langages qu'objective-C
      Répondre ( Re: Intégrer un système de licenses )                                       


                                                           

    Répondre

                                                   
                                                   
    Notice: Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
  • aranaudaranaud Membre
    22:46 modifié #10
    dans 1126424159:

    PS: c'est normal toute ces notices sur le foruM:

    Notice:  Only variables should be assigned by reference in /Volumes/data/bourni_a/forum/Sources/Subs.php on line 121
    ....   
                           

    Va voir http://www.objective-cocoa.org/forum/index.php?topic=1208.msg12903;topicseen#msg12903
  • elfelf Membre
    22:46 modifié #11
    OK merci! c'est chiant ça...
Connectez-vous ou Inscrivez-vous pour répondre.