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

C++ Discussion :

comment protéger un programme.


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut comment protéger un programme.
    Bonjour, je fait de la programmation de base en C et C++ et je voudrais protéger un programme que j'ai fait... Mais pour cela il faut que je sache comment créé un keygen en ( C++ ) ce que je ne sais pas... Esce que quelqu'un pourrait me montrer comment faire un keygennerator ?

    Merci d'avance.

    -----------------------------------------------------------------------
    -[www.alienfury.c.la]-
    -----------------------------------------------------------------------

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    En général, un KeyGen est fait en désassemblant le programme (c'est à dire lire les instruction en assembleur dans le programme compilé), puis en retrouvant l'algorithme permettant de vérifier la validité de la clé...

    Il suffit ensuite d'inverser l'algorithme pour en obtenir qui génère des clées toujours valident...

    Sinon, c'est souvent une liste de clées obtenues (rarement plus d'une dizaine) légalement qui sont mise ensembles et il en sort une au hasard...


    Il n'y a donc pas vraiment de moyen de se protéger contre ce style de programme, excepté en enregistrant la liste des clées déjà validées en ligne, et de faire vérifier chaque soumission de clée via Internet...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Exactement, en général, la clé est fonction des paramètres de l'ordinateur + une liste de clés inscrite en dur dans le programme. En général, tu as le numéro de série, une clé dépendant des paramètres de l'ordinateur + une clé arbitraire et avec tout ça, tu génères sur Internet la clé d'activation.

  4. #4
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Il n'y a donc pas vraiment de moyen de se protéger contre ce style de programme, excepté en enregistrant la liste des clées déjà validées en ligne, et de faire vérifier chaque soumission de clée via Internet...
    Et même çà un cracker est capable de le parer en patchant la vérification.
    Il n'existe aucune protection logiciel imparable. Il existe juste des moyens permettant de réduire le nombre de personnes capable de cracker ton code.


    Mais en général un keygen se décompose en deux parties :
    - La vérification de clé (située dans le programme à "protéger").
    - La génération de clés valides (que le développeur/éditeur/... est le seul à posséder et qui lui permettra de fournir des clés aux utilisateurs du programme).

    Il existe des milliers de façon de générer des clés. Il vaudrait mieux faire des recherches sur des sites traitant de la sécurité. Mais souvent, ces générateurs sont des fonctions sur des chaînes de caractères.

    Par exemple, un algo basique serait de lire tous les caractères de la chaîne représentant ta clé, et d'effectuer des opérations dessus :
    Ex, un code très basique de vérification de la clé pourrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      value : val
      Pour chaque caractères de la clé faire
        value += caractère[i]
     
      if(value == 123456789)
        message("Clé valide")
      else
         message("clé invalide")
    Ensuite la génération du keygenerator se fait en partant de la valeur 123456789 et en cherchant une chaîne de caractères (parmi l'ensemble des solutions possibles) vérifiant la condition que la somme des caractères de la clé ferait 123456789.

    Au lieu de la somme, tu peux effectuer tout un tas d'opérations plus ou moins complexes (modulo, divisions, multiplications, utilisation de nombres premiers, etc.). Tu peux également effectuer des opérations entre la clé entrée, et d'autres paramètres comme une valeur dans la base de registre, le nom de l'ordinateur executant le programme, etc.

    Mais il faut toujours penser que le code de vérification de clés valides doit pouvoir être inversé pour pouvoir réaliser le keygenerator. Et c'est surement çà le plus compliqué dans l'histoire.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Mais quel est le code complet qui dit au programme qu'il faut 5 chiffre (admeton) et que la somme de ses chiffre doivent équivaloir à 100 ?

    je demande sa parce que l'exemple de Tibiliz est bon mais n'est pas complet...

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tu traduis exactement ce qu'il a indiqué en C++ et voilà :
    pour -> for
    += -> +=
    ...

  7. #7
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Voici un exemple de code C++ d'une fonction de test de clé de taille 5 et de checksum=100 qui utilise l'algo basique décrit plus haut.

    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
    18
    19
     
    bool checkKey(const string& key)
    {
      if(key.length() == KEY_SIZE) // KEY_SIZE = 5
      {
        unsigned int sum = 0;
     
        for(int i=0; i<key.length(); ++i)
        {
          sum += key[i];
        }
     
        return sum==KEY_CHECKSUM; // KEY_CHECKSUM = 100
      }
      else
      {
        return false;
      }
    }
    Le code du générateur de clé est plus complexe puisqu'il faudrait générer 1 premier caractère (plus ou moins) aléatoirement. Puis générer un second caractère en fonction de la valeur du premier (pour que ca ne dépasse pas la valeur de 100), puis un 3e en fonction des deux premiers, etc... jusquà 5 caractères.
    En gardant à l'esprit que les caractères à générer doivent être "lisibles" par l'utilisateur ('0'-'9', 'A'-'Z', 'a'-'z').
    J'essaierai de poster un code C++ plus complet pour le générateur.

    Mais comme j'ai dit ceci est un exemple très basique. Il vaudrait mieux se renseigner sur des sites traitant de la sécurité pour des exemples plus sérieux.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/09/2013, 10h32
  2. Comment protéger un programme par mot de passe ?
    Par hackoofr dans le forum Sécurité
    Réponses: 11
    Dernier message: 28/12/2012, 19h41
  3. Comment protéger mon programme contre une copie ?
    Par bolanoy dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2008, 17h11
  4. Comment protéger un programme avec thread ?
    Par ouadie99 dans le forum C#
    Réponses: 9
    Dernier message: 04/04/2008, 10h41
  5. comment protéger son programme
    Par aktos dans le forum VB.NET
    Réponses: 10
    Dernier message: 03/10/2007, 19h43

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