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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    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 émérite

    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
    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 )
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    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 très actif
    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
    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 émérite

    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
    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
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 172
    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

Discussions similaires

  1. Gestion activation logiciel
    Par jaduta dans le forum ALM
    Réponses: 4
    Dernier message: 11/03/2009, 11h36
  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, 13h35
  3. Clé d'activation logiciels
    Par MonPc dans le forum Débuter
    Réponses: 3
    Dernier message: 18/02/2008, 04h38
  4. clé d'activation logiciel
    Par mwanjany dans le forum WinDev
    Réponses: 1
    Dernier message: 23/10/2007, 10h19
  5. [C#] Activation logiciel
    Par Nico28 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/09/2006, 17h11

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