Jeu Android continue de se faire pirater [fermé]
donc nous avons traversé cela plusieurs fois maintenant, nous sortons un jeu (pour pas cher) et quelqu'un le pirate et le met sur un miroir. Nous mettons en place des alertes Google pour toutes nos applications, de sorte que nous sommes informés tous les jours qui fait le piratage. Jusqu'à présent, nous avons mis en œuvre le service de licence comme Google l'a suggéré, notre sel est fait au hasard chaque fois que la licence est lancée avec L'ID de périphérique unique. Nous exécutons le service de vérification Une fois, lorsque l'application est lancée pour la première fois. Nous produisons alors un 512 caractères de la clé et la valeur qui est comparée à SharedPreferences.
maintenant, je sais que vérifier une fois est probablement l'endroit où l'application est bloquée. Notre bytecode a très probablement été examiné et recompilé sans la ligne qui initie le contrôle.
D'ici, Je ne veux pas obscurcir notre code comme je l'ai déjà vu cassé. Je veux quelque chose d'un peu plus solide, et je veux aussi apprendre comment le faire correctement. Je suis plus intéressé à apprendre qu'à gagner de l'argent à ce stade puisque seulement 2% des gens vont jamais chercher une version piratée.
jusqu'à présent, seul, j'ai trouvé un générateur de nombres aléatoires qui est placé dans plusieurs domaines de démarrage du jeu. Lorsqu'elle est initiée (par exemple, 1 fois sur 50), la licence est vérifiée. Je sais que ça le rendrait plus difficile à pirater parce que le pirate devrait éliminer chaque cas, compiler, éliminer, compiler. Ce méthode cependant, est toujours fissurable...alors que suggérez-vous les gars? Encore une fois, je suis vraiment intéressé par ce processus de sécurité, alors s'il vous plaît éduquer, ne transformez pas cela en une discussion sur l'obscurcissement ou la vérification périodique basée sur un horodatage.
Merci
11 réponses
mon idée n'est pas une preuve de hacker, mais pourrait supprimer une partie de l'intérêt pour le piratage du jeu.
modèle Freemium
1) Faire les 5-10 premiers niveaux GRATUIT afin que les gens peuvent apprendre le jeu et avoir du plaisir sans payer. Moins voudront pirater le premier niveau et le jeu se propagera encore plus par modèle Freemium.
Shareware/cluster levelpacks
2) Laisser une partie des niveaux de jeu ou logique rester en ligne. Par exemple. lorsque vous atteignez le niveau 5 ou 10 ou 15, puis télécharger de petites parties pour le jeu, et à chaque fois soumettre le progress-log à partir du jeu et valider cette contre des valeurs possibles + hashcodes. Cela permettrait peut-être de fermer automatiquement les comptes piratés.
Stealth tricheur protection
3) vous pouvez également compter " petits drapeaux d'avertissement" que vous placez dans le jeu. Il ne suffit pas de vérifier la "validation" au début, pas de construire ces drapeaux dans la logique du jeu elle-même. Ne le faites pas casser le gameplay, parce que alors personne ne le cherchera. Ensuite, lorsque l'utilisateur atteint la fin du niveau monstre, vérifier s'il y avait tout enregistré des drapeaux. Ceux - ci ne se montreront pas à l'intérieur du jeu, de sorte que l'utilisateur ignorant avec une édition piratée pourrait jouer pendant des heures / jours et se rendre compte soudainement qu'il / elle ne pouvait pas finir le jeu ou d'avance à niveau suivant, parce que le jeu avait un "bug". Ce que l'utilisateur ne savait pas, c'était que ce bug ne se produisait que sur les clients piratés.
Conclusion
soit plus intelligent que les crackers. Faites-les croire que le travail a été fait. Faites une protection de Copy et sachez que les crackers les plus avancés seront en mesure de l'enlever. Mais ils ne veulent probablement pas jouer 50 niveaux pour vérifier si le crack fonctionne aussi tout le chemin.
une fois ils réalisent ce problème, ils pourraient commencer à le résoudre aussi. Mais si vous divisez le jeu en paquets de niveau, vous pouvez encore valider entre chaque téléchargement de paquet. Donc, une fois que vous recevez des données de hachage de client piraté, alors exécutez juste une exécution et plantez le jeu sur le client. Oups le jeu s'est écrasé. Ne dis sa parce que sa piraté. Une erreur de programme peut se passer. :- )
encore une fois, ce n'est pas une preuve de hacker. Mais ça pourrait les ennuyer assez pour passer au prochain match. Enfin, vous pouvez mettez également des mises à jour régulières pour le jeu et seule la dernière version devrait être en mesure de "poster les enregistrements", etc. les utilisateurs actifs devront donc se mettre à jour pour rester dans la boucle.
j'ai fait de l'apk decompiling et du piratage depuis un certain temps (pas warez, mais mods et hacks principalement sur les applications google et le cadre android, respectant toujours les politiques XDA-développeurs).
une fois que vous apprenez à lire smali, c'est presque comme lire le code java original (mais avec beaucoup plus de LOCs). Ainsi, tout code que vous ajoutez pour vérifier les clés peut être trouvé et supprimé ou remplacé. Vous n'avez même pas besoin de recompiler à chaque fois afin d'éliminer plus d'un (certaines recherches ne même si des cycles de compilation/recompilation sont nécessaires pour les trouver, il ne faut qu'une ou deux minutes pour décompiler: tout est automatisé par apktool et encore plus par apkmanager.
cela dit, je vous suggère de mettre en œuvre une sorte de tableau de notation en ligne ou similaire, et lorsque l'utilisateur regarde le tableau de notation en ligne, vous pouvez vérifier le code de hachage que vous avez mis en œuvre et de le comparer avec le gmail associé compte. De cette façon, vous pouvez signaler le piratage à google et envoyer un message méchant à l'utilisateur de la warez, en expliquant pourquoi c'est illégal.
bien sûr, un nouveau piratage pourrait être mis en œuvre pour éliminer la table de notation, mais cela réduirait l'intérêt pour les warez.
bonne chance.
mise à jour
après des recherches pour répondre à cette question: Injection de code dans APK (vraiment sur le mécanisme DRM Amazon), je peux dire un peu sur la façon dont Amazon protège les applications: il comprend des méthodes pour vérifier la validité de l'installation partout (vous pouvez voir un exemple de la façon dont ils le font dans ma réponse à cette question). Cela rendra toute tentative de hacker une application pas très difficile, mais extrêmement fastidieux. Je crois que c'est un point fort: les pirates ne voulez pas passer trop de temps à faire beaucoup les tâches répétitives: c'est pas difficile et c'est ennuyeux . Le principal défaut que je vois dans cette approche est la possibilité de pirater L'application Amazon elle-même pour toujours retourner une réponse valide, bien sûr. Mais, si vous mélangez vos vérifications de hachage actuelles avec une sorte de vérification en ligne dispersée parmi vos méthodes, je crois que les chances qu'il soit piraté peut être drastiquement réduit.
tiré de ma solution de ce post éviter apk fissuré
mettre en Œuvre votre propre licence de la bibliothèque
je vous recommande aussi de vérifier ce de Google I / O 2011 enregistrement YouTube:
Éluder les Pirates et l'Arrêt des Vampires
EDIT:
Les Notes de Présentation de l' Éluder les Pirates et l'Arrêt des Vampires
de base keypoints
- modifier la LVL
- mettre en Œuvre LVL Résistance à la fraude
- Use obfuscation
- ajouter réflexion
je sais que vous n'êtes pas vraiment dans l'obscurcissement, mais j'ai vraiment besoin de réagir à cela:
D'ici, Je ne veux pas obscurcir notre code tel que je l'ai vu s'est brisé avant. Je veux quelque chose d'un peu plus solide, et je veux aussi savoir comment le faire correctement.
ProGuard est très fiable dans mon expérience, et ce bien que j'utilise un couple de fonctionnalités avancées telles que AIDL et un certain code natif qui appelle Java méthode.. Il faut un peu de travail pour lire la documentation et faire les choses correctement, mais une fois que vous êtes là ProGuard est extrêmement fiable et optimise également votre application.
de sécurité Personnalisé/cryptographiques astuces sont bonnes, mais sans dissimulation c'est comme jeter une pierre dans l'eau, à mon humble avis.
J'ai utilisé ProGuard dans la production pendant de nombreux mois, et il fonctionne juste parfaitement.
si vous êtes dans l'apprentissage, alors lire le ProGuard manuel soigneusement, expérimenter avec elle, et inspecter ses journaux de sortie.
Chance, qu'il ya plus de programmeurs talentueux que vous (s'applique à tous les programmeurs), est de 100%. Et si c'est vrai, vous ne pouvez pas réparer le piratage. Mais vous pouvez passer autant de temps et d'efforts à faire faillite.
si vous voulez gagner de l'argent sérieux, vous devez faire des recherches sur votre groupe d'utilisateurs cibles, et la science du comportement. Vous avez besoin de faire jouer les utilisateurs qui apportent de l'argent neuf, et c'est tout.
D'ailleurs, vous avez tout faux. Les Hackers sont les membres les plus actifs de votre base d'utilisateurs, votre juste se comporter d'une manière que vous ne les aviez pas l'intention.
prenez Zynga games sur Facebook par exemple, pensez-vous que votre obtenir piraté? - Bien sûr, et environ + 100000 joueurs seulement jouer, parce que thy peut utiliser des bots, qui automatisent tout.
ayant une énorme base d'utilisateurs actifs botnet de personnes réelles, fait archiver type gamers veulent jouer le jeu - et si votre jeu, et il semble cool, puis Avarage Joe sera également voulez jouer. Si Avarage Joe joue, alors ses amis pourraient vouloir jouer, et tu ne t'en soucieras probablement pas autre chose, alors être meilleur que son/sa ami (e), tuer le temps ou avoir quelque chose à discuter. Avarage Joe amis seront probablement prêts à payer pour être mieux que Joe, mais plutôt ton aimerais investir dans quelque chose qui les rend capables d'être mieux.
en outre si la valeur réelle est de jouer le jeu gratuitement, puis les utilisateurs qui utilisent la version piratée libre, will n'aurait probablement jamais payé pour ça. Mais tu es Avarage Joes et leurs amis pourraient bien. C'est la pub la moins chère que tu puisses avoir. Si vous voulez faire de l'argent de votre grande base d'utilisateurs, alors il suffit de faire de nouvelles versions du jeu avec de petits changements aux niveaux et les graphiques.
la piraterie sera toujours un problème. En gros crackers sont mieux à jouer ce sécurité bien que L'obscurité jeu que les développeurs.
quelle question intéressante et dérangeante. :- ) Comme un exercice, vous pourriez essayer de libérer une application par Amazon; ils ont leur propre mécanisme de DRM; je me demande si cela fonctionne mieux que ProGuard...
un des éléments clés à mon avis est d'étaler le code afin qu'il ne soit pas tout en un seul endroit. Si vous avez une fonction appelée Licencechecker.checkLicense () qui récupère la licence et la vérifie, vous pouvez être sûr qu'elle sera désactivée rapidement.
le seul avantage que vous avez est que les crackers ne peuvent pas voir les commentaires de votre code (et, si vous obscurcissez, les noms de méthode/variable), donc venir avec quelque chose de bizarre. Dans l'onCreate() d'une activité, vous obtenez d'identification de licence. Dans onResume(), vous obtenez une autre valeur pour vérifier. Peut-être créer un fil et faire quelques vérifications. Et puis, un autre morceau de code non pertinent (peut-être le contrôle du joueur) pourrait prendre la valeur et le comparer et stocker le résultat quelque part. Puis trois autres morceaux de code non pertinents vérifieront tous indépendamment cette valeur et désactiveront votre application si elle ne correspond pas.
maintenant, je devrais dire d'emblée que cela peut causer des maux de tête pour vous-même - évidemment, le code encombré et méchant est plus difficile à déboguer et susceptible de causer des erreurs. Dans le pire des cas, vous créez des faux positifs dans des applications légitimement achetées.
et, bien sûr, tout peut être inversé-une fois que les pirates trouvent l'endroit où l'application est désactivée, ils retracent la valeur qui est lu à partir. Ils pourraient ensuite remonter où il est stocké, et la trace de dos..... ou, beaucoup plus facile, il suffit de désactiver la vérification finale (c'est pourquoi je recommandé 3 endroits différents, tous déclenchement retardé). La sécurité ne vaut que le maillon faible.
vous ne pourrez pas arrêter la piraterie. Votre meilleur pari est de retarder la diffusion d'une copie piratée jusqu'à ce que le battage initial sur votre application se soit calmé.
D'abord, je fais pas je me considère comme un pro dans le domaine de la sécurité de SW que ce soit, mais:
je pense qu'une chose importante est de laisser la demande dépendre dans une certaine partie(s) du contrôle de la signature. Ne le laissez pas affecter immédiatement, mais laissez-le définir quelques drapeaux ou changer certaines valeurs. plus tard, utilisez ces indicateurs, vérifiez-les, laissez leur absence/inexactitude causer une exception d'une sorte qui mettra fin à l'application peut-être. Aussi longtemps que le contrôle de signature n'est pertinent qu'à l'heure actuelle, il est facile de le contourner, de supprimer la ligne, une fois qu'elle touche plus de zones dans le code, votre application devient plus difficile (ou moins facile...) pirater. Je pense également que tous les contrôles ne devraient pas appeler la même routine pour la sanction, car cela permettra également de trouver facilement le mécanisme de protection et d'y mettre fin.
bien sûr, la sanction à prendre dans les cas de SW illégale peut varier, vous pourriez vouloir planter l'application quand il est utilisé illégalement, mais vous pouvez aussi bien le garder en marche, et envoyer seulement un message qui demande à l'utilisateur d'acheter une copie légale de l'application.
Si c'est tout ce que vous ne vouliez pas l'entendre, alors je suis désolé pour votre temps :)
utilisateurs Android vont juste avoir accepter la douleur des téléphones-maisons constants. La seule application Android sécurisée est une application Android toujours connectée.
C'est, en grande partie, en raison du refus de Google de verrouiller l'installation, comme Apple A. Sur IOS, vous devez libérer le téléphone. Sur Android, vous pouvez charger n'importe quel APK sur un stock, installation d'usine.
Gardez une partie / la plupart/tout votre contenu sur le serveur; livrez - le en morceaux; validez le licence/session sur chaque appel.
il sera incroyablement difficile d'inhiber ce genre de comportement. Tout ce qui est manipulé du côté client peut être piraté en utilisant APK decompilation et modding, en éditant la mémoire avec un logiciel tel que Game Guardian ect.
le seul moyen que je puisse voir comment se déplacer partiellement, serait de faire un jeu en ligne à la place. Ou faire traiter certaines fonctions en ligne. Ou si un cryptage anti-altération comme denuvo est disponible pour Android / iOS.