Le jeu Android continue d'être piraté [fermé]


143

Nous avons donc traversé cela plusieurs fois maintenant, nous sortons un jeu (pour pas cher) et quelqu'un le pirate et le met sur un miroir. Nous configurons des alertes Google pour toutes nos applications, afin que nous soyons 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 créé au hasard chaque fois que la licence est initiée avec l'ID d'appareil unique. Nous exécutons le service de vérification une fois, lorsque l'application est lancé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 à 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é examiné et recompilé sans la ligne qui lance la vérification.

De là, 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 à le faire correctement. Je suis plus intéressé à apprendre qu'à gagner de l'argent à ce stade, car seulement 2% des gens chercheront un jour une version piratée.

Jusqu'à présent, par moi-même, j'ai mis au point un générateur de nombres aléatoires qui est placé dans plusieurs zones de démarrage du jeu. Une fois lancé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 craquable ... alors que suggérez-vous les gars? Encore une fois, je suis vraiment intéressé par ce processus de sécurité, alors veuillez éduquer, ne pas en faire une discussion sur l'obscurcissement ou la vérification périodique basée sur un horodatage.

Merci


27
Si vous ne vous étiez pas dit que vous êtes plus intéressé par apprendre que par gagner de l'argent, ma réponse serait simplement "ça ne vaut pas le mal de tête". Puisque vous êtes intéressé par le mal de tête lui-même, je vous dis allez-y (mais je n'ai pas de réponse pour vous, je suivrai simplement cette question comme tout le monde).
Thiago Arrais

4
Si le même jeu continue d'être piraté, êtes-vous sûr de ne pas avoir de membre du personnel à problème? Ce n'est pas la plus belle chose à considérer, mais cela peut arriver
Phil Lello

3
Bien qu'il s'agisse de plus de 20 000 lignes de code, je gère tout le processus par moi-même.
BajaBob

3
@BajaBob alors vous êtes la taupe: D
Sulfkain

Réponses:


117

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

Modèle Freemium

1) Rendez les 5 à 10 premiers niveaux gratuits pour 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 loin 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, 10 ou 15, 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 + hashcodes. Cela pourrait peut-être permettre de fermer automatiquement les comptes piratés.

Protection contre les tricheurs furtifs

3) Vous pouvez aussi simplement compter les "petits drapeaux d'avertissement" que vous placez dans le jeu. Ne vérifiez pas simplement la "validation" au début, ne construisez pas ces indicateurs dans la logique du jeu elle-même. Ne le faites pas casser le gameplay, car alors personne ne le recherchera. Ensuite, lorsque l'utilisateur a atteint la fin du monstre de niveau, vérifiez s'il y avait des indicateurs d'avertissement enregistrés. Ceux-ci n'apparaîtront pas dans le jeu, donc l'utilisateur inconscient avec une édition piratée pourrait jouer pendant des heures / jours et se rendre compte soudainement qu'il / elle ne pouvait pas terminer le jeu ou passer au niveau suivant, parce que 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. Faites-leur croire que le travail a été fait. Faites une protection contre la copie et sachez que les crackers les plus avancés pourront le supprimer. Mais ils ne veulent probablement pas jouer à 50 niveaux pour vérifier si le crack fonctionne également complètement.

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 recevez des données de hachage client piratées, exécutez simplement une exception et plantez le jeu sur le client. Oups, le jeu s'est écrasé. Ne dites pas que c'est parce que c'est piraté. Une erreur de programme peut survenir. :-)

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 informés.


5
Wow, des idées géniales. J'apprécie vraiment tout cela, je n'ai même jamais envisagé de créer les niveaux, de les publier sur un serveur et de les valider. Versoning ... super idée. Gardez tout le monde à jour, faites en sorte qu'il soit déraisonnable de craquer. Merci beaucoup, cela me tiendra occupé pendant un moment!
BajaBob

12
Soupir, dommage que vous ne puissiez pas +2 de réponse :) Un commentaire: Comment pouvez-vous montrer que le problème réside dans le piratage du jeu? Si le jeu devient bogué / bizarre sur une copie piratée, les gens pourraient penser que c'est un bug et dénigrer le jeu sur les forums. Je ne pense pas que ce soit un si gros problème sur Android car il n'y a pas autant de forums avec un large public, mais je me demande s'il est logique d'avoir un avertissement à l'avant que "les copies de pirates pourraient ne pas fonctionner correctement".
EboMike

3
Je me souviens d'un jeu de 1978 sur le TRS80 qui agirait au hasard si la protection contre la copie était supprimée. Il n'y avait qu'un seul contrôle de validité et sa suppression signifiait que vous pouviez copier librement le jeu, mais les erreurs de jeu étranges ne se produiraient pas sur des copies légitimes, uniquement sur des copies piratées. Personne ne pensait que c'était la faute du développeur ... nous savions ce qui se passait.
Fixee le

1
@EboMike Je pense que la partie la plus forte de mon idée pour la protection contre la copie est "d'agir aussi normalement que possible", sans même donner aux crackers une idée des méchants plans de protection qui les attendent. Cela ne ferait que rendre les plus curieux d'entre eux chassent la protection. Juste pour le plaisir. Rappelez-vous, beaucoup d'entre eux ne le font pas pour l'argent, mais simplement parce qu'ils peuvent le montrer. Alors ne les tentez pas. Agissez simplement avec désinvolture. : o) Soyez plus intelligent qu'eux.
BerggreenDK

2
@Fixee et autres Le récent jeu Batman Arkham Asylum avait quelque chose de similaire à cela: sur les copies piratées, un mouvement crucial pétillait et vous bloquait assez tôt dans le jeu. Ensuite, quand quelqu'un se plaignait du "bug" sur les forums, le développeur pouvait sourire et dire "ce n'est pas un bug dans le jeu, c'est un bug dans votre code moral".
Nzall

20

Je fais de la décompilation et du piratage d'apk depuis un certain temps (pas warez, mais des mods et des hacks principalement pour les applications Google et le framework Android, toujours en conformité avec les politiques de xda-développeurs).

Une fois que vous avez appris à lire smali, c'est presque comme lire le code java original (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 plus d'un (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, c'est juste une question d'une ou deux minutes à 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 consulte 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 message désagréable à 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.


Mettre à 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 inclut des méthodes pour vérifier la validité de l'installation partout (vous pouvez voir un exemple comment ils le font dans ma réponse à cette question). Cela rendra toute tentative de piratage d'une application pas très difficile, mais extrêmement fastidieuse. Je pense que c'est un point fort: les hackers ne voudront pas passer autant de temps à faire autant de tâches répétitives: ce n'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 vérifications de hachage actuelles avec une sorte de vérification en ligne dispersée parmi vos méthodes, je pense que les chances qu'il soit piraté peuvent être considérablement réduites.


3
Je dois mentionner que beaucoup de gens ont un problème avec les applications "téléphoner à la maison". Personnellement, c'est stupide - un téléphone Android `` téléphone à la maison '' de tant de façons si souvent, cela n'a pas vraiment d'importance, et quel est le problème avec une vérification de licence anonyme? Je voulais toujours rejeter cela - certaines personnes jettent une grosse odeur de "téléphoner à la maison", surtout quand ce n'est pas divulgué.
EboMike

3
Eh bien, il est compréhensible que les gens puissent avoir un problème si l'application «téléphone à la maison» et ne le fait pas savoir à l'utilisateur. Mais un tableau de score basé sur le Web résout cela puisque l'utilisateur qui se connecte volontiers
Aleadam

C'est vrai, mais une fois que vous utilisez la connexion qui était censée télécharger "anonymement" les scores et envoyer le hachage du compte gmail, c'est un problème différent. Encore une fois: pas à moi. Je pense que c'est parfaitement raisonnable et je serais personnellement tenté de mettre en œuvre ce programme dans ma propre application. Les personnes qui se plaignent seront minoritaires (et, très probablement, achèteront l'application malgré tout).
EboMike

Pourquoi décompiler le framework, au lieu de télécharger le code source?
Phil Lello

1
@Phil, vous n'avez pas accès au code source du touchwiz ou du sense FW, donc si vous voulez modifier un téléphone en particulier, le moyen le plus simple est parfois de le décompiler et de changer le smalis.
Aleadam le

20

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 ceci à partir de l'enregistrement YouTube de Google I / O 2011:

Eviter les pirates et arrêter les vampires

ÉDITER:

Les notes de présentation de Evading Pirates et Stop Vampires

Quelques points clés de base


Les liens ci-dessus ne semblent pas toujours aller à la page liée ... cela ne semble fonctionner que parfois et dépend du système d'exploitation et du navigateur. Alors, prenez note de la fin #%3ar.page.15des URL. Si vous n'êtes pas automatiquement redirigé vers cette page, assurez-vous de regarder le lien pour voir où / quelle page vous devriez regarder.
TryTryAgain

1
Agréable! Je vois qu'ils croient aussi en Freemium et cachent certaines «erreurs» dans le jeu (en utilisant simplement une technique de licences). Je voudrais une solution multiplateforme au lieu d'un serveur de licences Android uniquement. Mais intéressant aussi.
BerggreenDK

btw. c'est drôle, cette réponse a 15 pouces vers le haut, la mienne a déjà franchi 90 et n'est pas considérée comme la bonne réponse :-)
BerggreenDK

8

Je sais que vous n'êtes pas vraiment obscurci, mais j'ai vraiment besoin de réagir à ceci:

De là, 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 à le faire correctement.

ProGuard est très fiable d'après mon expérience, et cela bien que j'utilise quelques fonctionnalités avancées telles que AIDL et du code natif qui appelle la méthode Java .. 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.

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

J'utilise ProGuard en production depuis de nombreux mois et cela fonctionne parfaitement.

Si vous aimez apprendre, lisez attentivement le manuel ProGuard, testez-le et inspectez ses journaux de sortie.


tout ce qui peut être lu peut également être décompilé, ce n'est qu'une question de puissance CPU et d'obstination. L'obscurcissement permet toujours au code de s'exécuter.Ainsi, tout en décompilant / désobfusquant le code, le pirate peut toujours comparer la version en cours avec l'original. Cela peut retarder le cracker ou arrêter le cracker le moins expérimenté, mais ce n'est pas du tout sûr.
BerggreenDK

4

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éparer le piratage. Mais vous pouvez y consacrer autant de temps et d'efforts pour faire faillite.

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

En plus, vous avez tout faux. Les pirates sont les membres les plus actifs de votre base d'utilisateurs, ils se comportent simplement d'une manière que vous ne vouliez pas qu'ils fassent.

Prenez les jeux Zynga sur Facebook par exemple, pensez-vous que vous vous faites pirater? - Bien sûr, et environ +100000 joueurs ne jouent que, car ils peuvent utiliser des robots, qui automatisent tout.

Le fait d'avoir un énorme botnet de base d'utilisateurs actifs de personnes réelles incite les joueurs de type archiveur à vouloir jouer au jeu - et si vous jouez, et que cela a l'air cool, Avarage Joe voudra également jouer. Si Avarage Joe joue, alors ses amis voudront peut-être jouer, et vous ne vous soucierez probablement de rien d'autre, alors être meilleur que son ami, tuer le temps ou avoir quelque chose à discuter. Les amis d'Avarage Joe seront probablement disposés à payer pour être meilleurs que Joe, mais ils aimeraient plutôt investir dans quelque chose qui les rend capables d'être meilleurs.

De plus, si la valeur réelle est de jouer au jeu gratuitement, les utilisateurs qui utilisent la version gratuite piratée n'auront probablement jamais payé pour cela. Mais vous êtes Avarage Joes et leurs amis pourraient bien. C'est donc comme la publicité la moins chère que vous puissiez avoir. Si vous voulez gagner de l'argent avec votre grande base d'utilisateurs, créez simplement de nouvelles versions du jeu avec de petits changements aux niveaux et aux graphiques.



2

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


1
À partir d'aujourd'hui, l'application Lucky Patcher a également piraté Amazon DRM! En dehors de ProGuard, une autre solution pourrait être DexGuard. Mais DexGuard coûte quelques centaines d'euros à l'achat, mais on ne peut pas être sûr qu'il puisse même protéger vos codes contre le piratage ...
ChuongPham

2

L'un des éléments clés à mon avis est d'étaler le code pour qu'il ne soit pas tout au même 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 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), alors trouvez quelque chose de bizarre. Dans le onCreate () d'une activité, vous obtenez l'ID de licence. Dans onResume (), vous obtenez une autre valeur pour la vérifier. Peut-être créer un fil et y faire des vérifications. Et puis, un autre morceau de code non pertinent (peut-être le contrôle du joueur) pourrait prendre 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'avance que cela peut vous causer des maux de tête - évidemment, un code encombré et désagréable est plus difficile à déboguer et a tendance à provoquer des erreurs. Dans le pire des cas, vous créez des faux positifs dans les applications achetées légitimement.

Et, bien sûr, tout peut être rétro-conçu - une fois que les crackers ont trouvé l'endroit où l'application est désactivée, ils retracent la valeur à partir de laquelle ils sont lus. Ils pourraient ensuite 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 déclencheurs différés). La sécurité 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é.


1

Premièrement, je ne me considère PAS 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 dans certaines parties du contrôle 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 / incorrection provoquer une exception qui mettra peut-être fin à l'application. Tant que la vérification de la 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 du code, votre application devient plus difficile (ou moins facile ...) à pirater. De même, comme je le vois, 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 en cas de logiciel illégal peut varier, vous voudrez peut-être planter l'application lorsqu'elle est utilisée illégalement, mais vous pouvez aussi bien vouloir la maintenir en cours d'exécution, et n'envoyer qu'un message demandant à l'utilisateur d'acheter une copie légale. de l'application.

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


7
Faire planter votre application lorsque vous détectez qu'elle a été piratée peut se retourner contre vous, à moins que vous ne disiez très clairement que c'est la raison pour laquelle elle s'est plantée. Je me souviens avoir lu sur certains développeurs de jeux qui ont fait planter leur jeu après une période de temps aléatoire s'il échouait à une vérification anti-piratage. Bien sûr, des tonnes de personnes l'ont piraté mais n'ont pas réalisé que les plantages étaient dus au fait qu'ils utilisaient une version piratée. Cela a entraîné beaucoup de mauvaise presse pour les développeurs et peut avoir nui à leurs ventes.
Mitch Lindgren

3
@Mitch - Je suis d'accord. Je l'ai donné comme une seule possibilité, mais la «meilleure» stratégie technique n'est peut-être pas la meilleure stratégie «commerciale».
MByD

0

Les utilisateurs d'Android vont simplement devoir accepter la douleur des téléphones portables constants. La seule application Android sécurisée est une application Android toujours connectée.

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

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


Clarification: bien que vous puissiez rooter l'une ou l'autre des plates-formes, seul un petit pourcentage d'utilisateurs IOS le fera par peur de suspendre l'installation. De plus, dans de nombreuses régions du monde, il est difficile, voire impossible, de payer pour une application Android, ce qui alimente le piratage.
yetimoner

C'était en fait l'une des idées de ma réponse de 2011 ... pourquoi la poster à nouveau?
BerggreenDK

0

Il sera incroyablement difficile d'empêcher ce genre de comportement. Tout ce qui est géré côté client est piratable à l'aide de la décompilation et du modding APK, de l'édition de la mémoire avec un logiciel tel que Game Guardian ect.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.