Ceci revient souvent par ici :) L'idée derrière le paragraphe que vous citez est que pour que la facturation in-app soit sécurisée, vous devez vérifier les signatures de transaction. Celles-ci sont signées avec une clé privée, associée à votre compte développeur. La clé réside sur les serveurs de Google, donc on peut raisonnablement supposer que personne d'autre ne peut signer des données avec. Pour la vérifier, vous avez besoin de votre clé publique, que vous pouvez copier depuis la console développeur. Si quelqu'un la remplaçait dans votre application, il pourrait la tromper pour accepter des transactions de facturation in-app provenant de sources non autorisées, car s'ils plantent la clé publique, ils contrôlent probablement également la clé privée correspondante. En pratique cependant, il est beaucoup plus simple de simplement modifier votre code aux bons endroits pour toujours renvoyer true pour isLicensed()
, hasItem()
ou des méthodes similaires que vous pourriez avoir et personne ne fait cela.
La meilleure façon de protéger la clé est bien sûr de ne pas avoir la clé du tout dans votre application. Déplacez toute la logique de validation de transaction vers votre serveur, et utilisez HTTPS pour vous y connecter. Validez correctement la chaîne de certificats pour vous assurer que vous communiquez avec vos propres serveurs. Sinon, quelqu'un pourrait jouer avec le DNS et tromper votre application pour se connecter à leurs propres serveurs. Une attaque similaire contre les achats iOS a été annoncée il y a quelques semaines.
La deuxième meilleure chose est d'obfusquer d'une manière ou d'une autre la clé, et de l'inclure dans votre application. Cela a l'avantage de ne pas avoir besoin d'un serveur, mais l'inconvénient est que si quelqu'un est suffisamment déterminé, il finira par le découvrir, car il peut toujours inverser le code binaire de votre application. Votre meilleure solution est donc de trouver votre propre manière originale de le faire qui ne soit pas publiée sur les forums publics :) Pour rendre les choses un peu plus difficiles, vous pouvez implémenter la partie de validation en code natif, ce qui est plus difficile (mais pas impossible) à analyser. Cependant, comme mentionné ci-dessus, patcher le code binaire aux bons endroits est bien plus simple que d'essayer de remplacer la clé publique, c'est donc ce que la plupart des crackers feront.