Question

Je suis actuellement impliqué dans le développement d'un produit (développé en C #) qui sera disponible pour le téléchargement et l'installation gratuitement, mais dans une version très limitée. Pour avoir accès à toutes les fonctionnalités que l'utilisateur doit payer une redevance de licence et recevoir une clé. Cette clé sera alors entré dans l'application de « déverrouiller » la version complète.

En utilisant une clé de licence comme c'est un peu d'habitude, je me demande:

  1. Comment est-ce généralement résolu?
  2. Comment puis-je générer la clé et comment peut-il être validé par l'application?
  3. Comment puis-je éviter aussi avoir une clé faire publier sur Internet et utilisé par d'autres qui n'ont pas la licence payées (une clé qui est fondamentalement pas « leur »).

Je suppose que je devrais aussi attacher la clé de la version de l'application d'une certaine manière il sera possible de charger de nouvelles clés dans les versions de fonction.

autre chose que je devrait penser dans ce scénario?

Était-ce utile?

La solution

Avertissement: vous ne pouvez pas empêcher les utilisateurs de pirater, mais assurez-vous que plus facile pour les utilisateurs honnêtes de faire la bonne chose

.

En supposant que vous ne voulez pas faire une version spéciale pour chaque utilisateur, puis:

  • vous générer une clé secrète pour le produit
  • Prenez le nom de l'utilisateur
  • Concatentate le nom de l'utilisateur et la clé secrète et hachage avec (par exemple) SHA1
  • Déballez le hachage SHA1 comme une chaîne alphanumérique. Ceci est « la clé de produit » de l'utilisateur individuel
  • Dans le cadre du programme, faire le même hachage, et comparer avec la clé de produit. Si elles sont égales, OK.

Mais, je le répète: cela n'empêchera pas le piratage


J'ai lu récemment que cette approche n'est pas très cryptographiquement son. Mais cette solution est déjà faible ( que le logiciel lui-même doit inclure la clé secrète quelque part ), donc je ne pense pas que cette découverte invalident la solution dans la mesure où il va.

Je pensais juste que je devrais vraiment parler de cela, cependant; si vous avez l'intention de tirer quelque chose d'autre de cela, méfiez-vous.

Autres conseils

Il y a plusieurs façons de générer des clés de licence, mais très peu de ces moyens sont vraiment en sécurité. Et il est dommage, parce que pour les entreprises, les clés de licence ont presque la même valeur que l'argent réel.

Idéalement, vous voulez que vos clés de licence pour avoir les propriétés suivantes:

  1. Seul votre entreprise doit être en mesure de générer des clés de licence pour vos produits, même si quelqu'un ingénieurs complètement inverse vos produits (ce qui va se passer, je parle d'expérience). Dissimuler l'algorithme ou de cacher une clé de chiffrement dans votre logiciel est vraiment hors de question si vous êtes sérieux sur le contrôle des licences. Si votre produit est un succès, quelqu'un va faire un générateur de clé en quelques jours de la libération.

  2. Une clé de licence devrait être utilisable sur un seul ordinateur (ou tout au moins vous devriez être en mesure de contrôler ce très bien)

  3. Une clé de licence doit être court et facile à taper ou dicter par téléphone. Vous ne voulez pas chaque client d'appeler le support technique parce qu'ils ne comprennent pas si la clé contient un « l » ou « 1 ». Votre service d'assistance vous remercierait pour cela, et vous aurez une réduction des coûts dans ce domaine.

Alors, comment allez-vous résoudre ces défis?

  1. La réponse est simple mais techniquement difficile: les signatures numériques en utilisant la cryptographie à clé publique. Vos clés de licence devraient être en effet signé des « documents », contenant des données utiles, signé avec la clé privée de votre entreprise. Les signatures doivent faire partie de la clé de licence. Le produit doit valider les clés de licence avec la clé publique correspondante. De cette façon, même si quelqu'un a accès à la logique de votre produit, ils ne peuvent pas générer des clés de licence parce qu'ils ne sont pas la clé privée. Une clé de licence ressemblerait à ceci: base32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) Le plus grand défi ici est que les algorithmes de clés publiques classiques ont de grandes tailles de signature. RSA512 a une signature de 1024 bits. Vous ne voulez pas que vos clés de licence pour avoir des centaines de caractères. L'une des approches les plus puissantes est d'utiliser la cryptographie à courbe elliptique (avec les mises en œuvre avec soin pour éviter les brevets existants). clés ECC sont comme 6 fois plus courte que les clés RSA, pour la même force. Vous pouvez réduire la taille de signature en utilisant des algorithmes tels que l'algorithme de signature numérique Schnorr (brevet a expiré en 2008 - bon :))

  2. Ceci est réalisable par l'activation du produit (Windows est un bon exemple). En fait, pour un client avec une clé de licence valide, vous devez générer des « données d'activation » qui est un message signé intégration id matériel de l'ordinateur les données signées. Cela se fait habituellement sur Internet, mais une seule fois: le produit envoie la clé de licence et l'ID du matériel informatique à un serveur d'activation, et le serveur d'activation renvoie le message signé (ce qui peut aussi être réalisée à court et facile à dicter sur la téléphone). A partir de ce moment, le produit ne vérifie pas la clé de licence au démarrage, mais les données d'activation, qui a besoin de l'ordinateur pour être le même pour valider (sinon, les données seront différentes et la signature numérique ne validerait pas). Notez que la vérification des données d'activation ne nécessite pas de vérification sur Internet:. Il suffit de vérifier la signature numérique des données d'activation avec la clé publique déjà intégrée dans le produit

  3. Eh bien, juste éliminer les caractères redondants comme "1", "l", "0", "o" de vos clés. Diviser la chaîne clé de licence en groupes de caractères.

La réponse est simple -. Peu importe le régime utilisé, il peut être fissuré

Ne pas punir les clients honnêtes avec un système destiné à empêcher les pirates, les pirates vont craquer peu importe.

Un simple code haché lié à leur e-mail ou similaire est probablement assez bon. ID à base de matériel deviennent toujours un problème quand les gens ont besoin de réinstaller ou mettre à jour le matériel.

Bon fil sur la question: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34

Lors de la génération la clé, ne pas oublier de concaténer la version et le numéro de build à la chaîne que vous le hachage sur calculer. De cette façon, il n'y aura pas une seule clé qui déverrouille tout tout ce que vous jamais sorti.

Après avoir trouvé des clés ou des patches flottant dans astalavista.box.sk , vous saurez que vous avez réussi à faire quelque chose assez populaire que quelqu'un pris la peine de se fissurer. Réjouissez-vous!

En plus de ce qui a déjà été dit ....

Toute utilisation d'applications .NET sont intrinsèquement cassable en raison des problèmes linguistiques intermédiaires. Un démontage simple du code .NET ouvre votre produit à tout le monde. Ils peuvent facilement contourner votre code de licence à ce moment-là.

Vous ne pouvez même utiliser des valeurs matérielles pour créer une clé plus. Les machines virtuelles permettent maintenant quelqu'un pour créer une image d'une machine « sous licence » et l'exécuter sur une plate-forme de leur choix.

Si c'est un logiciel coûteux il y a d'autres solutions. Si ce n'est pas, tout simplement le rendre assez difficile pour le pirate occasionnel. Et accepter le fait qu'il y aura des copies sans licence là-bas par la suite.

Si votre produit est complexe, les questions de soutien seront inhérents à créer une certaine protection pour vous.

Le C moteur # / .NET que nous utilisons pour la génération de clé de licence est désormais maintenue en open source:

https://github.com/appsoftware/.NET-Licence-Key- générateur.

Il est basé sur un système de « Clé de vérification partielle », qui signifie seulement un sous-ensemble de la clé que vous utilisez pour générer la clé doit être compilé dans votre distribuables. Vous créez les clés de votre auto, de sorte que la mise en œuvre de licence est unique à votre logiciel.

Comme indiqué ci-dessus, si votre code peut être décompilé, il est relativement facile de contourner la plupart des systèmes d'octroi de licences.

Je l'ai utilisé Crypkey dans le passé. Il est l'un des nombreux disponibles.

Vous ne pouvez protéger les logiciels jusqu'à un certain point avec un régime d'autorisation.

Je ne sais pas comment vous voulez obtenir élaborée

mais je crois que .net peut accéder au disque dur le numéro de série.

vous pourriez avoir le programme que vous envoyez et que eles quelque chose (comme le nom d'utilisateur et l'adresse MAC de la carte réseau)

calculer un code basé ce et les retourner par courriel la clé.

ils les empêcher de machines de commutation après avoir la clé.

Je suis l'un des développeurs de la plate-forme de licence logicielle Cryptolens et travaille sur les systèmes de licence depuis l'âge de 14. Dans cette réponse, j'ai inclus quelques conseils basés sur l'expérience acquise au fil des ans.

La meilleure façon de résoudre c'est par la mise en place d'un serveur de clé de licence que chaque instance de l'application fera appel afin de vérifier une clé de licence.

Avantages d'un serveur clé de licence

Les avantages d'une licence serveur de clés est que:

  1. vous pouvez toujours mettre à jour ou de bloquer une clé de licence avec effet immédiat.
  2. chaque clé de licence peut être verrouillé à certain nombre de machines (ce qui contribue à empêcher les utilisateurs de publier la clé de licence en ligne pour les autres à utiliser).

Considérations

Bien que la vérification de licences en ligne vous donne plus de contrôle sur chaque instance de l'application, la connexion Internet n'est pas toujours présent (surtout si vous ciblez les grandes entreprises), nous avons donc besoin d'une autre façon d'effectuer la licence la vérification des clés.

La solution est toujours de signer la licence principale réponse du serveur à l'aide d'un système de chiffrement à clé publique tel que RSA ou ECC (peut-être mieux si vous envisagez d'exécuter sur les systèmes embarqués). Votre application ne devrait avoir le clé publique pour vérifier la réponse clé de licence.

Donc dans le cas où il n'y a pas de connexion Internet, vous pouvez utiliser la licence précédente réponse clé à la place. Assurez-vous de stocker à la fois date et l'identifiant de la machine dans la réponse et vérifier qu'il est pas trop vieux (par exemple. Vous permettent aux utilisateurs d'être en ligne au plus 30 jours, etc. ) et que la licence réponse clé appartient à l'appareil approprié.

  

Remarque vous devriez toujours vérifier le certificat de réponse clé de licence, même si vous êtes connecté à Internet), afin d'assurer qu'il n'a pas été modifié depuis quitté le serveur (ce encore doit être fait même si votre API au serveur clé de licence utilise https)

Protection des algorithmes secrets

La plupart des applications .NET peuvent être rétro-ingénierie assez facilement (il est à la fois un diassembler fourni par Microsoft pour obtenir le code IL et certains produits commerciaux peuvent même récupérer le code source dans par exemple. C #). Bien sûr, vous pouvez toujours obscurcir le code, mais il est jamais sûr à 100%.

la plupart des cas, le but de toute solution de licence de logiciel est d'aider les gens honnêtes d'être honnête (à savoir que les utilisateurs honnêtes qui sont prêts à payer ne faut pas oublier de payer après un procès arrive à expiration, etc.).

Cependant, vous pouvez toujours avoir un code que vous nullement voulez échapper au public (par exemple. Un algorithme pour prédire le cours des actions, etc.). Dans ce cas, la seule façon de faire est de créer un point de terminaison que votre application API appellera chaque fois que la méthode doit être exécutée. Il nécessite une connexion Internet, mais il assure que votre code secret est jamais exécuté par la machine cliente.

Mise en œuvre

Si vous ne voulez pas vous mettre tout en œuvre, je vous recommande de jeter un oeil à ce tutoriel (partie de Cryptolens )

La seule façon de faire tout ce que vous avez demandé est d'exiger un accès Internet et de vérification avec un serveur. L'application doit se connecter au serveur avec la clé, puis vous devez stocker les détails de la session, comme l'adresse IP. Cela empêchera la clé d'être utilisé sur plusieurs machines différentes. Ceci est généralement pas très populaire auprès des utilisateurs de l'application, et à moins que cela est une application très coûteuse et complexe, il est pas la peine.

Vous pouvez tout simplement avoir une clé de licence pour l'application, puis vérifiez côté client si la clé est bonne, mais il est facile de distribuer cette clé à d'autres utilisateurs, et avec une décompilateur nouvelles clés peuvent être générées.

J'ai mis l'activation d'un temps par Internet sur le logiciel de mon entreprise (C # .net le) qui nécessite une clé de licence qui fait référence à une licence stockée dans la base de données du serveur. Le logiciel frappe le serveur avec la clé et reçoit des informations de licence qui est ensuite crypté localement à l'aide d'une clé RSA générée à partir de certaines variables (une combinaison de CPUID et d'autres choses qui ne changera pas souvent) sur l'ordinateur client, puis les stocke dans le registre.

Il nécessite un codage côté serveur, mais il a vraiment bien travaillé pour nous et je suis en mesure d'utiliser le même système lorsque nous avons élargi à un logiciel basé sur un navigateur. Il donne également vos vendeurs beaucoup d'informations au sujet de qui, où et quand est utilisé le logiciel. Tout système de licence qui n'est géré localement totalement vulnérables à l'exploitation, en particulier avec la réflexion dans .NET . Mais, comme tout le monde a dit, aucun système est tout à fait sûr.

À mon avis, si vous ne l'utilisez licence basée sur le Web, il n'y a pas de véritable point de protéger le logiciel du tout. Avec le mal de tête que les DRM peut causer, il est injuste pour les utilisateurs qui ont effectivement payé pour cela à souffrir.

Je crois fermement que le système de licences basé sur la cryptographie à clé publique seulement l'approche ici, parce que vous n'avez pas d'inclure des informations essentielles requises pour la production de licence dans votre code source.

Dans le passé, je l'ai utilisé bibliothèque de licences de Treek plusieurs fois, parce que il fullfills ces exigences et offre très bon prix. Il utilise la même protection de licence pour les utilisateurs finaux et lui-même et Noone craqué que jusqu'à présent. Vous pouvez également trouver de bons conseils sur le site pour éviter le piratage et la fissuration.

Comme quelques autres ont mentionné, je suis un grand adversaire d'être hostile aux clients par défaut, quelque chose que l'industrie de licence est connu pour. Donc, je vais développer une bonne solution pour votre problème offre également un bon client UX .

Pour commencer, vous avez dit que vous avez une version « limitée » de votre logiciel que vous utilisez pour essayer de convertir les clients à « mettre à jour » pour des fonctionnalités supplémentaires. Alors, que vous cherchez sont licences de fonctionnalités pour votre produit par exemple un client peut acheter une licence pour fonctionnalités X ou fonction-Y .

Je Keygen avec ce type de licence à l'esprit. Keygen est une API REST de licence qui vous permet de gérer les comptes utilisateurs, les licences et suivre également l'utilisation / associations de la machine.

Ce que je ferais est mis en place 2 types de licence ( politique au sein Keygen) où l'on est une politique de base pour la version gratuite limitée, et l'autre est un politique pour la version payante.

Je ne suis pas sûr de ce que vous utilisez pour les paiements, mais supposons que vous utilisez quelque chose comme Stripe (assez standard de nos jours) que les offres webhooks . Keygen a également webhooks (si vous utilisez ou non, tout cela est encore applicable). Vous pouvez intégrer Keygen parler avec votre fournisseur de paiement à l'aide webhooks des deux côtés. (Pensez: customer.created-> créer licence de base pour le client, license.created-> client de charge pour la nouvelle licence)

Ainsi, en utilisant webhooks, nous pouvons automatiser la création de licences pour les nouveaux clients. Alors, que sur la validation de licence dans l'application elle-même? Cela peut être fait dans une variété de façons, mais la plus populaire est en exigeant votre client d'entrer dans une longue clé de licence dans un champ de saisie que vous pouvez ensuite valider; Je pense que cela est une façon de gérer la validation des licences terribles dans votre application.

Pourquoi est-ce que je pense que? Eh bien d'abord, vous demandant votre client d'entrer une clé de licence fastidieusement longue qui est destiné à la consommation de la machine, et le second votre qui vous oblige et votre client de garder une trace de la clé de licence fastidieusement à long .

Ok, donc ce qui est une solution de rechange? Je pense que la meilleure alternative est en train de faire quelque chose de tous vos clients sont habitués à: leur permettant de créer un compte pour votre produit en utilisant un email / mot de passe . Vous pouvez alors associer toutes leurs licences et leurs machines avec ce compte. Alors maintenant, au lieu d'entrer une clé de licence, ils peuvent simplement se connecter en utilisant leurs informations d'identification.

Quel est l'avantage que vous donner? Tout d'abord, il se débarrasse de la nécessité pour vous et vos clients de garder une trace des clés de licence, car il est tout manipulé derrière les coulisses à l'intérieur de leur compte utilisateur et surtout: vous pouvez maintenant offrir à vos clients la licence libre-service et l'activation machines -à-dire depuis toutes leurs licences et les machines sont associées à leur compte d'utilisateur, vous pouvez! les inciter à acheter une licence quand ils feu votre application sur une machine non reconnue.

maintenant sur la validation de la licence : chaque fois que votre client se connecte dans votre application avec leur e-mail / mot de passe, vous pouvez interroger leur compte utilisateur pour les licences dont ils sont propriétaires pour déterminer si elles peuvent utiliser en fonctionnalités X ou fonction-Y . Et depuis votre application est maintenant self-service , vous pouvez permettre à vos clients d'acheter des fonctionnalités supplémentaires directement à partir de votre application!

Nous avons donc introduit un ton de l'automatisation à notre système de licences, nous pouvons octroyer une licence individuelle Caractéristiques (ie un nombre limité par rapport à la version complète), nous avons offert un génial UX pour nos clients et nous avons également Soulagé l'une des principales raisons pour les demandes de soutien. permis la récupération des clés

Quoi qu'il en soit, cela a longtemps, mais nous espérons qu'il aide quelqu'un!

Il est impossible d'empêcher complètement le piratage de logiciels. Vous pouvez empêcher le piratage occasionnel et c'est ce que toutes les solutions de licences leur faire.

licence verrouillé Node (machine) est préférable si vous voulez éviter la réutilisation des clés de licence. J'utilise Cryptlex pendant environ un an pour mon logiciel. Il a un plan libre aussi, donc si vous ne vous attendez pas trop de clients que vous pouvez l'utiliser gratuitement.

Vous pouvez utiliser une solution tierce libre de gérer cela pour vous, comme Quantum-Key.Net Il est gratuit et gère les paiements via paypal via une page de vente web, il crée pour vous, émission clés par e-mail et bloque l'utilisation clé d'une ordinateur spécifique pour empêcher le piratage.

Votre devrait aussi prendre soin de masquer / crypter votre code ou il peut facilement être inversée conçu en utilisant des logiciels tels que De4dot et .NetReflector. Un bon obfuscateur code libre est ConfuserEx Wich est rapide et simple à utiliser et plus efficace que des solutions de rechange coûteuses.

Vous devez exécuter votre logiciel fini par De4Dot et .NetReflector à l'ingénierie inverse et voir ce qu'un pirate verrait s'ils ont fait la même chose et de vous assurer que vous ne l'avez pas laissé de code importante exposé ou non dissimulé.

Votre logiciel sera toujours craquable mais pour le pirate occasionnel, il pourrait bien être suffisant pour les mettre hors tension et ces étapes simples empêchera également votre code en cours d'extraction et réutilisés.

https://quantum-key.net

Comment utiliser ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com / dynamique / produits / dotnet-développement / réflecteur / télécharger

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top