web-dev-qa-db-fra.com

Android Le jeu continue d'être piraté

Nous avons donc vécu cela plusieurs fois maintenant, nous sortons un jeu (pour pas cher) et quelqu'un le pirate et le met sur un miroir. Nous configurons les alertes Google pour toutes nos applications, donc on nous dit quotidiennement 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 créé au hasard chaque fois que la licence est lancée avec l'ID d'appareil unique. Nous exécutons le service de vérification une fois, lorsque l'application est démarrée pour la première fois. Nous générons ensuite un hachage de 512 caractères pour la clé et la valeur stockée qui est comparée à dans SharedPreferences à partir de là.

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é consulté et recompilé sans la ligne qui initie la vérification.

De là, je ne veux pas obscurcir notre code car je l'ai déjà vu cassé. Je veux quelque chose d'un peu plus solide, et je veux aussi apprendre à le faire correctement. Je suis plus intéressé à apprendre qu'à gagner de l'argent à ce stade, car seulement 2% des personnes chercheront une version piratée.

Jusqu'à présent, seul, j'ai trouvé un générateur de nombres aléatoires qui est placé dans plusieurs zones de démarrage du jeu. Une fois initiée (disons, 1 fois sur 50), la licence est vérifiée. Je sais que cela rendrait le piratage plus difficile, car le pirate devrait éliminer chaque cas, compiler, éliminer, compiler. Cette méthode est cependant toujours crackable ... alors que proposez-vous les gars? Encore une fois, je suis vraiment intéressé par ce processus de sécurité, alors s'il vous plaît éduquez, ne transformez pas cela en une discussion sur l'obscurcissement ou la vérification périodique basée sur un horodatage.

Merci

142
BajaBob

Mon idée n'est pas une preuve de piratage, mais pourrait supprimer certains intérêts pour le piratage du jeu.

modèle Freemium

1) Rendez les 5-10 premiers niveaux gratuits afin que les gens puissent apprendre le jeu et s'amuser sans payer. Moins voudra pirater le premier niveau et le jeu se répandra encore plus par le modèle Freemium.

Shareware/levelpacks en cluster

2) Laissez une partie des niveaux de jeu ou de la logique rester en ligne. Par exemple. lorsque vous atteignez le niveau 5 ou 10 ou 15, puis téléchargez de petites pièces pour le jeu, et à chaque fois soumettez le journal de progression du jeu et validez-le par rapport aux valeurs possibles + codes de hachage. Cela pourrait peut-être permettre de fermer automatiquement les comptes piratés.

Protection contre les tricheurs furtifs

3) Vous pouvez également compter les "petits drapeaux d'avertissement" que vous placez dans le jeu. Ne vous contentez pas de vérifier la "validation" au début, pas de construire ces drapeaux dans la logique du jeu lui-même. Ne faites pas casser le gameplay, car alors personne ne le cherchera. Ensuite, lorsque l'utilisateur a atteint la fin du monstre de niveau, vérifiez s'il y avait des drapeaux d'avertissement enregistrés. Ceux-ci n'apparaîtront pas dans le jeu, donc l'utilisateur inconnu avec une édition piratée pourrait jouer pendant des heures/jours et réaliser soudainement qu'il/elle ne pourrait pas terminer le jeu ou passer au niveau suivant, car le jeu avait un "bug". Ce que l'utilisateur ne savait pas, c'est que ce bogue ne se produit que sur les clients piratés.

Conclusion

Soyez plus intelligent que les crackers. Trompez-les en leur faisant croire que le travail a été fait. Faites une protection contre la copie et sachez que les crackers les plus avancés pourront la supprimer. Mais ils ne veulent probablement pas jouer à 50 niveaux pour vérifier si la fissure fonctionne également à fond.

Une fois qu'ils ont réalisé ce problème, ils pourraient aussi commencer à le résoudre. Mais si vous divisez le jeu en packs de niveaux, vous pouvez toujours valider entre chaque téléchargement de pack. Donc, une fois que vous avez reçu des données de hachage client piraté, exécutez simplement une exception et plantez le jeu sur le client. Oups, le jeu s'est écrasé. Ne le dites pas parce que c'est piraté. Une erreur de programme peut arriver. :-)

Encore une fois, ce n'est pas une preuve de piratage. Mais cela pourrait les ennuyer suffisamment pour passer au prochain match. Enfin, vous pouvez également publier des mises à jour régulières pour le jeu et seule la dernière version devrait pouvoir "publier les enregistrements", etc., de sorte que les utilisateurs actifs devraient se mettre à jour pour rester dans la boucle.

116
BerggreenDK

Tiré de ma solution de ce post Évitez apk fissuré

Implémentez votre propre bibliothèque de licences

Je vous recommanderais également de vérifier cela à partir de l'enregistrement YouTube de Google I/O 2011:

Esquiver les pirates et arrêter les vampires

ÉDITER:

Les notes de présentation de Évasion des pirates et arrêt des vampires

Quelques points clés de base

20
TryTryAgain

Je fais de la décompilation et du piratage apk depuis un certain temps (pas warez, mais des mods et des hacks principalement vers les applications Google et le Android, respectant toujours les politiques des développeurs xda).

Une fois que vous apprenez à lire smali, c'est presque comme lire le code original Java (mais avec beaucoup plus de LOC). 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 pour en éliminer plusieurs (certaines recherches font des miracles pour trouver des morceaux de code similaires) et, même si des cycles de compilation/recompilation sont nécessaires pour les trouver, ce n'est qu'une ou deux questions minutes pour décompiler: tout est automatisé par apktool et encore plus par apkmanager.

Cela dit, ma suggestion est d'implémenter une sorte de tableau de score en ligne ou similaire, et lorsque l'utilisateur regarde le tableau de score en ligne, vous pouvez vérifier le code de hachage que vous avez implémenté et le comparer avec le compte gmail associé. De cette façon, vous pouvez signaler le piratage à Google et envoyer un méchant message à l'utilisateur du warez, expliquant pourquoi c'est illégal.

Bien sûr, un nouveau hack pourrait être implémenté pour éliminer le tableau de score, mais cela réduirait l'intérêt pour le warez.

Bonne chance.


Mise à jour

Après avoir recherché pour répondre à cette question: Injection de code dans APK (vraiment sur le mécanisme Amazon DRM), je peux dire un peu comment 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 pirater une application pas très difficile, mais extrêmement fastidieuse. Je crois que c'est un point fort: les pirates ne voudront pas passer autant de temps à faire autant de 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 renvoyer une réponse valide, bien sûr. Mais, si vous mélangez vos contrôles de hachage actuels avec une sorte de contrôle en ligne dispersé parmi vos méthodes, je pense que les chances de le pirater peuvent être considérablement réduites.

20
Aleadam

Je sais que vous n'êtes pas vraiment dans l'obscurcissement, mais je dois vraiment réagir à cela:

De là, je ne veux pas obscurcir notre code car je l'ai déjà vu cassé. Je veux quelque chose d'un peu plus solide, et je veux aussi apprendre à le faire correctement.

ProGuard est très fiable dans mon expérience, et cela bien que j'utilise quelques fonctionnalités avancées telles que AIDL et du code natif qui appelle Java .. Il faut un peu de travail pour lire la documentation et faites les choses correctement, mais une fois que vous y êtes, ProGuard est extrêmement fiable et optimise également votre application.

Les astuces de sécurité/cryptographie personnalisées sont bonnes, mais sans obstruction, c'est comme jeter une pierre dans l'eau à mon humble avis.

J'ai utilisé ProGuard en production pendant de nombreux mois, et cela fonctionne parfaitement.

Si vous êtes en apprentissage, lisez attentivement le manuel ProGuard, expérimentez-le et inspectez ses journaux de sortie.

8
olivierg

La chance, qu'il y ait plus de programmeurs talentueux que VOUS (s'applique à tous les programmeurs), est de 100%. Et si cela est vrai, vous ne pouvez pas résoudre le piratage. Mais vous pouvez y consacrer autant de temps et d'efforts pour faire faillite.

Si vous voulez gagner de l'argent sérieux, vous devez faire des recherches sur votre groupe d'utilisateurs cible et les sciences du comportement. Vous devez inciter les utilisateurs à jouer qui rapportent de l'argent neuf, et c'est tout.

De plus, vous vous êtes trompé. Les pirates sont les membres les plus actifs de votre base d'utilisateurs, vous vous comportez simplement d'une manière que vous ne vouliez pas.

Prenez les jeux Zynga sur Facebook par exemple, pensez-vous que vous êtes piraté? - Bien sûr, et environ +100 000 joueurs ne jouent que parce que tu peux utiliser des bots, qui automatisent tout.

Avoir un énorme botnet de base d'utilisateurs actifs de personnes réelles, donne envie aux joueurs de type archiveur de jouer au jeu - et si ton jeu, et ça a l'air cool, Avarage Joe voudra également jouer. Si Avarage Joe joue, alors ses amis pourraient vouloir jouer, et ton ne se souciera probablement de rien d'autre, alors être meilleur que son ami, tuer le temps ou avoir quelque chose à discuter. Les amis Avarage Joe seront très probablement prêts à payer pour être meilleurs que Joe, mais ils aimeraient plutôt investir dans quelque chose qui les rende meilleurs.

En outre, si la valeur réelle est de jouer au jeu gratuitement, les utilisateurs qui utilisent la version piratée gratuite n'auront probablement jamais payé pour cela. Mais tu es Avarage Joes et leurs amis pourraient le faire. C'est donc comme la publicité la moins chère que vous puissiez avoir. Si vous voulez faire de l'argent avec votre large base d'utilisateurs, alors faites simplement de nouvelles versions du jeu avec de petits changements de niveaux et de graphiques.

4
Margus

Le piratage sera toujours un problème. En gros, les crackers sont meilleurs à jouer à ce jeu Sécurité bien que l'obscurité que les développeurs.

3
rook

À mon avis, l'un des éléments clés est d'étaler le code afin qu'il ne soit pas tout en un seul endroit. Si vous avez une fonction appelée LicenseChecker.checkLicense () qui récupère la licence et la vérifie, vous pouvez être sûr qu'elle sera rapidement désactivée.

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), alors trouvez quelque chose de bizarre. Dans onCreate () d'une activité, vous obtenez l'ID de licence. Dans onResume (), vous obtenez une autre valeur pour la comparer. Peut-être créer un fil et y faire quelques vérifications. Et puis, un autre morceau de code non pertinent (peut-être le contrôle du joueur) pourrait ramasser la valeur et la comparer et stocker le résultat quelque part. Ensuite, 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 dois dire d'emblée que cela peut vous causer des maux de tête - évidemment, le code encombré et méchant est plus difficile à déboguer et susceptible de provoquer des erreurs. Dans le pire des cas, vous créez des faux positifs dans des applications achetées légitimement.

Et, bien sûr, tout peut être rétro-conçu - une fois que les crackers trouvent l'endroit où l'application est désactivée, ils retracent la valeur qui est lue. Ils pourraient alors retracer où il est stocké, et retracer cela ..... ou, beaucoup plus facile, ils peuvent simplement désactiver la vérification finale (c'est pourquoi j'ai recommandé 3 endroits différents, tous les déclenchements étant retardés). La sécurité n'est aussi bonne que le maillon le plus faible.

Vous ne pourrez pas arrêter le piratage. Votre meilleur pari est de retarder la diffusion d'une copie piratée jusqu'à ce que le battage médiatique initial concernant votre application se soit calmé.

2
EboMike

Quelle question intéressante et troublante. :-) Comme exercice, vous pourriez essayer de publier une application via Amazon; ils ont leur propre mécanisme DRM; Je me demande si cela fonctionne mieux que ProGuard ...

2
George Freeman

Tout d'abord, je ne PAS me considère comme un pro dans le domaine de la sécurité SW, mais:

Je pense qu'une chose importante est de laisser l'application dépendre en partie de la vérification de signature. Ne le laissez pas affecter immédiatement, mais laissez-le définir des indicateurs ou modifier certaines valeurs. plus tard, utilisez ces drapeaux, vérifiez-les, laissez leur absence/inexactitude provoquer une exception d'une sorte qui mettra fin à l'application peut-être. Tant que la vérification de signature n'est pertinente que pour le moment, il est facile de la 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. De plus, selon moi, tous les contrôles ne devraient pas appeler la même routine pour la sanction, car cela facilitera également la recherche du mécanisme de protection et sa suppression.

Bien sûr, la sanction à prendre en cas de SW illégal peut varier, vous voudrez peut-être planter l'application lorsqu'elle est utilisée illégalement, mais vous pourriez aussi bien vouloir la faire fonctionner et n'envoyer qu'un message demandant à l'utilisateur d'acheter une copie légale de la demande.

Si c'est juste ce que vous ne vouliez pas entendre, alors je suis désolé pour votre temps :)

1
MByD

Les utilisateurs d'Android vont juste avoir à accepter la douleur des foyers téléphoniques constants. La seule application Android Android sécurisée est une application Android Android. Toujours connectée).

Ceci est en grande partie dû au refus de Google de verrouiller l'installation, comme Apple has. On IOS vous devez jailbreaker le téléphone. Android vous pouvez charger n'importe quel APK sur un stock, installation en usine.

Gardez une partie/la plupart/tout votre contenu sur le serveur; le livrer en morceaux; valider la licence/session à chaque appel.

0
yetimoner

Il sera extrêmement difficile d'inhiber ce genre de comportement ov. Tout ce qui est géré côté client est piratable en utilisant la décompilation et le modding APK, l'édition de mémoire avec un logiciel tel que Game Guardian ect.

La seule façon de voir à quel point le contourner serait de créer un jeu en ligne à la place. Ou faites gérer certaines fonctions en ligne. Ou si un cryptage anti-sabotage comme denuvo est disponible pour Android/iOS.

0
Techinator