Le Système de Clé CD

Le Système de Clé CD - C++ - Programmation

Marsh Posté le 02-08-2006 à 22:47:27    

Bonjour,
 
Je n'arrive pas à avoir d'informations sur la façon d'implémenter un système de protection par CD-Key.
Pour la génération de la clé, ça pourrait aller, un algo triture une séquence de x caractères.
Mais une fois la clé jugée valide par le programme:
 
Où est localisé l'information de validitée ?


Message édité par PacoDL le 02-08-2006 à 22:47:56
Reply

Marsh Posté le 02-08-2006 à 22:47:27   

Reply

Marsh Posté le 03-08-2006 à 00:40:18    

Salut,
 
C'est là tout le problème que tous les éditeurs n'ont plus :D
Ne stockes pas l'information de validitée, stocke la clé et valide-la à chaque démarrage ;)
 
Stocker sa validité, ça veut dire que ton code va être cracké en moins de 2, surtout si c'est toi qui l'implémentes, ce qui a l'air d'être le cas. Vérifier la clé à chaque démarrage est un tout petit peu plus robuste (tout dépend de ton système de validation de clé, et du niveau de cryptage de l'exe). Une façon qui à l'air de se faire dans certains cas est de prendre la clé et en tirer l'activation/désactivation de certaines fonctions de ton programme, parfois les plus avancées. Si un crackeur arrive derrière et contourne la routine de protection, c'est mort, ton appli est crackée. Si, par contre, tu t'en sert de flag au runtime, il peut penser avoir contourné la clé, mais les utilisateurs auront des mauvaises surprises :)
Par contre, ne centralises pas ton code de vérification; penses-le bien, sinon, quoiqu'il arrive, ton soft sera vite cracké, donc module tout ça, fait des dépendances, crypte ton appli etc... C'est sans doute l'un des meilleurs moyen. Va faire un tour sur crackme.de, tu en sauras plus sur les méthodes de protection :)

Reply

Marsh Posté le 07-08-2006 à 00:51:59    

Merci pour ces conseils. Malheureusement, bien que je sois trilingue, l'allemand ne fait pas parti de mes attributions...
 
Qu'entends-tu par crypter mon appli ? Ce serait une sorte de méthode destiné à contrer un "reverse ingeneering" permettant de remonter jusqu'à l'algorithme de validation de la clé ?
 
En quoi consiste les méthodes les plus efficaces ? Y a t-il un moyen de dissuader les utilisateurs de "faire tourner" leur clé cd (l'exemple de Battle.net et steam en vérifiant constamment sur internet la validité de la clé est beaucoup trop lourd pour moi).

Message cité 1 fois
Message édité par PacoDL le 07-08-2006 à 00:54:44
Reply

Marsh Posté le 07-08-2006 à 02:17:47    

ta clé doit valider les fonctions a(),b(),c(),d() ..... s() t()
 
l'exécutable valide la fonction a()
 
les crackeurs casseront la protection et généront un keygen validant a()
 
si ton logiciel doit atteindre un serveur internet pour offrir des services, le serveur ne donne accès au service que si la clé valide la fonction s(). (genre serveur maitre de référencement de parties réseau pour un jeu vidéo jouable sur internet).
 
et puis tu peux t'amuser a rajouter des tests de fonction b(), c() au fur et a mesure des mises à jour, ou d'avoir des fonctions différentes suivant la localisation sélectionnée.


Message édité par bjone le 07-08-2006 à 02:18:18
Reply

Marsh Posté le 07-08-2006 à 14:38:48    

PacoDL a écrit :

Qu'entends-tu par crypter mon appli ? Ce serait une sorte de méthode destiné à contrer un "reverse ingeneering" permettant de remonter jusqu'à l'algorithme de validation de la clé ?


Le code que tu généres à la compilation est directement "compréhensible" grâce à un désassembleur. C'est à dire que telle instruction est exécuté à telle adresse sans la moindre surprise. Les crypteurs permettent de crypter une zone plus ou moins grande de ton appli (voire l'appli complète) qui est restaurée selon 2 méthodes selon le type d'appli que tu cherches à protéger:
* appli dont le temps d'exécution est critique (jeux, appli de visualisation etc...): tout le code crypté doit être décrypté au lancement sous peine de ralentir sérieusement l'exécution de ton soft
* appli pour laquelle le temps d'exécution n'est pas critique: les fonctions sont décryptées au moment de leur exécution puis recrypter derrière.
Tu te doutes que la 2ème méthode est plus robuste car ça empêche l'attaquant de dumper (i.e. récupérer tout le code) l'exécutable en mémoire vers un fichier sur disque ;)
 
Il y a aussi la méthode de manipulation des tables d'imports. Lorsque tu fais un programme en MFC par exemple, ton appli va s'appuyer sur, mettons, mfc70.dll. Les noms des fonctions et leur adresse sont stockées dans ton appli; crypter cette table permet aussi de compliquer le boulot de l'attaquant.
 
Pour se faire, UPX est assez connu, voire trop :/
Une petite recherche google sur packer exe t'en donneras d'autres. Si tu peux gratter un minimum de fonds pour le système de protection, il vaut mieux tabler sur des solutions (commerciales) éprouvées du type Armadillo.
 
Je t'invites à faire un tour sur le site donné plus haut; tu ne peux pas faire de protection valable sans savoir comment les protections sont défaîtes. Lorsque une protection est faîte en interne (même en s'appuyant sur des dongles), il s'agit d'une condition à remplir à chaque passage (ou l'inverse :) ). Donc, renseignes-toi bien avant de commencer à travailler dessus ;)
 
Edit: le principe de flags a été très bien décrit par bjone; faire un système de ce type est déjà une bonne garantie que les crackers et les utilisateurs utilisant ces cracks s'arracheront les cheveux quelque temps :)


Message édité par IrmatDen le 07-08-2006 à 14:42:14
Reply

Marsh Posté le 08-08-2006 à 19:46:05    

Merci IrmatDen, c'est vraiment très intéressant, puisque je développe un jeu, je devrais sans doute crypter l'ensemble du code... Ce qui sous-entend de stocker l'ensemble du code décrypter en mémoire pour y être exécuté, n'est-ce pas ? (En plus clair, ça mange plus de RAM, non?).
 
Que pensez-vous d'un serveur qui viendrait valider la clé à chaque lancement sans pour autant que le jeu sois fait pour internet, une sorte de passage obliger pour pouvoir lancer le jeu (de nos jours, tout le monde a internet), est-ce que ce serait dur à réaliser ?

Reply

Marsh Posté le 08-08-2006 à 20:44:06    

Je vais te poser une question franche : le jeu que tu developpes est-il vraiment exceptionnel au point que Reloaded et Deviance se raceront jusqu'a la mort pour le cracker en premier ? [:pingouino]
 
Parce que cracker c'est pas trivial non plus. et beaucoup de gens ne savent meme pas telecharger un crack. Le but d'une protection n'est pas d'etre inviolable, mais d'offrir un taux de protections "suffisant". Des protections simples peuvent suffire [:spamafote]

Message cité 1 fois
Message édité par farib le 08-08-2006 à 20:50:41

---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 08-08-2006 à 22:17:37    

PacoDL a écrit :

Merci IrmatDen, c'est vraiment très intéressant, puisque je développe un jeu, je devrais sans doute crypter l'ensemble du code... Ce qui sous-entend de stocker l'ensemble du code décrypter en mémoire pour y être exécuté, n'est-ce pas ? (En plus clair, ça mange plus de RAM, non?).


Non, parce que c'est en fait du code qui se "modifie tout seul" (désolé pour la mauvaise trad, je connais pas le nom français).
C'est à dire que tout le code de l'appli est chargé en mémoire, et le décryptage intervient sur le code chargé.
Par contre, si tu tiens à le faire toi-même, ça nécessite de très sérieuses connaissances et en assembleur, et en prog système (en assembleur justement).
 

PacoDL a écrit :

Que pensez-vous d'un serveur qui viendrait valider la clé à chaque lancement sans pour autant que le jeu sois fait pour internet, une sorte de passage obliger pour pouvoir lancer le jeu (de nos jours, tout le monde a internet), est-ce que ce serait dur à réaliser ?


1. (là c'est juste mon opinion) Je suis foncièrement contre une connection juste pour valider une clé. Je ferme tous les accès du moment que je n'en vois pas mon intérêt, ce qui dans le cas d'un jeu est le MP voire à la limite le stockage de scores.
2. Non, tout le monde n'a pas internet. De plus, admettons que je sois quelqu'un qui bouge beaucoup, je prends un bon portable puisque je suis aussi gamer. Qui me garantis un accès internet là où je vais être demain, ou ce WE?
J'ai cherché des chiffres (très rapidement, et sans plus de recoupement, donc c'est pas parole d'évangile ;) ), et tu perdrais à peu près 1/4 de tes clients potentiels (comprendre les gens ayant un pc) en mettant cette restriction. Les pages que j'ai vues sont sur JDNet et homofuturis
Faut rajouter aussi aux chiffres de l'équipement les pcs assemblé soi-même et/ou pour des potes qui veulent un pc moins chers mais ne savent pas le monter.
 

farib a écrit :

Je vais te poser une question franche : le jeu que tu developpes est-il vraiment exceptionnel au point que Reloaded et Deviance se raceront jusqu'a la mort pour le cracker en premier ? [:pingouino]
 
Parce que cracker c'est pas trivial non plus. et beaucoup de gens ne savent meme pas telecharger un crack. Le but d'une protection n'est pas d'etre inviolable, mais d'offrir un taux de protections "suffisant". Des protections simples peuvent suffire [:spamafote]


+1
Par contre, les images de jeu sont de plus en plus souvent chargées avec un crack. Ce qui revient un peu au même car il faut que la personne sache comment et où la récupérer [:dawa]  
 
Je sais pas trop ce qui est ton projet, mais un système de clé implémenté de la façon dont l'a décris bjone est un bon début, l'encryptage est un plus, et c'est déjà du boulot. Mais ne te fais pas d'illusion, les meilleures protections se font cracker que ce soit Armadillo ou Starforce (solution à bannir d'ailleurs à cause d'une certaine tendance chez les joueurs à bannir les jeux l'utilisant et pourrir les éditeurs l'utilisant...), alors une protection que tu implémentes toi-même, ce sera bien plus rapide que ces 2 là -ne le prends pas mal; c'est juste que si tu connaissais bien la problèmatique, tu ne serais pas là en train de poser des questions (tu serais plutôt sur des forums spécialisé) ;)


---------------
.
Reply

Marsh Posté le 09-08-2006 à 17:39:26    

Effectivement, mon but n'est pas de protéger mon "oeuvre" comme la 8ème merveille du monde, je le réalise dans un cadre, disons "amateur" style shareware et de loisir pour ma part... Je souhaite un peu brasser de tout pour avoir une connaissance même substancielle de la chaîne de prodution d'un véritable jeu vidéo et de toutes ces composantes, et la sécurité en fait partie...
 
Confirmez moi si je résume bien.
 
1 - Si vraiment je veus implémenter une protection, autant aller au plus simple avec un système de clé cd avec un fonctionnement décrit par bjone plus haut.
2 - Finalement, une protection ne sert globlament à rien puisque toujours contournable et de plus, la plupart des gens achètent les jeux...
 
Pour rebondir sur la vérification internet, ne peut-on pas dire que la protection mise en place par le service Xbox-Live de MS est plutôt efficace ?

Reply

Marsh Posté le 09-08-2006 à 18:29:08    

les jeux qui sont les plus achetés (mais pas forcéments les plus joués :D) sont les jeux pas trop gourmants et qui ont une forte valeur de replay grâce au la possibilité de jeu en ligne.  
 
a partir du moment ou le serveur maitre vérifie la clé du client pour renvoyer la liste des parties, alors il n'y aucuns moyen de casser le client pour jouer en ligne sur des serveurs référencés. (donc le piratage est très fortement restreint a cause de cette perte)

Reply

Marsh Posté le 09-08-2006 à 18:29:08   

Reply

Marsh Posté le 09-08-2006 à 18:48:42    

PacoDL a écrit :


2 - Finalement, une protection ne sert globlament à rien puisque toujours contournable


 
 
Non, meme si contournable, c'est utilse. C'est juste que meme si y a des cracks, sur la masse, le % de copies pirates reste toujours faible.


---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed