IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[VC6] Comment intégrer la gestion d'une licence dans une application


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 225
    Points : 118
    Points
    118
    Par défaut [VC6] Comment intégrer la gestion d'une licence dans une application
    Bonjour à toutes et à tous,

    J'ai développé une application que j'aimerai distribuer mais afin d'en éviter la diffusion libre, j'aimerai qu'il soit nécessaire d'avoir une licence (sous forme de clé, de fichier ou autre) pour l'installer et par conséquent l'utiliser.

    Comment intégrer cette spécificité à mon application ?

    D'avance merci.

    Bonne journée à tout le monde.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    un moyen simple que j'ai utilisé:
    le principe:
    tu fait calculer une clef par le logiciel en utilisant soit le numéro de série du disque dur ou de la carte réseau .
    Ce calcul peut être fait en utilisant un cryptage MD5 ou un CRC32 en ajoutant un préfixe ASCII spécifique devant.

    Tu fait afficher sous une forme ASCII le numéro de série pour l'utilisateur.
    celui-ci te le communique , tu appliques le calcul et tu lui donnes la clef obtenue.
    la clef est rentrée dans le logiciel et est comparée avec le calcul interne pour vérifier la licence.
    la clef sera mémorisée dans un fichier .ini par exemple et vérifiée a chaque démarrage du logiciel.

  3. #3
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Intéressant,

    tu fait calculer une clef par le logiciel en utilisant soit le numéro de série du disque dur ou de la carte réseau .
    Ce calcul peut être fait en utilisant un cryptage MD5 ou un CRC32 en ajoutant un préfixe ASCII spécifique devant

    Tu fait afficher sous une forme ASCII le numéro de série pour l'utilisateur.
    Je voudrais bien implémenter cette logique et l'intégrer moi aussi dans mes applis.
    Pour aller un peu vite, voici quelques fonctions vides qui reprennent un peu ce que tu viens de dire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    extern "C" CString WINAPI AfxGetHardDiskSerialNumber()
    {
            // quel est l'api ??? 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    extern "C" CString WINAPI AfxGetNetworkCardSerialNumber()
    {
            // quel est l'api ??? 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    extern "C" CString WINAPI AfxGetUserSerialNumber(CString strHardDiskSerialNumber)
    {
           // choix de l'algo de cryptage MD5 ou CRC32 + préfixe ASCII 
           // fabrication de la clé
           // afficher sous forme ASCII
           // retourne cette user serial key
    }
    Ensuite l'utilisateur envoie cette clé au développeur de l'application
    - soit par le web donc l'appli tente d'ouvrir une connexion au site du développeur et l'appli l'expédie lui-même
    - soit directement par phone
    - soit par un autre moyen...

    tu appliques le calcul et tu lui donnes la clef obtenue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    extern "C" CString WINAPI AfxResolveUserSerialNumber(CString strUserSerialNumber)
    {
          // appliquer le calcul, comment ???
          // return cette clé
    }
    la clef est rentrée dans le logiciel et est comparée avec le calcul interne pour vérifier la licence.
    la clef sera mémorisée dans un fichier .ini par exemple et vérifiée a chaque démarrage du logiciel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    extern "C" bool WINAPI AfxValidateUserSerialNumber(CString strSerialNumber)
    {
          // calcul interne ???
          // et retourne la clé du soft (strInternalKey)
          if(strInternalKey == strSerialNumber)
          {
                // mémorise le strSerialNumber dans le fichier ini ou dans le registre
                return true;
           }
           else
                return false;
    }
    Ensuite je compile cette dll qui reprend un peu ta logique et je l'intègre au soft.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    pour le disque dur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    unsigned long GetSerialDiskNumber()
    {
        char    szFileSystemName[50],szVolumeName[50];
     
        DWORD   VolumeSerNum, MaxCompLen, FileSysFlags;
        BOOL    retVal;
     
        retVal = GetVolumeInformation("C:\\",
                                      (LPSTR)szVolumeName, 
                                      50, 
                                      &VolumeSerNum, 
                                      &MaxCompLen,
                                      &FileSysFlags, 
                                      (LPSTR)szFileSystemName, 
                                      50);
        return((unsigned long)VolumeSerNum);
    pour la carte réseau : voir GetAdaptersInfo dans MSDN il y a un exemple.
    pour le crc32 voir cet antique post :http://www.developpez.net/forums/d65...crc/#post44128
    pour MD5 tu trouveras ce qu'il faut sur codeguru ou codeproject
    voila

  5. #5
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    salut,

    tout dépend du modèle de vente (par internet ?), mais essaye de faire des licences nominatives. Nom du client que tu affiches dans le splash screen par exemple, ou dans la boite de dialogue "à propos de ..."

    ça n'évitera pas le piratage, mais ça limitera le fait que la licence passe de main en main. les gens n'aiment pas trop voir leur nom de famille (ou nom d'entreprise) circuler sur le net. Sans compter que s'il y a une fuite tu sauras qui c'est -> restera plus qu'à black-lister le client lors de la prochaine version ...

    pour ma part, j'ai implémenté cette méthode:

    la clé n'est pas un code, mais un petit fichier (512 octets) que je transmet au client par email.
    le logiciel vérifie la présence de ce petit fichier dans le repertoire où il est. si le fichier est là et est correct, le soft est débloqué.

    dans ce petit fichier, j'y ai placé du code exécutable, un décrypteur. j'ai fais en sorte que les parties de code du soft nécessitant la licence (la fonction sauvegarde par exemple) soient placées dans une section spéciale du module PE (l'exécutable). Cette section spéciale est donc cryptée.

    la clé de décryptage est basé sur un CRC de la section code du logiciel. ainsi si l'exécutable est modifié par un hacker , la clé ne sera jamais la bonne.

    --> c'est quasiment impossible à hacker sans avoir soi-même une licence ; ou etre doué dans le décryptage

    j'en dis pas plus, mais voila simplement sur le principe

    j'évite de rendre dépendant la licence de la machine ou le soft est exécuté. c'est une source de problème lorsque le client veut changer de machine, ou exécuter le soft depuis une clé usb ou réseau par exemple ... j'ai voulu faire un soft qui soit mobile, donc exécutable depuis n'importe quel ordi ...

    @+

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Salut, si je comprends bien ta solution permet de protéger la première installation, une fois que l'on dispose du fichier il n'y a plus restrictions, c'est bien ça ?

  7. #7
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Salut, si je comprends bien ta solution permet de protéger la première installation, une fois que l'on dispose du fichier il n'y a plus restrictions, c'est bien ça ?
    oui puisqu'il n'y a pas de lien avec la machine hôte.
    c'est un choix, surtout que je voulais que le soft puisse s'exécuter depuis une clé usb par exemple, donc sur n'importe quel poste.

    la plupart des softs commerciaux sont dans ce cas. ça demande beaucoup de logistique si tu lies ton soft à la machine. un jour le client changera de disque dur ou de carte réseau, il sera pas content que son soft ne tourne plus, il faudra lui regenérer une clé ... et le jour où tu n'auras plus la disponibilité pour t'occuper de ça ...

    maintenant dans mon cas, soit le client est un particulier et de toute façon il n'achètera pas plus qu'une licence, soit le client est une entreprise, et c'est soit une licence simple ou une licence site. aucune différence sur la licence simple ou site, si ce n'est une mention indicative. mais après c'est une question de respect du CLUF, et là les entreprises sont un peu plus respectueuse (c'est pas toujours le cas, mais la plupart du temps oui)

    un exemple avec Ms Office, rien ne t'empeche de l'installer sur autant de poste que tu le souhaites en ne possédant qu'une licence mono-poste ...

    comme je l'ai dis plus haut, c'est un choix à faire ...

    @+

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo