2010-08-14 3 views
4

J'ai un morceau de shareware que j'ai écrit que je voudrais distribuer sur Internet. J'ai un type de numéro de série mis en place mais il y a encore une tonne de partage de clés :(Je voudrais ajouter un système où une fois que l'utilisateur entre dans la série, il est vérifié avec mon serveur pour s'assurer qu'il est valide . la simplicité est la clé.Comment programmer un système d'activation de logiciel super simple?

-Client envoie MD5 du numéro de série à la page Web en utilisant le type php chose "www.mywebsite.com?key=3434343"

-php script prend MD5 et vérifie dans sa base de données simple. Si la clé MD5 existe dans la base de données, elle incrémente un compteur associé à cette clé et génère une page Web qui affiche un 1. Si aucune entrée dans la base de données, le script génère une page Web 0.

-Client lit une page Web et vérifie pour 0 ou 1 et agit en conséquence.

Je vais entrer manuellement dans les clés valides (md5'd) dans la base de données et surveiller les touches actives pour un trop grand nombre d'activations. Je ne sais rien à propos de PHP alors je ne sais pas si cela va fonctionner. Cela semble-t-il suffisant? Y a-t-il des failles de sécurité flagrantes? Je vais utiliser un hôte partagé. Y a-t-il un meilleur moyen? Merci

+2

Une raison particulière pour laquelle vous voulez réinventer cette roue? Juste curieux. – allnightgrocery

+2

Pourquoi ne pas se débarrasser de quelque chose comme le Humble Indie Bundle (sans le paiement variable) et faire confiance aux utilisateurs pour payer le logiciel si c'est bon, sans DRM collant? –

+1

@Inkspeak: Avez-vous une alternative pour offrir l'OP? –

Répondre

4

Il existe actuellement plusieurs failles de sécurité flagrantes dans votre schéma. Le premier est que les utilisateurs peuvent rediriger leur trafic Internet local vers un site qui prétend être vous, mais affiche toujours un «1». La seconde est que chaque clé ne serait bonne que pour X "activations", mais si le message est perdu en transit, dommage - le compteur est toujours incrémenté. Vous avez besoin d'un moyen de valider que tout est OK; Voir la page n'est pas suffisant.

Le troisième est que pirater le programme pour penser qu'il a obtenu un "1" de votre site serait la chose la plus facile au monde.

N'implémentez pas votre propre protection contre la copie. Cela ne fera qu'agacer les utilisateurs légitimes, sans même ralentir les vrais pirates. Soit utiliser un système commercial sophistiqué, ou (encore mieux!) Essayer de frapper à n'importe quel motif qui amène les utilisateurs à voler votre programme. C'est peut-être parce que votre prix est trop élevé, ou peut-être qu'ils ne se sentent pas respectés. Les gens font des choses pour une raison.

+0

Je pense que ce sera suffisant pour arrêter le partage occasionnel des clés dans les environnements de bureau. Je ne suis pas inquiet pour les hackers sophistiqués. Sachant cela, y a-t-il autre chose qui ne va pas? J'ai acheté le tatou mais ça ne fait pas d'activations. – max111

+0

@ max111: Si vous voulez arrêter le partage de clés occasionnel, pourquoi ne pas simplement faire en sorte que l'utilisateur télécharge un binaire "version complète" verrouillé sur son compte utilisateur? Cela n'implique pas que les utilisateurs soient incapables de réinstaller leur programme en cas de panne de votre serveur. Ce qui, finalement, le fera. Êtes-vous prêt à maintenir un serveur Web stable exécutant ce logiciel pour le reste de votre vie? – Borealid

3

Vous manque une compréhension essentielle de la clé ... la clé est sous forme de MD5 qui contiendra des caractères alphabétiques et numériques, considérez ceci comme exemple:

 
3c102d6b53a7a8723e694f1417c2abfe 

Comment allez-vous générer la clé? Sur quelle base générez-vous la clé de?

moi aussi, voir dans c'est le passage de la clé du site web en utilisant le paramètre comme celui-ci:

 
www.mywebsite.com?key=3434343 

Il faudra un certain temps pour le pirate de trouver une clé ... ce avec le avènement de la vitesse du processeur et de la génération de clés .... il sera craqué en un rien de temps, plus encore, vous exposerez votre script .... ne sous-estimez pas ce que les pirates informatiques peuvent faire pour casser les scripts ... qui est quelque chose que vous n'avez pas mentionné dans votre message, aucune défense de sécurité d'aucune sorte! De plus, il n'est pas question d'utiliser des certificats de sécurité pour s'authentifier et ne pas effrayer l'utilisateur final ou pire encore, un analyseur antivirus peut signaler le site comme suspect et donc l'utilisateur final est exclu de l'application .... .

BOTTOM LINE: Ne pas essayer les systèmes de sécurité comme celui-ci car ils sont une fausse économie, de toute façon, il serait équivalent d'un papillon de nuit attiré par une flamme, lorsqu'une application « est protégé », les pirates/crackers essayer pour contourner cela indépendamment de ce que vous pensez..et vous seriez blague de penser et de vous tromper que vous êtes un programmeur génial et que votre schéma de rêve est infaillible - NE PAS ... Restez à l'écart de ce genre de schémas ....

1

Je voudrais faire écho aux points qui ont été soulevés dans les commentaires sur pourquoi vous devriez envisager de ne pas le faire, ou du moins ne pas le faire vous-même. Mais si vous voulez vraiment (et/ou à des fins éducatives), pour un système comme celui-ci, j'opterais pour un cryptage asymétrique. Fondamentalement, l'idée est de générer une paire de clés publique/privée, d'intégrer la clé publique dans votre application et de conserver la clé privée sur votre serveur. Pour vous inscrire, une copie de votre application enverra le numéro de série à votre serveur. Le script PHP sur le serveur vérifiera sa base de données pour ce numéro de série, décidera si l'enregistrement est valide, et si c'est le cas, le serveur renvoie le numéro de série chiffré avec sa clé privée. Votre programme peut alors utiliser la clé publique pour décrypter le message reçu, comparer la version décryptée au numéro de série, et si elle correspond, elle peut s'activer elle-même. Bien sûr, cela n'empêchera pas un hacker (semi-) déterminé, mais cela éliminera la manière la plus simple de contourner le schéma que vous avez donné dans votre question, à savoir rediriger la requête vers un site qui renvoie toujours un 1. 1

Si vous craignez que les numéros de série voyageant sur Internet ne soient pas cryptés, vous pouvez utiliser la clé publique pour crypter le numéro de série avant que le programme ne l'envoie au serveur. Et quand le serveur répond, au lieu de renvoyer le numéro de série crypté, il renvoie (1) un nombre aléatoire généré sur le serveur et (2) un hachage crypté du nombre aléatoire et le numéro de série. Ou utilisez HTTPS, qui fait quelque chose de similaire. Mais si vous essayez de vous protéger contre quelqu'un qui a les moyens et la motivation d'intercepter les communications entre votre programme et le serveur, vous aurez besoin de plus que ce simple système parce que cette personne a certainement des outils plus sophistiqués à sa disposition. . Dans ce cas, vous aurez besoin d'un système DRM commercial de bonne réputation pour avoir les meilleures chances de protéger votre programme. Et à ce moment-là, je me demande si ça en vaut vraiment la peine.

Questions connexes