Générateur et vérification de numéro de série

cs_fuliculi Messages postés 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 - 19 oct. 2006 à 14:43
icare3000 Messages postés 1 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 17 février 2007 - 17 févr. 2007 à 11:07
Bonjour à tous,

je souhaite protéger un logiciel que je développe dans le cadre de mon taf et je souhaite le 'protéger' (tout est relatif) avec un numéro de série.

Je n'ai pas trouvé d'algo tout fait et personnalisable (en même temps j'ai pas cherché très loin) alors j'ai cherché un peu de mon côté et j'ai pensé à une méthode : utiliser la génération de clé MD5.

Bref résumé de ce qu'est une clé MD5 :
Une clé MD5 est une série de chiffre générée depuis un fichier et une table de nombres connue. La longueur de cette série reste constante (32) et indépendante de la taille de ce fichier (comme un numéro de série!). Cette méthode permet par exemple de télécharger un fichier volumineux et sa clé md5 et d'appliquer cette méthode au fichier et de comparer les 2 clé md5 (celle fournie et celle recalculée) pour vérifier qu'elles sont identiques et donc s'assurer que fichier téléchargé est complet et sans erreur (un simple bit inversé et la clé MD5 devient complètement différente)

Maintenant, comment appliquer cette méthode pour la génération de numéro de série? Exemple :
Remplacer dans l'algo de génération de clé MD5 (publique) la table initiale (donc inconnue du publique) et remplacer le fichier à coder par une série de chiffre de taille constante. Ensuite le numéro de série se compose ainsi :

XXXXXX YYYYYYYYYY

avec X : les chiffres qui vont servir à générer la clé MD5
avec Y : les n premiers chiffres de la clé MD5 (une clé de plus de 32 chiffres, ça va être lourd à saisir)

Le principe d'utilisation :
- Le programmeur saisie une série aléatoire de 5 chiffres, genre 12345 (complètement aléatoire :)
- Le programmeur applique l'algo modifié à cette série et obtient  35a47d68f435c48764f653e454b6876a
- Il décide que le numéro de série comprendra les 10 premiers chiffres de la clé, soit : 35a47d68f4
- Sa clé devient alors 12345 35a47d68f4, soit 1234535a47d68f4 pour avoir une série unique sans coupure (pour ne pas que la longueur de la première série soit connue)

Du côté de l'utilisateur final :
- L'acquéreur (légalement hein ;) du logiciel devra saisir au premier lancement du logiciel cette série : 1234535a47d68f4 (qu'il aura choppé sur la mule si le logiciel était trop cher ;)
- Le logiciel récupère la première série de chiffres de longueur connue (5) et obtient : 12345 (comme de par hasard!)
- Avec le même algo, il en déduit la clé MD5 (avec la même table personnalisée) et obtient 35a47d68f435c48764f653e454b6876a
- Il compare les chiffres restants de la série saisie par l'utilisateur (35a47d68f4) au 10 premiers caractères de la clé MD5 recalculé (35a47d68f435c48764f653e454b6876a)
- Le résultat étant identique, il accepte la clé et poursuit le chargement du logiciel et sauvant le numéro de série dans un fichier texte qu'il re-vérifiera à chaque lancement (donc pas moyen de caroter au second lancement)

La grande question de cette algo est : qu'en est-il de sa robustesse notamment face au reverse-engineering?
Si je l'applique, et si j'ai l'accord du boss, je diffuserai peut-être l'algo pondu (avec une table différente de la notre bien entendu ;)

Après, pour ce rapprocher des standards avec un modèle du style :
CCCC LLLL CCCC LLLL CCCC
avec C un chiffre et L un lettre (oui, avant on avait des a, b, c, d, e et f car c'était en hexa), on peut simplement décider que les lettres se transformeront en chiffres et inversement pour homogénéiser la série. A partir du moment ou l'algo est appliqué dans les deux sens (création, vérification), ça devrait fonctionner.

2 réponses

Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
20 oct. 2006 à 13:00
Salut,

Je m'était interressé il y a peut de temps sur la façon de protéger au mieux un logiciel.

Alors premier point, celui voulant passer outre le sérial ne va pas s'embéter à trouver le code exacte. Il va le désassembler ou le débugger et à un moment, fatalement, il va tomber sur ta comparaison et l'inversera tout simplement. Aucun système de protection n'est infaillible, le truc est de multiplier les protections différentes : AntiDebugger (rendu inefficace par les anti-antiDebugger :), compresser d'exécutable (rendu inefficace par les décompresseurs :), obfusquer le code (on passe outre avec un peut d'attention :), CheckSum, BMP, layeur de cryptage, hash ..... bref chacun à une parade. Les protections citées ne pauseront pas de problèmes aux crackeurs expérimentés (sécurisé une appli est un métier à part entière), le but est de décourager le vilain (plutôt débutant). Aura t'il envie de passer du temps à déplomber ton application ? ...

Au sujet du MD5:
Comme tu l'as compris cela ne sert à rien de mettre cette protection seule, autant écrire le bon pass directement dans le code (lol à ne surtout jamais faire:). Si tu voulais bien faire les choses, ta clef doit être vraiment aléatoire (pas de rand()) et non symétrique, des classes existe déjà.

Voila, j'espère ne pas t'avoir décourager, et bon code .

Ah oui des liens pour aider:
http://bigtick.pastnotecut.org/tutorials/cp.html
mais le mieux est de se renseigner directement sur les sites de crack.
icare3000 Messages postés 1 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 17 février 2007
17 févr. 2007 à 11:07
je cherche un generateur de numero de serie pour visual planing
Rejoignez-nous