Création de logiciels commerciaux Java (DRM)

j'ai l'intention de fabriquer des logiciels qui seront vendus sur internet. J'ai seulement créé open-source avant, donc je n'ai vraiment aucune idée de comment le protéger d'être craqué et distribué comme warez. En gardant à l'esprit que je sais comme deux programmes qui ne sont pas fissurés ou pas vraiment utiles, j'ai décidé que la seule façon plus ou moins fiable peut ressembler à ceci:

  1. Se connecter à un serveur et fournir des informations de licence et une sorte d'information de synthèse du matériel
  2. si tout va bien, le serveur renvoie quelques parties manquantes cruciales du programme liées à ce certain pc ainsi que la limite d'utilisation de dire 2 jours
  3. ce truc n'est pas enregistrée sur le disque dur, de sorte qu'il est téléchargé à chaque fois que le programme démarre, si le programme s'exécute plus de 2 jours, les données sont téléchargées à nouveau
  4. si la même information est utilisée à partir de différents ordinateurs, suspendre le compte du client

Que pensez-vous de cela? Il peut sembler un peu à restrictif, mais je ferais mieux de faire moins de ventes au début puis éventuellement voir mon précieux tueur application téléchargée gratuitement. Quoi qu'il en soit, j'ai d'abord besoin de quelques théories de base/tutoriels/guides sur la façon de s'assurer que l'utilisateur n'utilise une certaine application Java que s'il a payé pour cela, alors s'il vous plaît En suggérer quelques-uns.

Merci

17
demandé sur Fluffy 2010-03-18 01:40:24

14 réponses

je travaille pour une société de vente protégé Java logiciel.

Je ne commenterai pas le schéma d'authentification de l'utilisateur, mais je peux commenter la vérification de licence en ligne.

Ne pas faire de même "de travail pour deux jours": c'est ainsi que je pirate la plupart des logiciels... Machine virtuelle réglée "en arrière dans le temps" et à l'extérieur pare-feu de sorte qu'il ne "Téléphone plus à la maison" (c'est-à-dire: seulement lui permettant de contacter le serveur une fois, pour obtenir la clé d'essai), toujours remaged à partir de la point où le logiciel a été fraîchement installé et bingo, le procès de 30 jours (ou deux jours d'essai) est devenu un procès à vie. Pourquoi dois-je faire? Pour apprendre à mieux protéger notre app ;) (ok, ok, je le fais juste pour le fun aussi)

ce que nous faisons dans notre logiciel Java commercial est de vérifier la licence à chaque démarrage.

nous avons des centaines de clients et personne ne s'est jamais plaint. Pas une seule fois. Nous produisons une classe unique à chaque course, qui est différente à chaque exécuter, qui dépend à la fois des choses uniques pour ce lancement du côté client et des choses générées une fois du côté serveur.

En outre que l'application de communiquer avec votre serveur à chaque lancement est un excellent moyen de recueillir de l'analytics: télécharger le procès ratio nb moyen lance par essai, etc. Et ce n'est pas méchant plus que d'avoir un Urchin/Google JavaScript tracker sur chaque page web est méchant.

Simplement faire comprendre aux gens que votre logiciel fonctionne en ligne vérification de la licence: nous avons une énorme case à cocher qui s'affiche ou qui s'affiche: "vérification de la licence en ligne: OK / échec". Et c'est tout. Les gens savent qu'il ya une case. Si ils ne l'aiment pas, ils vont utiliser inférieur produits concurrents et la vie est bonne.

les Gens sont habitués à vivre dans un monde branché.

Combien de fois pouvez-vous pas accéder à GMail parce que votre connexion Internet est en panne? Combien de fois pouvez-vous pas accédez à FaceBook ou ainsi parce que votre connexion Internet est vers le bas?

Point est: faire comme beaucoup de calculs que possible dépendante sur le côté serveur:

  • vérification du permis
  • enregistrer les préférences de l'utilisateur
  • sauvegarde des données générées par votre application
  • etc.

personne ne se plaindra. Vous aurez 0,1% de vos utilisateurs se plaindre et de toute façon vous ne voulez pas de ces utilisateurs: ils sont ceux qui se plaindraient d'autres choses et post des commentaires négatifs sur votre application en ligne. Vous avez intérêt à ce qu'ils n'utilisent pas votre logiciel du tout et se plaignent du fait qu'il nécessite une connexion Internet toujours-sur (qui 99,99% de votre cible démographique et donc ils ne se soucient pas de la plainte) plutôt que de réellement les faire utiliser l'application, et se plaindre d'autres choses liées à votre application.

en ce qui concerne la décomposition, .la classe peut généralement être décompilé .java sauf si vous utilisez un code flow obfuscator qui produit un bytecode VALIDE mais impossible être générés à partir de .fichier java (il est donc impossible de revenir valide .fichier java).

L'obfuscateur de chaîne de caractères aide à le rendre plus difficile à comprendre.

code Source obfuscator aide à le rendre plus difficile à comprendre.

Bytecode obfuscator comme le logiciel libre rend plus difficile (et produit du code plus rapide, particulièrement perceptible dans le monde mobile) de comprendre.

si vous n'expédiez que Windows / Linux, vous pouvez utiliser un convertisseur Java-natif comme Excelsior Jet (pas libre et un peu cher pour les startups, mais il produit du code natif à partir de laquelle vous ne peut pas trouver le .fichiers java à l'arrière).

comme une drôle de note de côté, vous verrez des gens qui essaient de jouer avec votre serveur en ligne... À environ 30 bêta-testeurs, nous avions déjà des gens (que nous savons où une partie du procès) qui essayaient de pirater nos serveurs en ligne.

16
répondu SyntaxT3rr0r 2010-03-17 23:30:36

je suis désolé de vous tourner vers le bas, mais premier vous devez avoir une idée de ce que vous voulez construire, alors vous devriez prouver que votre idée non seulement fonctionne, mais c'est aussi aimé par les utilisateurs, au point où ils envie pour le pirater. Troisièmement, vous devez vous assurer que le temps que vous investissez pour le rendre "sûr" vaut réellement la valeur de l'application.

si vous le vendez pour un dollar, et vous vendez seulement dix copies, et vous avez dépensé 100 heures de sécurité, vous faites le calcul et dites-moi si votre temps est digne de ce peu d'argent.

le message à emporter est le suivant: tout peut être craqué ou copié. À la fin, il y a des gens beaucoup plus brillants que nous qui faisons cela (iPhone cracking, TV Numérique, jeux, etc) et personne n'a trouvé la balle d'argent. La seule chose que vous pouvez faire c'est de plus fort pour casser votre application (souvent au détriment de la convivialité, de la facilité d'installation, et en coupant les Coins pour une certaine utilisation scénario.) Se demandant si ça vaut le souci c'est toujours un bon point de départ.

10
répondu lorenzog 2010-03-17 23:11:58

Ne pas déranger.

l'industrie du jeu Lutte contre la piraterie depuis des décennies. Les jeux multijoueurs en ligne avec un serveur central nécessitent généralement un abonnement. Ce modèle résiste assez bien au piratage. Presque tous les autres jeux sont fortement piratés, malgré d'innombrables tentatives de DRM.

votre application sera fissurée et piratée, peu importe la langue dans laquelle vous l'écrivez et les outils que vous utilisez pour l'empêcher. Si votre DRM fonctionne vraiment, les gens qui ont piraté il ne veut toujours pas l'acheter. De plus, les utilisateurs légitimes préféreront d'autres produits qui n'ont pas de DRM intrusive. S'il n'y a pas de produits concurrents et que le vôtre a un marché, quelqu'un en créera un.

6
répondu Zak 2010-03-17 23:14:02

à moins que votre application ne soit spécifiquement basée sur le web, vos utilisateurs trouveront qu'il est très difficile d'avoir besoin d'une connexion internet pour accéder au produit. Ce que vous suggérez fonctionnera, à moins qu'il ne soit cassé, comme tous les systèmes DRM le font. Je comprends la volonté de protéger votre propriété intellectuelle, mais avec de nombreuses entreprises comme exemples, ces systèmes sont généralement brisés ou le produit fait bien pire à cause d'eux.

3
répondu zellio 2010-03-17 23:10:39

j'ai vraiment aucune idée de comment la protéger contre les fissures et distribué sous forme de warez.

tout d'abord, vous feriez mieux de choisir une langue autre que Java, si c'est un problème. C'est pourquoi le C++ est encore bien vivant dans le monde des applications commerciales. A moins que vous n'utilisiez un compilateur Java pour natif exe, Je reconsidérerais Java pour des raisons de protection IP.

d'ailleurs, même C++ n'est pas insensible à la fissuration, mais IP prorection vs. fissuration sont deux préoccupations importantes.

2
répondu codenheim 2010-03-17 22:50:51

C'est une tâche très délicate, surtout avec quelque chose qui tourne en VM. Je dirais que vous pourriez penser dans la bonne direction. En l'occultant pour le rendre raisonnablement difficile à modifier, on pourrait empêcher les gens de contourner les contrôles de licence intégrés.

cependant, en fin de compte, si votre application est autonome, elle sera toujours fissurable. Si vous pouvez construire pour qu'il utilise services vous fournir, que vous pouvez probablement commander il est d'utilisation.

1
répondu Tomislav Nakic-Alfirevic 2010-03-17 22:48:40

pour paraphraser un Mr Jeff Atwood, il est préférable de rendre plus facile pour votre client de vous payer qu'il ne l'est de craquer votre application. En d'autres termes, je pense que vous attaquez le mauvais problème. Faites l'achat de votre produit vraiment facile et puis Vos clients ne sentiront pas qu'ils ont besoin d'aller à l'effort de cracker.

1
répondu mR_fr0g 2010-03-17 23:15:34

je voudrais jeter un oeil à la réaction du Spore de jeu avant de décider sur un régime de licence. Ils l'ont eu téléphone à la maison, et seulement permis tant d'installations, etc. etc. etc. Spore était censée être leur "Killer App" et il a vraiment eu un moment difficile simplement à cause de la licence. Vous dites que vous êtes prêt à avoir moins de ventes que de voir les gens l'utiliser gratuitement, mais vous pouvez vouloir faire attention à ce que vous demandez. J'ai vraiment hâte de spores (et mes enfants), mais je n'ai jamais Je l'ai acheté à cause du plan DRM.

peu importe ce que vous faites, il sera fissuré en très peu de temps, surtout si le programme vaut vraiment quelque chose.

si vous optez pour un système de licence, simplifiez-le et utilisez-le de manière à ne pas punir ceux qui ont réellement payé pour votre logiciel. En outre, j'éviterais toute vérification de style Téléphone-maison, de cette façon vos clients seront en mesure de continuer à utiliser le logiciel même si vous ne voulez pas continuer à payer pour ce domaine 3 ans à partir de maintenant.

1
répondu digitaljoel 2010-03-17 23:16:30

je vois une faiblesse spécifique dans votre exemple, en plus du commentaire que la plupart des gens ont déjà mis en place que la GDN est difficile(impossible) à mettre en œuvre et souvent simple à contourner.

Dans votre deuxième point:

si tout va bien, le serveur renvoie certaines parties manquantes cruciales de le programme lié à ce certain pc avec la limite d'utilisation de say 2 jours

cette limite de 2 (ou X) jours sera très probablement extrêmement simple à contourner, cela ne serait que quelques minutes pour trouver et patch (crack).

si vous voulez vraiment avoir un modèle de DRM la seule façon raisonnable d'y aller est de mettre à une partie importante de l'application en tant que service web et exiger une connexion constante de la part des utilisateurs.

Avant d'essayer de tout cela, assurez-vous de lire Exploitation De Logiciels et vous y réfléchirez à deux fois avant d'essayer de faire de la DRM.

1
répondu Rickard von Essen 2010-03-17 23:22:11

je pense que, compte tenu du contexte, la forme de protection la plus efficace pour le moment serait l'approche de démonstration/licence limitée: cela donnerait aux gens le temps de tomber amoureux de votre application afin qu'ils soient prêts à payer pour elle, tout en empêchant la copie occasionnelle.

une fois que vous savez que votre application a frappé grand, et que les crackers siphon provably une partie importante de vos gains possibles, alors vous pouvez encore ajouter des chèques supplémentaires.

une Autre chose à considérer est où votre application va être utilisée: si c'est quelque chose que les gens mettent sur leurs ordinateurs portables à utiliser sur la route, la connectivité réseau n'est pas une donnée.

1
répondu Lars 2010-03-17 23:43:37

C'est une des plus dures DRM, je n'ai jamais entendu parler de, vos utilisateurs détestent.

aussi, gardez à l'esprit qu'Il ya beaucoup de bons décomposeurs Java là-bas en raison de la nature de la langue et quelqu'un déterminé assez pourrait juste trouver des zones du programme traitant de votre DRM et contourner/désactiver il puis le recompiler ( selon ceci une recompilation serait irréaliste)... donc, vous auriez même à sortir de votre chemin pour mettre en œuvre votre code aussi complexe que possible pour empêcher un pirate de succès. (Ce qui pourrait être fait avec un de ces outils de brouillage de code qu'ils peuvent avoir là-bas.)

0
répondu defectivehalt 2017-05-23 11:46:49

tant qu'il s'agit d'une application Internet, vous pouvez la restreindre de cette façon. À moins de cracker le programme, cela fonctionnerait très bien sauf pour les attaques de replay.

par exemple, si je peux capturer le trafic qui va vers votre serveur, et simplement le rejouer sur mon programme à chaque fois, je suis toujours bon. Par exemple, je pourrais créer mon propre "serveur web" et m'assurer que le programme s'y connecte à la place de votre serveur.

0
répondu Marcus Adams 2010-03-17 23:46:43

vous devriez lire" logiciel clandestin " de Collberg et Nagra. Ce livre est vraiment bon pour vous aider à comprendre comment les mécanismes de protection des logiciels fonctionnent (tels que code obfuscation, filigrane, birthmarking, etc...).

comme l'a dit lorenzog, la sécurité totale n'existe pas et la sécurité des logiciels est comme une course constante entre les vendeurs de logiciels et les pirates.

vous devriez utiliser des transformations obscurcissantes bon marché (de sorte que les frais généraux qu'ils encourent ne tue pas le performances) pour empêcher autant d'attaquants (rappelez-vous que la plupart d'entre eux sont des enfants de script) que possible de "voler" vos algorithmes de tueur ou des données secrètes.

si vous êtes prêt à pousser la sécurité plus loin, vous pouvez marquer vos algorithmes et filigrane vos copies afin de trouver qui a divulgué votre création. Mais même si vous le faites, cela ne signifie pas que votre logiciel est 100% sécurisé. De plus, le temps que vous passerez à ajouter ces mécanismes pourrait ne pas valoir la peine de l'effort.

Ces les concepts sont très bien expliqués dans le livre que j'ai mentionné avant et qui vaut la peine d'être lu.

0
répondu tchufa 2010-03-17 23:56:25

si j'avais assez de points de réputation, je voterais cette question. La protection des logiciels commerciaux est une perte de temps, d'argent et d'efforts pour de nombreuses raisons. Concentrez-vous sur la fabrication d'un logiciel qui en vaut la peine. Si votre logiciel est assez populaire pour maintenir large ensemencement par des pirates, vous êtes probablement assez réussi à ce point que vous ne serez même pas vous soucier du piratage. De toute façon, les crackers crackent la protection du logiciel surtout pour s'amuser. Plus votre protection est forte, mieux le défi sera relevé. les cadeaux et plus ils veulent le déchiffrer. Votre meilleur effort vous coûtera des milliers, vous prendra des mois, et sera résolu en seulement quelques jours.

0
répondu Eric 2010-03-29 01:26:24