Je suis récemment tombé sur cette application acheter des applications , ce qui est en quelque sorte en mesure de récupérer des applications que j'ai payé dans le jeu de Google après avoir signé à l' aide de mon compte Google.
J'essaie de savoir comment cela se fait car je souhaite créer une application similaire, mais pour les applications gratuites qui ont été téléchargées.
Cependant, je ne peux pas trouver quelle étendue d'API OAuth a été utilisée pour récupérer ces informations, même après avoir parcouru la liste complète des API .
EDIT: Je mets une nouvelle prime sur cette question, comme suggéré par une question similaire que j'ai posée ici , et parce qu'ici et là, je ne vois pas de vraie réponse sur la façon de le faire et ce qui peut être fait avec ça.
J'aimerais affiner les questions en plusieurs parties:
Quelle est l'API qui peut être utilisée pour obtenir des informations sur les applications achetées? Où puis-je lire à ce sujet? Veuillez montrer un exemple complet et fonctionnel de la façon de procéder.
Peut-il faire plus? Peut-être effectuer une recherche? Peut-être afficher les applications gratuites qui ont été installées? Peut-être à quelle heure ils ont été installés et désinstallés? Et les catégories de ces applications?
Existe-t-il des exigences particulières pour l'utilisation de cette API?
EDIT: Je mets une prime maximale à ce sujet, car peu importe ce que j'ai lu et essayé, je n'ai toujours pas réussi à créer un POC capable d'interroger les applications du Play Store que l'utilisateur a déjà téléchargées (nom, package nom, date d'installation et / ou de suppression, icône URL, prix ...), y compris les applications payantes et gratuites.
Si quelqu'un trouve un exemple fonctionnel, montrez comment cela est fait et montrez également comment vous l'avez trouvé (documentation ou tout ce qui vous a conduit à la solution). Je ne le trouve nulle part, et les solutions actuelles ici sont trop vagues pour que je puisse commencer.
Purchase Apps
fichier apk par décompilation. Il n'a jamais utilisé d'API pour obtenir la liste des applications achetées. Son approche est la même que celle que nous savons qui analyse le contenu html de la page Web du Play Store. Voici un fragment de ce code: hastebin.com/uceyavurij.jsPurchased Apps
peuvent être récupérées à partir du contenu Web Playstore. Malheureusement, je n'ai pas accès pour acheter une application sur Google Play. Si vous me partagez un compte avec une application achetée, je peux développer un exemple de code pour vous.Réponses:
Le problème est résolu. L'exploit a été clos.
Dernière mise à jour:
Il s'agit d'un bug et Google le corrigera dans la prochaine mise à jour.
Cette réponse s'est transformée en un conglomérat d'idées et a été modifiée pour inclure les informations issues de la discussion dans les commentaires.
L'
androidmarket
API serait une API personnalisée écrite par le développeur. Il n'est pas accessible au public.Pour répondre à vos préoccupations dans les commentaires. Le développeur aurait utilisé les API actuelles disponibles via Android Developer et Google pour créer un projet qui gère tout cela.
En ce qui concerne l'accès
Full Account Access
, je ne sais pas exactement comment ces développeurs ont réalisé cela.Je recommanderais d'utiliser AccountManager , qui fait partie de android.accounts, a accès aux informations d'identification et à une méthode getUserData . Le gestionnaire de compte a accès aux mots de passe et est capable de créer et de supprimer des comptes. Ceci, éventuellement utilisé avec le fournisseur de contenu
Voir Authentification Udinic / SyncAdapter .
Pour répondre à votre commentaire:
Ce blog devrait vous aider à démarrer. Écrivez votre propre authentificateur Android .
Comment fonctionnent ces applications, je ne peux pas vous le dire. Ils peuvent également avoir des implémentations différentes (à moins qu'il ne s'agisse d'un effort de collaboration en coulisse, ils seront très certainement différents).
Une supposition. Utilisez d'abord GoogleSignInAccount avec com.google.android.gms.auth.api.signin .
Il existe une définition de l' étendue , pour déterminer l'étendue des autorisations accordées à l'application.
En utilisant requestScopes () , le
public static final String PROFILE
Par exemple :
Si un accès complet peut être obtenu, une liste de toutes les applications utilisées par le titulaire du compte peut être trouvée et comparée à ce qui se trouve sur l'appareil.
Package Manager récupérera une liste de toutes les applications actuellement installées sur l'appareil.
PackageInfo fournit les détails sur l'application.
INSTALL_REASON_USER filtrera également les applications qui ont été activement installées par l'utilisateur.
Vous pouvez consulter com.google.firebase.appindexing et enregistrer les actions des utilisateurs . Différentes actions peuvent être suivies.
L'historique du compte des utilisateurs se trouve à l' adresse https://myactivity.google.com/myactivity .
Un lien utile est le terrain de jeu OAuth 2.0 .
Ce github repo node-google-play , utilisant node, est à jour et appellera les API Google Play. De même que l'archive qui a été utilisée comme une API "non officielle", android-market-api , pour interroger le marché.
Appli 1
L' application prétend utiliser les autorisations suivantes:
Il convient de noter que l'application ne définit aucune autorisation lorsqu'il y a une installation de base. Je n'ai pu utiliser aucune des fonctionnalités, car je n'ai aucune application payante. Donc, pour la recherche initiale, aucune autorisation n'était nécessaire, ce qui indiquerait que l'application n'avait pas accès à mon compte.
J'ai vérifié les autorisations - il n'y en avait pas. Donc, la seule chose requise était d'accepter la fenêtre contextuelle, comme indiqué dans votre question.
App 2
L'autre application à laquelle vous faites référence qui fait la même chose est plus directe sur ce qui est accédé.
Mes applications payantes
Je suis entré dans les détails de ces applications dans cet article de blog , qui était pour un projet universitaire (pas de gain monétaire). J'ai tendance à penser qu'il s'agit d'un exploit dans l'API et non d'un statut par conception de Google, car il n'y a pas d'appels d'API pour récupérer des achats d'applications autres que la propre application du développeur. Je suppose que c'est un exploit zero day, auquel cas il n'y a pas de moyen légitime d'accéder à ces informations.
la source
Dans le cas de l'une de ces applications (Mes applications payantes), après avoir vérifié le trafic réseau, il est assez évident qu'elle utilise la page Compte du magasin pour récupérer la liste des applications payantes. Maintenant, le mécanisme qu'il utilise est le même mécanisme que Google Chrome actuellement, et Pokemon GO est censé être utilisé à un moment donné.
En un mot, les étapes pour le faire sont les suivantes:
Connexion : ce que le programme mentionné fait pour la première étape est de connecter l'utilisateur et d'accéder au jeton d'accès de l'utilisateur. Pour ce faire, il utilise la
android.accounts.AccountManager.getAuthToken()
méthode. (Voir plus: AccountManager ) Cependant, comme pour la portée du jeton,oauth2:https://www.google.com/accounts/OAuthLogin
est demandée. Il peut être important de noter que sur la base de la documentation OAth2 de Google, cette portée n'est pas valide; cependant, cela semble être une portée valide pour Google OAuth v1.Conversion du jeton d'accès nouvellement récupéré en un
ubertoken
: Maintenant, ce qui est réellementubertoken
censé faire est inconnu et il n'y a pas de documentation officielle à ce sujet. Cependant, il a été vu à l'état sauvage pour être utilisé par le navigateur Chrome pour connecter les utilisateurs. Cela se fait en demandant lahttps://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1
page.Conversion
ubertoken
en session de site Web : plus tard, en utilisant la nouvelle session ,ubertoken
il est possible d'obtenir une session de site Web à l'aide duhttps://accounts.google.com/MergeSession
point de terminaison de l' API. Après cette étape, l'application est essentiellement capable de charger toutes les pages personnelles que vous pouvez ouvrir à l'aide de votre navigateur lorsque vous êtes connecté; sauf certaines pages spéciales comprenant les paramètres de paiement.Récupération de la liste des applications payantes: Demande et analyse de la
https://play.google.com/store/account
page.Voici le trafic de l'application capturé par ' Packet Capture ' :
Comme il est clairement visible sur l'image, le résultat final est identique à ce que j'obtiens lorsque j'ouvre normalement la page de compte du magasin sur mon PC avec Chrome Desktop:
Note latérale :
Il semble qu'aucun de ces points de terminaison ne soit documenté car ils sont principalement utilisés par les propres programmes de Google et doivent être considérés comme internes. Par conséquent, je recommande fortement de ne pas les utiliser dans un programme ou un code que vous prévoyez d'exécuter pendant une longue période ou dans un environnement de production. De plus, il y a de mauvaises nouvelles ici pour vous aussi, il semble que la page du compte Google Play ne répertorie que les applications payantes ou les applications gratuites spéciales (plus particulièrement les applications OEM). Je vais essayer de trouver du temps et de creuser plus profondément dans l'autre application.
Articles intéressants :
Jetons Pokémon
Exploiter les jetons OAuth2 de Google Chrome
la source
Si vous avez un accès root, vous pouvez accéder
/data/data/com.android.vending/databases/library.db
Cette base de données contient toutes les informations, quelle application vous avez téléchargée, quelles applications vous avez achetées et même dans quelle application vous avez créée
IAP
.Vérifiez la table de propriété, il a toutes les informations.
la source
Traiter avec des API Google non officielles est un domaine incroyablement compliqué. Il sera possible de faire fonctionner cela, mais c'est tout ce que je dirai. Procédez à vos risques et périls.
La première chose à faire est d' obtenir un jeton d'authentification Google Play . Cela peut être fait de plusieurs manières, mais voici comment procéder dans les applications achetées:
Quelques points à noter ici:
AccountManager
.Une fois que vous avez un jeton d'authentification, vous pouvez désormais accéder à n'importe quel point de terminaison Google Play Store . Le principal utilisé par les applications achetées est
https://android.clients.google.com/fdfe/purchaseHistory
. Un autre qui pourrait vous intéresser esthttps://android.clients.google.com/fdfe/details?doc=(package name)
(à partir du code APKfetch ). Voici une page avec quelques analyses supplémentaires. Si vous faites une demande à ces API, vous devrez fournir plusieurs en-têtes:Authorization
-"GoogleLogin auth=(your auth token)"
User-Agent
-"Android-Finsky/6.4.12.C-all%20%5B0%5D%202744941 (api=3,versionCode=80641200,sdk=" + VERSION.SDK_INT + ",isWideScreen=0)";
X-DFE-Device-Id
- l'identifiant Google Services Framework de votre appareil, obtenu auprès de AdvertisingIdClient .X-DFE-Client-Id
-"am-android-google"
Accept-Language
- Le code de langue de l'appareil, par ex"en"
.Maintenant, vous devez analyser la réponse . Voici où les choses se compliquent. Ces API renvoient un message codé en tant que Protobuf , il ne s'agit donc essentiellement que de données binaires, sauf si vous avez un schéma (ce que seul Google possède bien sûr). Une façon de procéder en théorie consiste à décompiler l'application Google Play Store et à réutiliser leurs modèles protobuf générés avec un outil comme JADX .
Malheureusement, j'ai essayé cela et cela ne fonctionne pas vraiment. Les classes de modèle Protobuf sont tout simplement trop complexes pour un décompilateur standard. Ce que vous pouvez utiliser est un outil appelé PBTK . Vous voudrez idéalement l'exécuter sur le Google Play Store 6.1.12 APK, car c'est la dernière version avant de commencer à utiliser ProGuard. Notez que ce programme a deux erreurs dans son script qui doivent être corrigées avant de l'exécuter: passer
'extracto'
à'extractor'
dans gui.py et supprimer l'instruction d'assertion à la ligne 500 de jar_extract.py .Maintenant, cela devrait afficher toutes les classes de réponse sous forme de fichiers .proto. Créez un dossier sous src / main appelé
proto
et faites-y glisser tout le répertoire 'com' généré. Vous pouvez supprimer tout ce qui n'est pas souscom/google/android/finsky/protos
. Suivez les instructions en ligne pour configurer Gradle avec le plugin Protobuf Lite.Lorsque vous souhaitez analyser une réponse, vous pouvez utiliser la classe ResponseWrapper, car ils semblent tous être contenus en dessous.
C'est à peu près aussi loin que je peux vous emmener. Il y a de fortes chances que je me trompe en partie; JADX est votre meilleur ami ici, car la meilleure façon de comprendre ce que fait une application est de regarder son code. J'espère que cela aide et bon développement!
la source
AccountManager
, êtes-vous sûr qu'il est toujours disponible? Je pense que de nos jours, Google ne donne que l'option à utiliserAccountPicker
(comme ici: stackoverflow.com/a/26888259/878126 ). Mais comment faire le reste? L'avez-vous testé? Cela a-t-il fonctionné pour vous? Veuillez partager le code pour cela. C'est pourquoi j'ai mis une prime, pour le voir fonctionner en action ...vous pouvez obtenir le nom du package de toutes les applications installées sur l'appareil, puis obtenir les informations de chaque package installé que vous trouvez dans l'appareil à partir de Google Play sans avoir besoin d'accéder au compte utilisateur. il existe des apis tiers ou non officiels pour obtenir les détails des applications Google Play en tant que json en obtenant le nom du package d'application. par exemple: https://42matters.com/ puis utilisez les informations reçues pour chaque paquet pour en trouver des gratuits.
la source
J'ai deux ressources à considérer, mais d'abord, en un mot, non. il n'y a pas d'API de GOOGLE pour vous permettre de faire ce que vous voulez, car ces métriques ne sont pas stockées dans le téléphone, elles sont sur les serveurs de Google Play Store et Google n'a pas d'API OFFICIELLE pour le Play Store. vous pouvez cependant glaner quelques informations sur ces deux sites:
https://www.quora.com/Is-there-an-API-for-the-Google-Play-Store entrez la description du lien ici
/android/162146/how-to-see-all-the-apps-i-have-downloaded-from-google-play-store
et cela suffit pour voir comment y parvenir.
Tout d'abord, une liste des applications téléchargées par un compte ne peut être référencée que par le compte. et cela peut être fait via le Play Store. puisque votre application sera installée sur le téléphone de cet utilisateur, ce n'est pas grave ... vous êtes.
deuxièmement, vous aurez besoin d'une API tierce conçue pour GOOGLE PLAY STORE, il y en a quelques-unes, vérifiez le premier lien.
en utilisant l'API de votre choix, vous enverrez une requête get, au Play Store, et en retour, vous devriez recevoir dans la plupart des cas un objet json à désérialiser.
désérialisez l'objet, et vous aurez votre liste. la liste que vous obtiendrez dépendra du point de terminaison que vous utilisez, mais cela devrait être expliqué par / dans l'API elle-même.
bonne chance!
la source