94 votes

Comment puis-je créer une clé de produit pour mon application C# ?

Comment puis-je créer une clé de produit pour mon application C# ?

Je dois créer une clé de produit (ou de licence) que je mets à jour chaque année. En outre, je dois en créer une pour les versions d'essai.

Relié :

0 votes

0 votes

@stukelly cela a été posté après que J3r3myK ait posté sa question...

83voto

frankodwyer Points 9422

Vous pouvez faire quelque chose comme créer un enregistrement qui contient les données que vous voulez authentifier à l'application. Il peut s'agir de tout ce que vous voulez, par exemple les fonctions du programme à activer, la date d'expiration, le nom de l'utilisateur (si vous voulez le lier à un utilisateur). Ensuite, chiffrez-le en utilisant un algorithme de cryptage avec une clé fixe ou hachurez-le. Ensuite, il suffit de le vérifier dans votre programme. Une façon de distribuer le fichier de licence (sous Windows) est de le fournir sous la forme d'un fichier qui met à jour le registre (ce qui évite à l'utilisateur de devoir le saisir).

Méfiez-vous toutefois de ce faux sentiment de sécurité : tôt ou tard, quelqu'un patchera simplement votre programme pour éviter cette vérification et distribuera la version patchée. Ou bien, il élaborera une clé qui passe tous les contrôles et la distribuera, ou bien il antidatera l'horloge, etc. Peu importe la complexité de votre système, tout ce que vous ferez pour cela ne sera qu'une sécurité par l'obscurité et ils seront toujours capables de le faire. Même s'ils ne le peuvent pas, quelqu'un le fera et distribuera la version piratée. La même chose s'applique même si vous fournissez un dongle - si quelqu'un le veut, il peut patcher la vérification pour cela aussi. Signer numériquement votre code n'aidera pas, ils peuvent enlever cette signature, ou la démissionner.

Vous pouvez compliquer un peu les choses en utilisant des techniques pour empêcher le programme de s'exécuter dans un débogueur, etc. mais même cela n'est pas infaillible. Vous devez donc rendre les choses suffisamment difficiles pour qu'un utilisateur honnête n'oublie pas de payer. Faites également très attention à ce que votre système ne devienne pas gênant pour les utilisateurs payants - il est préférable d'avoir quelques copies volées que de ne pas permettre à vos clients payants d'utiliser ce pour quoi ils ont payé.

Une autre option consiste à effectuer un contrôle en ligne - il suffit de fournir à l'utilisateur un identifiant unique, de vérifier en ligne les capacités de cet identifiant et de le mettre en mémoire cache pendant un certain temps. Toutes les mêmes mises en garde s'appliquent cependant - les gens peuvent contourner n'importe quel système de ce type.

Considérez également les coûts d'assistance liés à la gestion des utilisateurs qui ont oublié leur clé, etc.

edit : Je veux juste ajouter, n'investissez pas trop de temps dans ce domaine ou pensez que d'une manière ou d'une autre votre schéma alambiqué sera différent et inviolable. Ce n'est pas le cas, et ça ne peut pas l'être tant que des personnes contrôlent le matériel et le système d'exploitation sur lequel tourne votre programme. Les développeurs ont essayé de mettre au point des systèmes toujours plus complexes, pensant que s'ils développent leur propre système, il ne sera connu que d'eux et sera donc "plus sûr". Mais c'est vraiment l'équivalent en programmation d'essayer de construire une machine à mouvement perpétuel :-)

1 votes

Bon résumé. Si quelqu'un ne croit pas que c'est simple à contourner, regardez CheatEngine, il rend les choses si faciles que des non-programmeurs peuvent le faire. Le mieux est de rendre cette couche simple.

0 votes

J'ai le même problème, j'ai créé une clé de licence pour mon application avec la date d'expiration et la dernière date d'enregistrement pour la vérification, mais le problème est que je dois ajouter la clé privée pour modifier le fichier afin de mettre à jour la dernière date d'enregistrement, ce qui n'est pas une façon intelligente de mettre la clé dans le code. un conseil ?

16voto

Spiffeah Points 304

A qui faites-vous confiance ?

J'ai toujours considéré que ce domaine était trop critique pour confier à un tiers la gestion de la sécurité d'exécution de votre application. Une fois que ce composant est craqué pour une application, il l'est pour toutes les applications. C'est arrivé à Discret en cinq minutes une fois qu'ils ont opté pour une solution de licences tierce partie pour 3ds Max il y a des années... Le bon temps !

Sérieusement, envisagez de créer le vôtre pour avoir un contrôle total sur votre algorithme. Si vous le faites, envisagez d'utiliser des composants dans votre clé selon les lignes suivantes :

  • Nom de la licence - le nom du client (le cas échéant) auquel vous accordez une licence. Utile pour gérer les déploiements d'entreprise - faites en sorte qu'ils se sentent spéciaux en ayant un nom "personnalisé" dans les informations de licence que vous leur fournissez.
  • Date d'expiration de la licence
  • Nombre d'utilisateurs à exécuter sous la même licence. Cela suppose que vous ayez un moyen de suivre les instances en cours d'exécution sur un site, à la manière d'un serveur.
  • Codes des fonctionnalités - pour vous permettre d'utiliser le même système de licence pour plusieurs fonctionnalités et plusieurs produits. Bien sûr, si c'est craqué pour un produit, c'est craqué pour tous.

Ensuite, faites-en la somme de contrôle et ajoutez-y le cryptage (réversible) que vous voulez pour le rendre plus difficile à craquer.

Pour créer une clé de licence d'essai, il suffit de définir des valeurs pour les valeurs ci-dessus qui se traduisent par "mode d'essai".

Et comme il s'agit probablement du code le plus important de votre application/entreprise, en plus/au lieu de l'obscurcissement, envisagez de placer les routines de décryptage dans un fichier DLL natif et de simplement P/Invocation à ce sujet.

Plusieurs entreprises pour lesquelles j'ai travaillé ont adopté des approches généralisées à cet effet avec beaucoup de succès. Ou peut-être que les produits ne valaient pas la peine d'être craqués ;)

3 votes

Pour info, le cryptage est toujours réversible, il serait inutile de ne pas pouvoir lire ce qui a été crypté. Le hachage est le "cryptage" à sens unique auquel vous pensez peut-être.

0 votes

"Ne créez pas votre propre système de cryptographie", qui, je pense, est de Bruce Scheier (je ne suis pas sûr), est la voie à suivre. Vous voudrez peut-être jeter un coup d'oeil à cette réponse : security.stackexchange.com/questions/2202/

0 votes

Pouvez-vous élaborer sur "..P/Invoke to it". J'ai regardé la page liée mais je n'ai pas été plus sage :-/

11voto

Kinjal Dixit Points 2996

Si vous voulez parler des clés que vous pouvez taper, comme les clés de produit Windows, alors elles sont basées sur des contrôles. Si vous parlez des clés que vous devez copier-coller, alors elles sont basées sur une signature numérique (cryptage à clé privée).

Une logique simple de clé de produit pourrait consister à dire que la clé de produit est constituée de quatre groupes de 5 chiffres, comme par exemple abcde-fghij-kljmo-pqrst Il est ensuite possible de spécifier des relations internes telles que f+k+p doit être égal à a, ce qui signifie que les premiers chiffres des groupes 2, 3 et 4 doivent être égaux à a. Cela signifie que 8xxxx-2xxxx-4xxxx-2xxxx est valide, tout comme 8xxxx-1xxxx-0xxxx-7xxxx. Bien sûr, il y aurait d'autres relations, y compris des relations complexes comme, si le deuxième chiffre du premier groupe est impair, alors le dernier chiffre du dernier groupe devrait l'être aussi. De cette façon, il y aurait des générateurs pour les clés de produit et la vérification des clés de produit vérifierait simplement si elles correspondent à toutes les règles.

Il s'agit normalement de la chaîne d'informations sur la licence cryptée à l'aide d'une clé privée (== signée numériquement) et convertie en Base64 . La clé publique est distribuée avec l'application. Lorsque la chaîne Base64 arrive, elle est vérifiée (==décryptée) par la clé publique et si elle est jugée valide, le produit est activé.

10voto

spender Points 51307

Qu'il soit trivial ou difficile à craquer, je ne suis pas sûr que cela fasse vraiment une grande différence.

La probabilité que votre application soit piratée est bien plus proportionnelle à son utilité qu'à la force de la manipulation de la clé de produit.

Personnellement, je pense qu'il y a deux classes d'utilisateurs. Ceux qui paient. Ceux qui ne paient pas. Ceux qui le font le feront probablement avec la protection la plus triviale. Ceux qui ne le font pas attendront un crack ou iront voir ailleurs. Dans tous les cas, cela ne vous rapportera pas plus d'argent.

5voto

ccook Points 3190

Il y a l'option Licences et protection des logiciels Microsoft (SLP) ainsi que des services. Après avoir lu des articles à ce sujet, j'aimerais vraiment pouvoir les utiliser.

J'aime beaucoup l'idée de bloquer des parties du code en fonction de la licence. C'est un sujet brûlant, et le plus sûr pour .NET. Une lecture intéressante même si vous ne l'utilisez pas !

Licences des logiciels Microsoft® et Protection (SLP) Services est un service d'activation de logiciels qui permet aux éditeurs de logiciels indépendants (ISV) d'adopter des conditions de licence flexibles pour leurs clients. Microsoft SLP Services utilise une méthode de protection méthode de protection unique qui permet de sauvegarder votre application et vos informations de de licence, ce qui vous permet d'accéder marché plus rapidement tout en augmentant conformité des clients.

Remarque : c'est la seule façon dont je diffuserais un produit contenant un code sensible (tel qu'un algorithme précieux).

0 votes

Pour ceux qui se souviennent qu'il a été annulé : SLP est relancé à nouveau

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X