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 :

Activer Logiciel + piratage


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut Activer Logiciel + piratage
    Bonjour à tous,

    Je suis entrain de conclure mon projet et je souhaiterais qu'il soit activable avec une clé via internet.

    Seulement une question se pose à moi, il faut se connecter au serveur et voir si la clé est bonne, mon serveur me renvoie une ligne de texte pour savoir, il ne me reste qu'à chercher comment se connecter mais je pense pouvoir trouver en cherchant.

    Cependant comment "activer" le logiciel? COmment stocker dans l'ordinateur que le logiciel est activé sans bien sur qu'il ne soit visible par l'utilisateur, ni qu'il puisse le modifier facilement pour le cracker?

    Comment font les logiciels professionels dans ce domaine?



    De plus j'avais une question sur les cracks, comment se fait un crack ? ils décompilent l'exe et cherchent à modifier le code?
    Dans ce cas là est-ce utile d'enlever les commentaires par exemple pour que ça soit plus difficile pour les crackers? Cette idée peut paraitre saugrenue, mais je ne m'y connais absolument pas dans ce domaine et c'est plutot vague sur internet.

    J'imagine qu'un compilateur qui empeche la décompilation n'existe pas mais j'avais vu des trucs qui le rendaient moins lisible à la décompilation mais c'était assez vague




    Si vous pouviez m'éclairer sur ces quelques points.

    Merci d'avance,

    Cordialement,

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Bonjour,

    Rien ne sert d'enlever les commentaires, ceux ci ne sont pas présents dans l'exécutable ni dans les dll. Ils sont propres aux fichiers du code source.

    Il est possible d'utiliser des obfuscateurs pour rendre plus difficile la lecture du code source. Cela permet de renommer toutes les variables et fonctions en des noms incompréhensibles (a, b, c, etc ...) juste avant de compiler. C'est transparent pour toi et ça rend le truc vraiment incompréhensible. Par contre, avec un dé-obfuscateur, il est possible d'accéder aux chaines de caractères en clair, il faut donc éviter de mettre des clé privé en clair dans le code.

    Avec le cryptage asymétrique, tu as deux clé, une privée et une publique. Il est possible de signer un message avec la clé privée et que tous les utilisateurs de la clé publique puisse le vérifier. Tu stockes dans un fichier le retour de ton WS qui sera le message chiffré et tu le lis ensuite avec ta clé publique que tu peux mettre dans ton code sans soucis.

    Pour éviter que les gens se passent un fichier de config, tu peux passer l'adresse MAC de la personne qui fait l'appel au WS en paramètre et tu fais un fichier de licence qui contient cette adresse. De cette manière, seul le PC enregistré pourra utiliser ce fichier de licence.

    J'espère avoir été clair et concis, s'il y a des passages lesquels je n'ai pas été très clair, n'hésite pas à me le dire (Ouais car il est l'heure de rentrer la donc j'ai un peu fait vite )

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut
    Merci pour ta réponse.

    Donc en gros n'importe qui pourrait décompiler mon code et donc supprimer la partie qui demande la licence, j'imagine que oui et que c'est comme ça que les logiciels se font avoir?

    Après au niveau du cryptage je n'ai pas compris grand chose. J'aimerais bien que tu détailles un peu plus cette partie si possible : ce qu'est cette clé publique et cette clé privée (donc en gros tout expliquer ).

    Pour le moment mon serveur me renvoyait uniquement le nombre d'utilisation de la clé (pour laisser à l'utilisateur le droit de l'utiliser deux fois) ou un message indiquant qu'elle n'était pas dans la base de donnée.

    J'avais pensé à stocker l'adresse MAC mais dans ce cas l'utilisateur devra etre constamment connecté à internet pour lancer le logiciel.


    J'imagine bien qu'il n'y a pas de solutions miracles de toutes façons.

    Ou alors une solution serait que si la connexion internet est active on vérifie sa licence.

    Il serait obligé de jouer sans sa connexion activée ce qui est contraignant.

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 457
    Points : 386
    Points
    386
    Par défaut
    Moi j'aime la partie de ton question a propos activation du software online,

    1.tu peux faire ecrire dans dans registry (si tu veux le voir ecrit regedit dans cmd ou dans run ) . et tu peux faire cryptage et decryptage ici,

    2.il ya un logiciel qui donne toute le code du exe-file ou du DLL , comment peut-on faire du security je ne sais pas ! le logiciel s'appelle Reflector C#.Net

  5. #5
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Je ne pense vraiment pas que la solution de genius4ever soit celle à suivre.

    En gros, tout code crée en C# peut être désassemblé, c'est juste une question de temps. De toute manière, si quelqu'un veut le pirater, il le fera, le tout c'est d'empêcher les 99% de gens "normaux" de vouloir s'amuser.

    Donc tu peux faire de la manière suivante :

    Tu as un WS qui est chargé de vérifier les clés. L'utilisateur rentre une clé, l'appel au WS se fait avec les infos nécessaires (clé, adresse mac, durée de la licence s'il y en a une, etc ...) et le WS crée une string dans son coin. Il vérifie le nombre de fois que cette clé a été rentrée dans sa base de données et autres vérifications. La string, ce sera toutes les infos concernant la licence (adresse mac, durée, etc ...) en clair, suivi d'un message codé.

    En gros, tu vas utiliser un algorithme asymétrique pour protéger cette données. Ces algos fonctionnent avec une clé privé et une clé publique qui sont deux chaines de caractères que l'on laisse la machine générer la plupart du temps. Une fois qu'elles le sont, elles ne bougent plus.

    Comme leurs noms l'indique, une clé publique peut être partagée avec tout le monde, contrairement à une clé privée qui doit être gardée secrète. Il y a deux modes d'utilisations, soit tu cryptes un message avec la clé publique et seul le détenteur de la clé privé peut décrypter les messages. Sinon, tu peux signer un message avec la clé privé et le vérifier avec la clé publique, c'est ce que l'on va faire dans ton cas.

    En gros, tu retourneras un chane qui correspondra à ça (grosse approximation hein, c'est pour l'exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <licence>
    <mac-address>blablabla</mac-address>
    <key>654646416516</key>
    <others>toto</others>
    <signature>4582028342874204284274942890</signature>
    </licence>
    Lorsque tu reçois le retour de ton webservice, tu crées un fichier dans ton application où tu inscris ce xml. Ensuite, à chaque démarrage, si le fichier n'est pas là, tu affiches un message d'erreur et tu quittes. S'il est là, tu charges son contenu et tu vérifies si le contenu de la licence correspond à la signature. Si oui, tu peux lancer le jeu.

    De cette manière, s'il remplace le fichier, ou s'il en modifie son contenu, la signature ne correspondra pas et tu sauras donc que la licence est fausse. Seul la clé privée peut créer cette signature (que tu gardes bien au chaud sur ton serveur) tu es donc tranquille.

    Le seul risque serait que la personne décompile ton programme et recrée ton exe sans cette vérification, permettant de faire les appels aux dll.

    Voilà, j'espère avoir été un peu plus clair sur la signature de la licence. Si tu utilises ce procédé, toutes les informations de la licence et le moyen de vérifier son intégrité sont dans l'application, le joueur n'aura donc pas besoin d'internet, sauf au moment de générer sa licence avec sa clé.


    EDIT: Tiens, ça m'a donné une bonne idée d'article à écrire sur mon blog :p

  6. #6
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup ta réponse a bien répondu à mon problème je pense.

    Cependant, comment générer les clés publiques et privées, et donc la signature à partir d'elles ? Je dois prendre un truc déjà fait sur internet, déjà inclu dans C# etc.



    Tu dis que dans mon cas il faut donner la clé privée aux gens? et mon programme gardera la clé publique au chaud?
    Je vois pas trop pourquoi on l'appelle privée mais c'est pas génant ça

    Cette méthode est intéressante mais si quelqu'un partage son xml le fichier marchera pour tout le monde ? ou alors il est possible de prendre en compte des éléments de l'adresse mac dans la clé de licence, exemple : La licence contient la licence qu'il rentre avec tous les chiffres MAC derrière et là ça sera unique au PC.

    Enfin dernière question :
    Comment stocker la clé ?
    Si il décompile et qu'il récupère la clé il pourra créer un "keygen" pour valider toutes les clés ? (sauf si on couple les adresses mac peut etre ça compliquerait la tache).

    Merci

  7. #7
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Désolé, je parlais exactement de l'inverse (J'étais fatigué hier soir :o)

    La clé publique peut se donner à tout le monde (contenue dans ton programme) et la clé privée doit être conservée. Ces deux clés peuvent être générées par les classes du namespace System.Security.Cryptography, à toi de choisir l'algorithme que tu utiliseras (il y a plein de comparatifs de ceux ci sur le net)

    Pour ce qui est de la licence, elle ne pourra pas être partagée vu qu'il y a l'adresse MAC du client dedans et que tu vérifies que ce pc possède bien cette adresse. Une licence ne pourra donc être utilisée que sur un seul PC.

    Tu stockes la clé sous forme de string constantes. Si l'utilisateur décompile ton appli, il ne trouvera que la clé publique, ce qui ne lui permettra pas de générer de fausse licence. La clé privée qui permet de la générer sera sur ton appli WS qui ne sera pas décompilable (A ma connaissance du moins)

  8. #8
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut
    Il doit y avoir ue nuance que je n'ai pas saisi alors.

    La signature est créée avec la clé publique ou la clé privée ?
    Il me semblait que c'était la clé publique.

    Parce que une fois dans mon programme comment vérifier que la clé correspond à la signature ?
    Il faut la clé privée pour faire ça non?

    En gros je vois pas la différence entre la clé publique et la clé privée pour la création de la signature.

    Merci

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501
    Par défaut
    le clé public sert à codé le message

    la clé privé sert à décodé le message

    avec la clé public tu ne peux pas décodé le message

  10. #10
    Membre actif Avatar de istace.emmanuel
    Homme Profil pro
    Senior Full-Stack .Net Developer
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Full-Stack .Net Developer
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Points : 265
    Points
    265
    Par défaut
    Juste une remarque, l'association par mac address est TRES restrictive et une MAC address se change très très facilement.

    De plus, il ne faut pas se leurer, aucun système de protection est infaillible, regarde du coté des sites de cracking tu verras que tous le sont, de IBM rational Rose a Visual Studio Ultimate en passant par tous les tools existant.

    Le problème avec la mac est, si on veux cracker suffit de passer le fichier le cfg et changer la mac. Et si on l'utilise légalement, que l'on change la NIC, ou que l'on veux simplement transférer la licence d'un post a un autre (désinstaller sur un, installer sur un autre), l'utilisateur sera dans l'incapacité de migrer de machine...

    Donc partant du principe que, si quelqu'un veux il peut et que pour les utilisateurs legaux cela est trop restrictif a mon sens, je te conseil plutôt de prendre un système simple à serial avec clef pub/priv sans mac address.

    EDIT :
    Il faut aussi pensser au fait que en dotnet, même obfusqué, le MSIL reste très lisible et modifier un PE est ultra simple. Bypasser ta méthode de verif peut se montrer ridiculement simple.
    De plus si tu appel un serveur qui te renvoi un réponse type Bool pour authentifier l'application, dit toi qu'un web service se spoof facilement... a bon entendeur ^^

  11. #11
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Ici je parle de signer un message et non le crypter. C'est donc la clé privée qui peut signer et les clés publiques qui peuvent vérifier l'intégrité de la signature. C'est le contraire de crypter un message, ce qui se fait avec la clé publique et qui se décrypte uniquement avec la clé privée.

    Oui, aucune méthode de protection n'est bonne à 100% mais le MAC Spoofing demande déjà un certain niveau et on ne change pas de carte réseau tous les 36 du mois De plus le WS ne renvoie pas un bool mais bien une string complète, ce qui ne peut pas être remplacé par un programme tiers (vu que c'est signé avec la clé privée).

    Si tu veux être moins restrictif, tu peux très bien utiliser le nom de l'ordinateur par exemple.

    Je vous renvoie à mon message du dessus qui explique bien le fonctionnement de cette manière de faire. Si vous voulez en savoir un peu plus, il va falloir attendre un peu que j'aie le temps de faire mon article

  12. #12
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut
    Merci pour vos réponses. J'imagine bien qu'il n'y a pas de solutions infaillibles.

    Quelle est la meilleure solution pour empêcher la décompilation ?

  13. #13
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Citation Envoyé par r0seBa Voir le message
    Merci pour vos réponses. J'imagine bien qu'il n'y a pas de solutions infaillibles.

    Quelle est la meilleure solution pour empêcher la décompilation ?
    C'est impossible.
    Le mieux que l'on puisse faire c'est l'obfuscation, qui rend difficilement compréhensible le code généré (comprendre un code où les types, membres et variables s'appellent par exemple "gS75kdUlnngTH45dfg" est assez difficile). Mieux vaut alors éviter d'écrire la clé en clair dans le code, cela fournirait un bon point de départ au pirate.

    Accessoirement, songe toujours au problème du webservice corrompu ou en panne, ou du devenir de ton produit si ta société fait faillite. Que se passera t-il alors pour l'utilisateur ? Qui plus est, d'autres problématiques se posent : déploiement sur tout un parc, changement de matériel de l'utilisateur, etc.

    Enfin, il existe des solutions commerciales pour de tels systèmes de protection de la licence, je conseille fortement d'y jeter un coup d'oeil.

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501
    Par défaut
    Microsoft serait pour l'open-source?

  15. #15
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut
    Merci.

    Niveau obfuscation vous me conseillez quoi ? J'ai vu reflector qui possède trois versions, j'imagine que dans tous les cas il va falloir sorienter vers
    un programme payant.

    De plus j'ai vu que reflector était un decompilateur aussi, ça signifie qu'il décompile les codes qu'il est censé protéger ?

  16. #16
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Reflector décompile toutes les assemblies dotnet. Mais si l'assembly a été obfuquée, il est incapable de rétablir les noms d'origine, aucun outil ne le peut, cette information a été perdue pour toujours. Donc Reflector et les outils similaires afficheront un code où toutes les variables, types et membres ont des noms à coucher dehors et dépourvus de sens.

    Niveau outils d'obfuscation, je laisse d'autres personnes se prononcer.

  17. #17
    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
    Citation Envoyé par r0seBa Voir le message
    Niveau obfuscation vous me conseillez quoi ?
    http://www.eziriz.com/ (Permet aussi de gérer les licenses)

  18. #18
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Il y a lui aussi : http://www.ssware.com/cryptoobfuscator/order.htm

    Bon magasinage!

  19. #19
    Membre actif Avatar de istace.emmanuel
    Homme Profil pro
    Senior Full-Stack .Net Developer
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Full-Stack .Net Developer
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Points : 265
    Points
    265
    Par défaut
    Je dirais déjà un que tu ne trouves pas cracké sur le net...
    Ce qui est le cas des deux cités plus haut
    (Si vous voulez vérifier, google + nom du produit suffixé de megaupload...)

    Un programme de licencing qui se fait cracker... c'est bof...

  20. #20
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    Points : 49
    Points
    49
    Par défaut
    Eziriz écrit par a+b que c'est imPossible a décompiler, qui croire ? Leur solution est beaucoup plus chère que reflector par exemple. C'est réellement mieux au niveau de la protection ?

    Jai pas tout compris leur systeme de licence: Leur système de licence peut de créer sur mes serveurs (a chaque commande du client) ?

    Merci

Discussions similaires

  1. Gestion activation logiciel
    Par jaduta dans le forum ALM
    Réponses: 4
    Dernier message: 11/03/2009, 12h36
  2. La meilleure protection contre le piratage des logiciels ?
    Par iubito dans le forum Débats sur le développement - Le Best Of
    Réponses: 184
    Dernier message: 23/12/2008, 14h35
  3. Clé d'activation logiciels
    Par MonPc dans le forum Débuter
    Réponses: 3
    Dernier message: 18/02/2008, 05h38
  4. clé d'activation logiciel
    Par mwanjany dans le forum WinDev
    Réponses: 1
    Dernier message: 23/10/2007, 11h19
  5. [C#] Activation logiciel
    Par Nico28 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/09/2006, 18h11

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