protection logicielle

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous,

Au fil de mes conversations avec l'un de mes collègue il m'a appris qu'il se débrouillait bien pour contourner les protections des logiciels.
Je me suis donc dis que j'allais créer un système de protection et le mettre au défit de le contourner.

Au début j'étais assez sûr de moi, mais en me baladant sur le net j'ai découvert un forum parlant de hacking et beaucoup de logiciel ont vu leur protections contournée. Aussi j'aurai voulut avoir votre avis concernant ma méthodologie.

Je me suis dit que le meilleur moyen pour créer un système de licence était de se basé sur ce qui est considéré comme sûr aujourd'hui, et ce qui est considéré comme sûr c'est l'AES et le RSA.

J'ai donc créer une paire de clé RSA maître (2048 bit), j'ai intégrer la clé publique dans mon logiciel et gardé la clé privée.
Lorsque le programme muni de la protection est installé celui-ci génère une autre paire de clé RSA (qu'il cache dans un dossier) et génère un fichier request contenant la clé publique.
Ce fichier m'est envoyé, je génère une fichier licence contenant la date d'expiration ainsi que le nom du propriétaire que je chiffre avec une clé AES générée aléatoirement que je chiffre avec la clé publique RSA du client et que je signe à l'aide de ma clé privée.

J'envoie ce fichier licence, le logiciel le lit au démarrage et vérifie que le message provient bien de moi grâce à la signature et déchiffre la licence à l'aide de la clé privée créée à l'installation.

A partir de la je vérifie si la date d'expiration est atteinte.
A noter que pour toute les impressions que génère le programme le nom du propriétaire provenant de la licence est également imprimé.

Donc le pire qu'il puisse arrivé c'est que la paire de clé client soie découverte et donc que la licence puisse être copier sur une autre machine, cependant ni la date de validité ni le nom du propriétaire ne pourront être modifier ce qui limite fortement la propagation de la licence.

Est-ce que ma méthodologie est bonne ? Aurai-je pu faire mieux ?

Merci d'avance pour vos conseil.

Cordialement,
Joueuses fêtes.
La source.

+0 -0

Lu'!

Tout ce dont à besoin un pirate compétent dans ce genre de cas, c'est du temps, et rien de plus. Plus c'est compliqué, plus ce sera long à casser, mais ça finira par péter. Et plus tu obfusqueras, plus tu risqueras de ruiner le bon fonctionnement de ton soft.

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein

+0 -0
Auteur du sujet

D'accord,

Sa force donc au hackeur de faire une analyse du binaire et finalement de lui faire sauté les phases de vérifications.

Donc à chaque MaJ du logiciel, potentiellement du code peu être ajouté avant et donc à chaque MaJ il faut refaire une nouvelle analyse du binaire (si le crack vient à ne plus fonctionner) c'est bien sa ?

Par ailleurs, si on place cette vérifications à plusieurs endroit (par exemple à chaque initialisation de fenêtre), à nouveau sa augmente la difficulté pour le hackeur puisqu'il doit à plusieurs endroit dans le binaire faire sauté la vérification… Ou alors (j'en sais rien) il peut peut être carrément modifier la fonction de vérification pour qu'elle renvoie toujours un nombre de jour d'utilisation positif ?

Bref, aucun moyen +- éficasse pour contrer les hacks :( ?

+0 -0

Oui generalement la sureté du systement de chiffrement n'entre pas vraiment en compte, ce qui peut etre interessant, c'est plutot d'empecher le fonctionnement en cas de non verification et la tu peux commencer à vraiment embeter le mec, mais tu prives alors tous les cas de non-verification legitime (pas d'internet par exemple, proxy etc…)

Un truc que tu peux essayer, c'est un PKVS : si c'est bien implementer, le contournement est dificile. Cela se base sur une double verification de la licence et de la machine sur laquelle est lancé l'application.

Partial Key Verification System

+0 -0

IL y a aussi moyen de cracker les dongle, en analysant le système de fichiers utilisé à bas niveau, mais c'est effectivement compliqué. Par contre tu vas avoir du mal à créer un dongle toi-même pour ton logiciel, c'est pas facile et ça coûte cher, ça ne peut se justifier et rentrer dans tes frais que pour des gros logiciels qui valent déjà au moins plusieurs centaines d'euros. A niveau amateur oublie tout de suite.

Par contre, il n'en reste pas moins juste que la meilleure protection anti-crack, c'est effectivement encore d'embarquer et crypter un morceau de code indispensable au bon fonctionnement du logiciel. Par exemple tu pourrais crypter une DLL d'initialisation en fonction d'une clé dépendante de la machine. Mais dès le moment où la clé est stockée sur le disque en local il y a moyen de la récupérer.

Édité par QuentinC

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Salut !

Mes prédécesseurs dans ce topic ont déjà répondu, je ne fais donc que clarifier.

Le problème avec ton système se situe précisément à ce passage :

J'envoie ce fichier licence, le logiciel le lit au démarrage et vérifie que le message provient bien de moi grâce à la signature et déchiffre la licence à l'aide de la clé privée créée à l'installation.

Imaginons que tu programmes avec un langage système qui compile vers un binaire que tu distribues à ton "client" (parce que désassembler un langage plus haut niveau est généralement plus facile qu'avec un langage système). Ta vérification de provenance du message sera un if de ce genre :

1
2
3
4
5
6
7
[...]
if (sig1 != sig2) {
  // halt here
  return 1;
}
// sig is valid; open the software
[...]

Tout ce que ton client a à faire, c'est désassembler ton programme, l'ouvrir avec un débuggeur, entrer une clé non-valide, placer quelques breakpoint pour isoler la condition de vérification de la signature (cf. code ci-dessus), regarder le code assembleur vérifiant la condition de vérification de la signature, constater que c'est un JNE, noter la position de ce JNE dans le binaire, ouvrir le binaire avec un éditeur hexadécimal, aller à la position du JNE en question, remplacer 0F 85 (JNE) par 0F 84 (JE), sauver le binaire.

Ce qu'il a fait là c'est modifier, sans connaître ton code original, le != en ==, de sorte que la vérification de la signature passe quand la signature n'est pas bonne. Il ne lui reste plus qu'à ouvrir la version modifiée de ton programme, entrer une signature au bol, et ton programme n'y verra que du feu.

Bien sûr, tu peux prévenir la modification de ton binaire en ajoutant une condition pour vérifier si la checksum du binaire est correcte. Mais ce sera contourné en 2-2 avec la même méthode que celle décrite ci-dessus. Au lieu de faire perdre 5 minutes à ton pote, il perdra 10 minutes. Mais il aura quand même accès à ton software.

Complètement hors-sujet, mais ça vaut quand même la peine de le dire parce que c'est un sujet assez intéressant : à mon humble avis les trois meilleurs modèles pour commercialiser avec succès un software sans craindre les fraudeurs sont les suivantes :

  • le modèle Adobe Photoshop : 1/ faire un software propriétaire payant qui coûte cher et qui est protégé avec une méthode similaire à la tienne, mais 2/ faire une software tellement bien foutu que le monde entier en a besoin. /3 Accepter que 99% des jeunes et des étudiants crackent ton software 4/ Capitaliser sur le fait qu'une fois arrivés dans le monde du travail, ces derniers achètent ou fassent acheter par leur boite ton software. En effet, ayant déjà fait leurs armes avec, ils voudront l'utiliser en entreprise. (Evidemment, l'entreprise pourrait elle aussi cracker ton soft, mais là tu leur tombes sur le coin de la gueule et tu les fais raquer. Parce que poursuivre en justice des individus, c'est pas rentable comparé à poursuivre en justice des entreprises. Et parce que les entreprises peuvent se permettre de payer des licences chères là où pour les étudiants c'est plus difficile.)
  • le modèle Red Hat : 1/ faire ou utiliser du logiciel libre 2/ vendre du support, de la formation et de l'intégration
  • le modèle Sublime Text : 1/ faire un software propriétaire payant qui coûte pas cher, 2/ proposer une version d'essai a. full-featured, b. gratuite et c. non-limitée dans le temps, 3/ capitaliser sur le fait que les gens aiment suffisamment ton produit pour vouloir l'acheter et/ou le/te soutenir

Joyeux noël !

[edit] En fait la dernière partie de mon post est pas complètement inintéressante. Si j'ai oublié quelque chose dans cette dernière, envoyez-moi un MP histoire pas faire dérailler le topic. Si je reçois plusieurs MPs, je ferai un MP multi-utilisateur avec les gens qui m'auront contacté, et ensemble on peut peut-être en faire un petit article ou un truc ?

Édité par victor

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+3 -0

le modèle Sublime Text : 1/ faire un software propriétaire payant qui coûte pas cher, 2/ proposer une version d'essai a. full-featured, b. gratuite et c. non-limitée dans le temps, 3/ capitaliser sur le fait que les gens aiment suffisamment ton produit pour vouloir l'acheter et/ou le/te soutenir

Question donc, concrètement qu'est-ce qui empêche SublimeText d'être massivement cracké comme Photoshop ?

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+0 -0

Rien du tout. C'est juste que la version d'essai convient à plein de monde et que ceux qui n'ont pas envie de payer vont rester dessus.

Sinon Sublime Text c'est 70$ USD, c'est pas non plus donné pour un éditeur de texte.

+1 -0
Staff

Question donc, concrètement qu'est-ce qui empêche SublimeText d'être massivement cracké comme Photoshop ?

QuentinC

Je suis pas sûr de comprendre la question. Quel est l'intérêt de cracker une version d'essai gratuite, full-featured et non-limitée dans le temps ?

@Grimur : 70\$ c'est pas non plus les 4300$ que peuvent coûter la suite Adobe CS6.

Édité par victor

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+1 -0

Photoshop coute cher mais selon la théorie d'un ami intégrateur, le crackage ne dérangerait pas plus que ça Adobe car cela permet aux futurs professionnels (encore débutant) de s'entrainer chez eux avant d'aller sur le terrain (entreprise), un particulier n'aura de toute façon jamais les moyens de se passer une licence qui vaut le double de son salaire mensuel, ce qui rapporte à Adobe ce sont les licences vendues aux entreprises.

Miagiste. A la recherche d'un emploi sur Paris (QlikView ou Java). En savoir plus sur moi : https://gokan-ekinci.appspot.com

+1 -0
Staff

Photoshop coute cher mais selon la théorie d'un ami intégrateur, le crackage ne dérangerait pas plus que ça Adobe car cela permet aux futurs professionnels (encore débutant) de s'entrainer chez eux avant d'aller sur le terrain (entreprise), un particulier n'aura de toute façon jamais les moyens de se passer une licence qui vaut le double de son salaire mensuel, ce qui rapporte à Adobe ce sont les licences vendues aux entreprises.

Gugelhupf

En fait, Photoshop n'est pas bon marché, mais le piratage de ce produit ne pose pas trop de problème à Adobe parce que les jeunes et les étudiants peuvent faire leurs armes avec avant d'entrer dans le milieu professionnel. Les gens en questions ne peuvent généralement pas se payer ce produit parce qu'il coûte cher. Là où Adobe fait son bénéfice, c'est en vendant Photoshop aux entreprises.

Édité par victor

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+3 -1

Je suis pas sûr de comprendre la question. Quel est l'intérêt de cracker une version d'essai gratuite, full-featured et non-limitée dans le temps ?

Si la version gratuite est pleinement fonctionnelle et illimitée dans le temps, quel est l'intérêt d'acheter la version payante alors ?

OU alors la version payante a des fonctionalités que la version gratuite n'a pas, et dans ce cas ce n'est pas à mon sens ce qu'on pourrait appeler une version pleinement fonctionelle. C'est juste deux versions complètement différentes du même logiciel, et alors il y a probablement un intérêt à vouloir cracker la version payante qui a des fonctionalités en plus.

Ou alors c'est le même logiciel mais ils disent sur leur site que c'est gratuit pour les particuliers et payant pour les entreprises, auquel cas c'est du bull shit, personne ne vérifiera jamais si une entreprise de l'utilise pas sans license.

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+0 -0
Staff

C'est exactement ce que disait Gugelhupf…

C'était une expérience. Je me demandais si les gens lisaient les posts des autres avant de répondre ou pas.

Sinon, ce que disait Gugelhupf c'est exactement ce que disait ce post.

Conclusion de l'expérience : répéter exactement ce qui a déjà été dit, ça passe. Répéter cette répétition, non. :)

Si la version gratuite est pleinement fonctionnelle et illimitée dans le temps, quel est l'intérêt d'acheter la version payante alors ?

Déjà, y'a pas de version gratuite. Y'a une version d'essai, et cette dernière est gratuite. C'est pas du tout pareil. Pour répondre à ta question :

  • Être en règle ?
  • Soutenir l'éditeur du logiciel ?
  • Mais vraiment, respecter les termes de l'éditeur pour être en règle, ça devrait largement suffire et être suffisamment évident comme raison d'acheter la version payante.

OU alors la version payante a des fonctionalités que la version gratuite n'a pas, et dans ce cas ce n'est pas à mon sens ce qu'on pourrait appeler une version pleinement fonctionelle. C'est juste deux versions complètement différentes du même logiciel, et alors il y a probablement un intérêt à vouloir cracker la version payante qui a des fonctionalités en plus.

C'est pas le cas de Sublime Text, le logiciel dont on parle.

Ou alors c'est le même logiciel mais ils disent sur leur site que c'est gratuit pour les particuliers et payant pour les entreprises, auquel cas c'est du bull shit, personne ne vérifiera jamais si une entreprise de l'utilise pas sans license.

C'est pas le cas de Sublime Text. Et le "personne ne vérifiera jamais", c'est très, très faux.

Édité par victor

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte