Ich bin kürzlich auf diese App " Apps kaufen" gestoßen , mit der ich Apps abrufen kann, für die ich in Google Play bezahlt habe, nachdem ich mich mit meinem Google-Konto angemeldet habe.
Ich versuche herauszufinden, wie es gemacht wird, da ich eine ähnliche App erstellen möchte, aber für die kostenlosen Apps, die heruntergeladen wurden.
Ich kann jedoch nicht finden, welcher OAuth-API-Bereich zum Abrufen dieser Informationen verwendet wurde, selbst nachdem ich die gesamte Liste der APIs durchgesehen habe .
BEARBEITEN: Ich lege ein neues Kopfgeld auf diese Frage, wie aus einer ähnlichen Frage hervorgeht, die ich hier gestellt habe , und weil ich hier und da keine wirkliche Antwort darauf sehe, wie es geht und was getan werden kann damit.
Ich möchte die Fragen in mehrere Teile zerlegen:
Mit welcher API können Informationen zu gekauften Apps abgerufen werden? Wo kann ich darüber lesen? Bitte zeigen Sie ein vollständiges, funktionierendes Beispiel dafür.
Kann es mehr? Vielleicht suchen? Vielleicht kostenlose Apps anzeigen, die installiert wurden? Vielleicht die Zeit, als sie installiert und deinstalliert wurden? Und die Kategorien dieser Apps?
Gibt es spezielle Anforderungen für die Verwendung dieser API?
BEARBEITEN: Ich lege ein maximales Kopfgeld darauf, denn egal wie viel ich gelesen und versucht habe, ich habe immer noch keinen POC erstellt, der die Apps aus dem Play Store abfragen kann, die der Benutzer jemals heruntergeladen hat (Name, Paket) Name, Datum der Installation und / oder Entfernung, Symbol-URL, Preis ...), einschließlich kostenpflichtiger und kostenloser Apps.
Wenn jemand ein funktionierendes Beispiel findet, zeigen Sie, wie es gemacht wird und wie Sie es gefunden haben (Dokumentation oder alles, was Sie zur Lösung geführt hat). Ich kann es nirgendwo finden und die aktuellen Lösungen hier sind zu vage, als dass ich damit anfangen könnte.
Purchase Apps
Datei durch Dekompilierung analysiert . Es wurde nie eine API verwendet, um eine Liste der gekauften Apps abzurufen. Sein Ansatz ist der gleiche wie der, der den HTML-Inhalt der Play Store-Webseite analysiert. Hier ist ein Fragment dieses Codes: hastebin.com/uceyavurij.jsPurchased Apps
können aus dem Playstore-Webinhalt abgerufen werden. Leider habe ich keinen Zugriff, um eine App von Google Play zu kaufen. Wenn Sie mir ein Konto mit einer gekauften App freigeben, kann ich einen Beispielcode für Sie entwickeln.Antworten:
Problem ist behoben. Der Exploit wurde geschlossen.
Neuestes Update:
Dies ist ein Fehler, den Google im nächsten Update beheben wird.
Diese Antwort hat sich zu einem Konglomerat von Ideen entwickelt und wurde bearbeitet, um Informationen aus der Diskussion in die Kommentare aufzunehmen.
Die
androidmarket
API wäre eine angepasste API, die vom Entwickler geschrieben wurde. Es ist nicht für die Öffentlichkeit zugänglich.Um Ihre Bedenken in den Kommentaren anzusprechen. Der Entwickler hätte die aktuellen APIs verwendet, die über Android Developer und Google verfügbar sind, um ein Projekt zu erstellen, das all diese verwaltet.
Was den Zugriff betrifft
Full Account Access
, bin ich mir nicht sicher, wie genau diese Entwickler dies erreicht haben.Ich würde empfehlen, den AccountManager zu verwenden , der Teil von android.accounts ist und Zugriff auf Anmeldeinformationen und eine Methode getUserData hat . Der Account Manager hat Zugriff auf Passwörter und kann Konten erstellen und löschen. Dies wird möglicherweise mit dem Inhaltsanbieter verwendet
Siehe Udinic / SyncAdapter-Authentifizierung .
Um auf Ihren Kommentar zu antworten:
Dieser Blog soll Ihnen den Einstieg erleichtern. Schreiben Sie Ihren eigenen Android Authenticator .
Wie diese Apps tatsächlich funktionieren, kann ich Ihnen nicht sagen. Sie können auch unterschiedliche Implementierungen haben (es sei denn, sie sind eine Zusammenarbeit hinter den Kulissen, sie werden mit Sicherheit unterschiedlich sein).
Eine Vermutung. Verwenden Sie zunächst GoogleSignInAccount mit com.google.android.gms.auth.api.signin .
Es gibt eine Definition für den Umfang , um den Umfang der Berechtigungen zu bestimmen, die der App erteilt werden.
Mit requestScopes () kann der
public static final String PROFILE
Zum Beispiel :
Wenn der vollständige Zugriff möglich ist, kann eine Liste aller vom Kontoinhaber verwendeten Apps gefunden und mit den Geräten auf dem Gerät verglichen werden.
Der Paketmanager ruft eine Liste aller derzeit auf dem Gerät installierten Apps ab.
PackageInfo enthält die Details zur App.
INSTALL_REASON_USER filtert auch Apps heraus, die vom Benutzer aktiv installiert wurden.
Vielleicht möchten Sie sich com.google.firebase.appindexing ansehen und Benutzeraktionen protokollieren . Verschiedene Aktionen können verfolgt werden.
Der Kontoverlauf des Benutzers finden Sie unter https://myactivity.google.com/myactivity .
Ein hilfreicher Link ist der OAuth 2.0-Spielplatz .
Dieses Github-Repo Node-Google-Play unter Verwendung von Node ist aktuell und ruft Google Play-APIs auf. Ebenso wie das Archiv, das als "inoffizielle" API, Android-Market-API , verwendet wurde, um den Marktplatz abzufragen.
App 1
Die App behauptet , die folgenden Berechtigungen zu verwenden:
Bemerkenswerterweise legt die App bei einer einfachen Installation keine Berechtigungen fest. Ich konnte keine der Funktionen nutzen, da ich keine kostenpflichtigen Apps habe. Für die erste Suche waren also keine Berechtigungen erforderlich, was darauf hindeuten würde, dass die App keinen Zugriff auf mein Konto hatte.
Ich habe die Berechtigungen überprüft - es wurden keine festgelegt. Das einzige, was erforderlich war, war das Akzeptieren des Popups, wie in Ihrer Frage angezeigt.
App 2
Die andere App, auf die Sie sich beziehen und die dasselbe tut, ist offener darüber, auf was zugegriffen wird.
Meine bezahlten Apps
Ich habe diese Apps in diesem Blog-Beitrag , der für ein Universitäts-Schlusssteinprojekt war (kein Geldgewinn), ausführlich beschrieben . Ich bin geneigt zu glauben, dass dies ein Exploit in der API und kein Status von Google ist, da es keine API-Aufrufe gibt, um Käufe von anderen Apps als der eigenen App des Entwicklers abzurufen. Ich gehe davon aus, dass es sich um einen Zero-Day-Exploit handelt. In diesem Fall gibt es keine legitime Möglichkeit, auf diese Informationen zuzugreifen.
quelle
Bei einer dieser Anwendungen (My Paid Apps) ist es nach Überprüfung des Netzwerkverkehrs ziemlich offensichtlich, dass die Kontoseite des Stores zum Abrufen der Liste der bezahlten Anwendungen verwendet wird. Der verwendete Mechanismus ist derselbe, der derzeit von Google Chrome und Pokemon GO verwendet wird, angeblich zu einem bestimmten Zeitpunkt.
Kurz gesagt, gehen Sie dazu wie folgt vor:
Anmelden : Das erwähnte Programm meldet den Benutzer im ersten Schritt an und erhält Zugriff auf das Zugriffstoken des Benutzers. Dazu wird die
android.accounts.AccountManager.getAuthToken()
Methode verwendet. (Weitere Informationen : AccountManager ) Der Token-Bereich wirdoauth2:https://www.google.com/accounts/OAuthLogin
jedoch angefordert. Es kann wichtig sein zu beachten, dass dieser Bereich basierend auf der OAth2-Dokumentation von Google nicht gültig ist. Es scheint jedoch ein gültiger Bereich für Google OAuth v1 zu sein.Konvertieren des neu abgerufenen Zugriffstokens in ein
ubertoken
: Nun, was eigentlichubertoken
zu tun ist, ist unbekannt und es gibt keine offizielle Dokumentation darüber. Es wurde jedoch in freier Wildbahn gesehen, dass es vom Chrome-Browser zum Anmelden von Benutzern verwendet wird. Dies erfolgt durch Anfordern derhttps://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1
Seite.Konvertieren
ubertoken
in eine Website-Sitzung : Später können Sie mithilfe des neu erstelltenubertoken
eine Website-Sitzung über denhttps://accounts.google.com/MergeSession
API-Endpunkt abrufen. Nach diesem Schritt kann die Anwendung im Wesentlichen alle persönlichen Seiten laden, die Sie mit Ihrem Browser öffnen können, während Sie angemeldet sind. mit Ausnahme einiger spezieller Seiten, einschließlich Zahlungseinstellungen.Abrufen der Liste der kostenpflichtigen Anwendungen: Anfordern und Analysieren der
https://play.google.com/store/account
Seite.Es folgt der Datenverkehr der Anwendung, der von ' Packet Capture ' erfasst wird :
Da es auf dem Bild deutlich zu sehen ist, ist das Endergebnis identisch mit dem, was ich erhalte, wenn ich normalerweise die Kontoseite des Geschäfts auf meinem PC mit Chrome Desktop öffne:
Randnotiz :
Es scheint, dass keiner dieser Endpunkte dokumentiert ist, da sie hauptsächlich von Googles eigenen Programmen verwendet werden und als intern betrachtet werden sollten. Daher empfehle ich dringend, sie nicht in Programmen oder Codes zu verwenden, von denen Sie erwarten, dass sie längere Zeit oder in einer Produktionsumgebung ausgeführt werden. Auch hier gibt es schlechte Nachrichten für Sie. Es scheint, dass auf der Kontoseite von Google Play nur kostenpflichtige Anwendungen oder spezielle kostenlose Apps (insbesondere OEM-Apps) aufgeführt sind. Ich werde versuchen, etwas Zeit zu finden und tiefer in die andere Anwendung einzutauchen.
Interessante Artikel :
Pokemon-Token
Ausnutzen der OAuth2-Token von Google Chrome
quelle
Wenn Sie Root-Zugriff haben, können Sie darauf zugreifen
/data/data/com.android.vending/databases/library.db
Diese Datenbank enthält alle Informationen, welche App Sie heruntergeladen haben, welche Apps Sie gekauft haben und sogar in welcher App Sie sie erstellt haben
IAP
.Überprüfen Sie die Besitzertabelle. Sie enthält alle Informationen.
quelle
Der Umgang mit inoffiziellen Google-APIs ist unglaublich kompliziert. Es wird möglich sein, dies zum Laufen zu bringen, aber das ist alles, was ich sagen werde. Fahren Sie auf eigenes Risiko fort.
Als erstes müssen Sie ein Google Play-Authentifizierungstoken erwerben . Dies kann auf verschiedene Arten erfolgen. In gekauften Apps wird jedoch folgendermaßen vorgegangen:
Ein paar Dinge, die Sie hier beachten sollten:
AccountManager
.Nachdem Sie über ein Authentifizierungstoken verfügen, können Sie jetzt auf jeden Google Play Store-Endpunkt zugreifen . Die wichtigste, die von gekauften Apps verwendet wird, ist
https://android.clients.google.com/fdfe/purchaseHistory
. Eine andere, die Sie interessieren könnte, isthttps://android.clients.google.com/fdfe/details?doc=(package name)
(aus APKfetch-Code ). Hier ist eine Seite mit mehr und mehr Analysen. Wenn Sie eine Anfrage an diese APIs stellen, müssen Sie mehrere Header angeben: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
- die Google Services Framework-ID Ihres Geräts, die Sie von AdvertisingIdClient erhalten haben .X-DFE-Client-Id
- -"am-android-google"
Accept-Language
- Der Sprachcode des Geräts, z"en"
.Jetzt müssen Sie die Antwort analysieren . Hier wird es schwierig. Diese APIs geben eine Nachricht zurück, die als Protobuf codiert ist. Es handelt sich also im Wesentlichen nur um Binärdaten, es sei denn, Sie haben ein Schema (das natürlich nur Google hat). Eine Möglichkeit, dies theoretisch zu erreichen, besteht darin, die Google Play Store-App zu dekompilieren und die generierten Protobuf-Modelle mit einem Tool wie JADX wiederzuverwenden .
Leider habe ich das versucht und es funktioniert nicht wirklich. Protobuf-Modellklassen sind für einen Standarddekompilierer einfach zu komplex. Was Sie verwenden können, ist ein Tool namens PBTK . Idealerweise sollten Sie dies im Google Play Store 6.1.12 APK ausführen, da dies die letzte Version ist, bevor ProGuard verwendet wird. Beachten Sie, dass dieses Programm zwei Fehler in seinem Skript enthält, die vor dem Ausführen behoben werden müssen: Ändern
'extracto'
in'extractor'
in gui.py und Entfernen der Assertion-Anweisung in Zeile 500 von jar_extract.py .Das sollte nun alle Antwortklassen als .proto-Dateien ausgeben. Erstellen Sie einen Ordner unter src / main mit dem Namen
proto
und ziehen Sie das gesamte generierte 'com'-Verzeichnis dorthin. Sie können alles löschen, was nicht unter istcom/google/android/finsky/protos
. Befolgen Sie die Anweisungen online, um Gradle mit dem Protobuf Lite-Plugin einzurichten.Wenn Sie eine Antwort analysieren möchten, können Sie die ResponseWrapper-Klasse verwenden, da sie alle darunter enthalten zu sein scheinen.
Das ist ungefähr so weit ich dich bringen kann. Es besteht eine gute Chance, dass ich einen Teil davon falsch verstanden habe. JADX ist hier Ihr bester Freund, denn der beste Weg, um herauszufinden, was eine App tut, besteht darin, sich den Code anzusehen. Hoffe das hilft und viel Spaß beim Entwickeln!
quelle
AccountManager
Sie sicher, dass es noch verfügbar ist? Ich denke, heutzutage bietet Google nur die Option zur VerwendungAccountPicker
(wie hier: stackoverflow.com/a/26888259/878126 ). Aber wie mache ich den Rest? Hast du es getestet? Hat es bei dir funktioniert? Bitte teilen Sie den Code dafür. Deshalb habe ich ein Kopfgeld festgelegt, damit es in Aktion funktioniert ...Sie können den Paketnamen aller auf dem Gerät installierten Apps abrufen und dann die Informationen zu jedem installierten Paket, das Sie auf dem Gerät finden, von Google Play abrufen, ohne das Benutzerkonto aufrufen zu müssen. Es gibt einige Drittanbieter oder inoffizielle APIs, die Google Play Apps-Details als json abrufen, indem sie den Namen des App-Pakets abrufen. Beispiel: https://42matters.com/ Verwenden Sie dann die empfangenen Informationen für jedes Paket, um kostenlose zu finden.
quelle
Ich habe zwei Ressourcen für Sie zu berücksichtigen, aber zuerst, mit einem Wort, nein. Es gibt keine API von GOOGLE, mit der Sie tun können, was Sie möchten, da diese Metriken nicht im Telefon gespeichert sind, sich auf den Google Play Store-Servern befinden und Google keine OFFIZIELLE API für den Play Store hat. Sie können jedoch einige Informationen von diesen beiden Websites abrufen:
https://www.quora.com/Is-there-an-API-for-the-Google-Play-Store Geben Sie hier die Linkbeschreibung ein
/android/162146/how-to-see-all-the-apps-i-have-downloaded-from-google-play-store
und dies ist genug, um zu sehen, wie dies erreicht werden kann.
Erstens kann eine Liste der Apps, die von einem Konto heruntergeladen wurden, nur vom Konto abgerufen werden. und dies kann über den Play Store erfolgen. Da Ihre App auf dem Telefon des Benutzers installiert wird, spielt dies keine Rolle ... Sie sind dabei.
Zweitens benötigen Sie eine Drittanbieter-API, die für den GOOGLE PLAY STORE erstellt wurde. Es gibt einige, überprüfen Sie den ersten Link.
Mit der API Ihrer Wahl senden Sie eine Get-Anfrage an den Play Store. Im Gegenzug sollten Sie in den meisten Fällen ein JSON-Objekt zum Deserialisieren erhalten.
Deserialisieren Sie das Objekt, und Sie haben Ihre Liste. Welche Liste Sie erhalten, hängt vom verwendeten Endpunkt ab. Dies sollte jedoch durch / in der API selbst erklärt werden.
Viel Glück!
quelle