J'ai implémenté des jetons d'achat Google IAP de vérification côté serveur. Mon application mobile m'envoie ce jeton comme il se doit depuis Google.
Un jeton régulier ressemble à
minodojglppganfbiedlabed.AO-J1OyNtpooSraUdtKlZ_9gYs0o20ZF_0ryTNACmvaaaG5EwPX0hPruUdGbE3XejoXYCYzJA2xjjAxrDLFhmu9WC4fvTDNL-RDXCWjlHKpzLOigxCr1QhScXR8uXtX8R94iV6MmMHqD
mais parfois je reçois un jeton court comme celui-ci
korpimulxmslxissnschtkdb
Lorsque je vérifie ce jeton à l’aide de l’API des développeurs Google Play: https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token , j’obtiens un Erreur 404.
Où est le problème? Est-il possible que ce jeton court représente des transactions réelles?
J'ai reçu ces mêmes jetons invalides dans notre application sans aucune idée de la raison pendant un certain temps. Les jetons sont disponibles dans différents formats, y compris 24 caractères alphabétiques (par exemple, glvnqnpjqslcagyimgxeuybk
), 15 chiffres (par exemple, 781871156762279
, voir cette question ), et même des jetons de longueur appropriée dont le format est légèrement différent de celui en vigueur. ceux-ci (par exemple, xdavcuvdnniwwrhwemleqjdz.rSQozm...
voir cette question ).
Voici les messages d'erreur que j'ai reçus de la API de facturation intégrée pour ces différents jetons à un moment ou à un autre:
"code": 404, "message": "The purchase token was not found."
"code": 400, "message": "Invalid Value"
"code": 400, "message": "Your request is invalid for this subscription purchase."
La réponse donnée par Marc Greenstock m'a donné une idée pour essayer de reproduire le problème.
J'ai testé deux applications qui prétendent pirater des achats intégrés: Freedom et Lucky Patcher, sur un appareil enraciné. Le premier ne fonctionnait pas: bien qu'il ait détecté que notre application puisse faire des achats, lorsque j'ai essayé d'en fabriquer un faux, il m'a dit que "les achats de cette application ne peuvent pas être falsifiés". Ce dernier a cependant travaillé après quelques manipulations et a généré un jeton d’achat court exactement comme dans la question. Lorsque j'ai essayé de vérifier le jeton via API de facturation intégrée , j'ai reçu le même message exact "jeton non valide" qu'auparavant.
J'ai également commencé à consigner l'état racine des périphériques générant des jetons non valides à l'aide de cette méthode . Bien que cela ne soit la preuve de rien, le fait que presque tous les jetons non valides provenaient de périphériques enracinés me faisait penser à un acte criminel.
Je crois que l'attaque fonctionne comme suit. Quiconque en sait plus à ce sujet s'il vous plaît carillon dans!
Intent
destiné au service légitime.Avez-vous fini par résoudre ceci?
La seule raison pour laquelle je peux suggérer est que le jeton a été généré par un Cracker d'achat intégré, tel que l'application "Achats intégrés Freedom pour Android", qui peut être installé sur des appareils enracinés.
Je suis intéressé de voir si vous avez reçu un jeton court pour tout achat test que vous avez effectué vous-même.
Une autre indication que le jeton est faux est le format de orderId obtenu après l'achat sur l'application.
S'il ne respecte pas le format indiqué dans Administration de la facturation in-app docs, il s'agit probablement d'un achat frauduleux.
J'ai trouvé une solution partielle qui fonctionne avec certains faux fournisseurs IAP: revérifier la signature numérique manuellement. Quel que soit le simulateur IAP, il ne dispose pas d'une copie de la clé RSA privée de Google. J'ai fait mon propre chèque de signature, et il attrape au moins certaines de ces fausses transactions.