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

Windows Forms Discussion :

Protection du programme par clé de licence


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Protection du programme par clé de licence
    Bonsoir,

    J'essai de faire en sorte de créer une simple méthode de validation d'une clé de licence. Une clé est fournie à chaque utilisateur, lors du lancement du programme, ce dernier doit la saisir... ensuite mon programme interroge une base de données distante afin de confirmer la validation de cette clé. Cette clé est validée qu'une seule fois, si l'utilisateur tente d'installer le programme dans un autre endroit, il doit demander une nouvelle licence.

    Avez-vous une méthode plus professionnelle ?

    Merci

  2. #2
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Trouvé après une recherche sur le forum je pense que cela peut t'aider

    http://www.developpez.net/forums/d12...ation-licence/
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci pour le lien... qui confirme que mon idée est bonne et que je ne suis pas le seul à y avoir penser il faut juste trouver un moyen de faire communiquer C# et PHP, une solution que j'avais cela fait longtemps mais que je ne l'ai plus...

  4. #4
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Il faut voir ce que tu appelles communiquer ...

    En son temps j'avais développé une application en vb.net qui déclenchait un backup d'une db MySql à distance et quand c'était terminé je rapatriais le fichier obtenu par ftp.

    Pour cela j'avais une simple page php qui déclenchait le dump de la DB et mon application attendait que le fichier soit présent sur le FTP pour le rapatrier.

    Dans ton cas si j'ai bien compris tu ne dois pas interroger php mais la base de données qui contient les données concernant tes licences ou je me trompe ?
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    On peut faire une WebRequest depuis C# ou VB.net.

    Ou alors :
    - utiliser un webBrowser (non visible),
    - créer une procedure C# appelable de JavaScript qui fournit l'info à transmettre,
    - créer une page HTML avec un JavaScript qui appele une procedure C# ou VB.net sur l'evénement OnLoad de la page,
    - transmettre l'info reçue du C# ou de VB au PHP par un GetRequest.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
      function GetAndSendInfoLoad() 
      {
        try
        {
          var Text = window.external.GetInfo();
           // Transfer Text to Server
        }
        catch (ex) { alert('Invalid call to GetInfo'); }
      }
    </script>
    <body onload="GetAndSendInfoLoad()">
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  6. #6
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Bonjour,

    Pour le coté communication, on peut aussi utiliser des services Web au lieu d'appeler manuellement une page web.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Dans ton cas si j'ai bien compris tu ne dois pas interroger php mais la base de données qui contient les données concernant tes licences ou je me trompe ?
    Oui comme première idée celle d'interroger la bdd mais en lisant sur le net je confirmer ce qu'il a dit ElTotor, qu'il faut utiliser des services web, mais malheureusement je ne l'ai jamais fait et j'ai besoin d'un exemple ou d'un tuto.

    Graffito, je n'ai pas très bien compris ton idée

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    que personne ne le prenne mal mais ce qui me surprend avant tout, c'est de vouloir protéger l'application au point d'aller planquer des infos de validation sur un serveur distant. Avant cela :

    Le source de l'appli est-il correctement protégé ? Il existe des décompileurs très performants de nos jours. Donc un acquérant qui se voit bloqué par une clef de validation et qui veut vraiment l'utiliser n'aura qu'à décompiler, inhiber la validation de clef et recompiler. Logiquement, si on protège une application, c'est qu'elle suscite assez d'intérêt pour que quelqu'un se donne la peine de vouloir la pirater, ne serait-ce que pour s'approprier le code, donc avant d'avoir recours à des moyens de protection extérieur, il faut protéger le source avant tout, sinon, autant ne rien faire.

    Partant de là, une fois que la source est potégée, est-il vraiment nécessaire d'aller valider la clef à distance ? Sauf si vous prévoyez de gérer la durée de vie de la clef de licence, utilisez plutôt un algorithme qui à partir d'une chaine criptée va lire une date, ou un nombre de jours, puis codez le lancement de l'application de sorte que si la date ou le nombre de jours est dépassé, il se bloque et exige une nouvelle clef.
    Naturellement, l'algorythme doit être capable de donner des clefs différentes pour une même date / un même nombre de jours.

    Encore une fois, tout ceci dépend naturellement de l'importance que l'on accorde à l'application en question, et du niveau de protection à lui accorder. Car on peut très bien cumuler les deux : protection du source + validation à distance, pour éviter de laisser le code de validation dans le source de l'appli au cas ou il serait malgré tout décompilé. Mais il faut quand même protéger le source avant tout.
    Pensez à mettre le topic en si votre problème a été solutionné. / Un petit est le bien venu si la réponse vous satisfait
    Ce qui mérite d'être fait mérite d'être bien fait.

  9. #9
    Membre expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Points : 3 304
    Points
    3 304
    Par défaut
    Citation Envoyé par phoenellion Voir le message
    Bonjour,

    que personne ne le prenne mal mais ce qui me surprend avant tout, c'est de vouloir protéger l'application au point d'aller planquer des infos de validation sur un serveur distant. Avant cela :

    Le source de l'appli est-il correctement protégé ? Il existe des décompileurs très performants de nos jours. Donc un acquérant qui se voit bloqué par une clef de validation et qui veut vraiment l'utiliser n'aura qu'à décompiler, inhiber la validation de clef et recompiler. Logiquement, si on protège une application, c'est qu'elle suscite assez d'intérêt pour que quelqu'un se donne la peine de vouloir la pirater, ne serait-ce que pour s'approprier le code, donc avant d'avoir recours à des moyens de protection extérieur, il faut protéger le source avant tout, sinon, autant ne rien faire.

    Partant de là, une fois que la source est potégée, est-il vraiment nécessaire d'aller valider la clef à distance ? Sauf si vous prévoyez de gérer la durée de vie de la clef de licence, utilisez plutôt un algorithme qui à partir d'une chaine criptée va lire une date, ou un nombre de jours, puis codez le lancement de l'application de sorte que si la date ou le nombre de jours est dépassé, il se bloque et exige une nouvelle clef.
    Naturellement, l'algorythme doit être capable de donner des clefs différentes pour une même date / un même nombre de jours.

    Encore une fois, tout ceci dépend naturellement de l'importance que l'on accorde à l'application en question, et du niveau de protection à lui accorder. Car on peut très bien cumuler les deux : protection du source + validation à distance, pour éviter de laisser le code de validation dans le source de l'appli au cas ou il serait malgré tout décompilé. Mais il faut quand même protéger le source avant tout.
    Excellente remarque. Peux tu nous donner plus d'information sur la protection du code (je n'ai jamais testé cela).
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Points : 94
    Points
    94
    Par défaut
    Eh bien je connais .NetReactor, une application pour laquelle je ne mettrait pas de lien car elle est payante, quoique très abordable quand on voit ce qu'elle permet de faire.

    - on peut d'une part protéger le source de diverses méthodes combinables à souhait (différents niveaux de protections en somme). Après d'un point de vue technique, je ne sais pas vraiment comment c'est fait. J'ai juste retenu qu'aucun décompilateur ne pouvait y retrouver ses petits. La seule solution restante serait qu'un hacker s'y colle et décrypte tout avant de devoir ensuite décompiler l'application, donc là on n'est plus dans la logique "je vais télécharger un truc sur le net" mais "je vais chercher un pirate informatique" pour cracker l'application. Ce n'est plus du tout la même démarche.

    - d'autre part, ils proposent eux même tout un système de gestion de clefs de licences pour les applications, production, cycle de vie etc.

    Je m'y étais intéressé car j'avais cherché des moyens de protéger une application qu'on voulait m'acheter et comme je l'avais développé "pour le sport", je n'avais absolument pas travaillé la partie "sécurité" de celle-ci et mes recherches m'ont amené au raisonnement développé précédemment.
    Après, je sais que .NetReactor a été conçu spécialement pour la protection des applications développées sous VS, et qu'il fait du bon travail, mais ce n'est peut être pas LA meilleure solution. Mais pour ce que j'avais à faire, c'était bien suffisant, vu que mon appli s'adresse à des PME.

    Et sur le même fondement, tout en revenant un peu à la problématique de départ, si une application doit aller valider sa clef sur un serveur distant, ce dernier doit aussi être protégé comme il se doit, mais là, je n'ai rien à proposer.

    Edit : je suis en train de faire des recherches dans la section Outils.Net à ce sujet :
    DotFuscator
    Skater .Net Obfuscator
    Salamander
    Et je m'arrête là, mais bon, il y a de quoi faire visiblement !
    Pensez à mettre le topic en si votre problème a été solutionné. / Un petit est le bien venu si la réponse vous satisfait
    Ce qui mérite d'être fait mérite d'être bien fait.

  11. #11
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Pour info, l'obfuscation de code a peu d'intérêt si ce n'est changer le nom des méthodes. Toutes les autres fonctionnalités sont "facilement" reversibles avec de4dot par exemple.

Discussions similaires

  1. [DELPHI 2005] Désinstaller un programme par programmation
    Par danbern dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 02/06/2005, 17h05
  2. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    Réponses: 1
    Dernier message: 02/05/2005, 20h05
  3. programmation par composant
    Par pmboutteau dans le forum ASP
    Réponses: 4
    Dernier message: 10/03/2005, 11h35
  4. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    Réponses: 6
    Dernier message: 26/07/2004, 11h06
  5. Programmation par module : applications multilingues
    Par argoet dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 03/02/2004, 11h28

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