Saya baru-baru ini menemukan aplikasi Pembelian Aplikasi ini , yang entah bagaimana dapat mengambil aplikasi yang telah saya bayar di google play setelah saya masuk menggunakan akun google saya.
Saya mencoba mencari tahu bagaimana hal itu dilakukan karena saya ingin membuat aplikasi serupa, tetapi untuk aplikasi gratis yang telah diunduh.
Namun, saya tidak dapat menemukan Cakupan API OAuth mana yang digunakan untuk mengambil informasi tersebut, bahkan setelah melalui seluruh daftar API .
EDIT: Saya memberikan hadiah baru pada pertanyaan ini, seperti yang disarankan oleh pertanyaan serupa yang saya tanyakan di sini , dan karena di sana-sini saya tidak melihat jawaban nyata tentang bagaimana melakukannya, dan apa yang bisa dilakukan dengan itu.
Saya ingin mempersempit pertanyaan menjadi beberapa bagian:
Apa API yang dapat digunakan untuk mendapatkan informasi aplikasi yang dibeli? Di mana saya bisa membacanya? Harap tunjukkan contoh lengkap yang berfungsi tentang cara melakukannya.
Bisakah itu berbuat lebih banyak? Mungkin melakukan pencarian? Mungkin menampilkan aplikasi gratis yang diinstal? Mungkin saat mereka dipasang dan dihapus? Dan kategori aplikasi tersebut?
Apakah ada persyaratan khusus untuk menggunakan API ini?
EDIT: Saya memberikan hadiah maksimal untuk ini, karena tidak peduli berapa banyak saya telah membaca dan mencoba, saya masih gagal membuat POC yang dapat meminta aplikasi dari Play Store yang pernah diunduh pengguna (nama, paket nama, tanggal dipasang dan / atau dihapus, URL ikon, harga ...), termasuk aplikasi berbayar dan gratis.
Jika ada yang menemukan sampel yang berfungsi, tunjukkan cara melakukannya, dan juga tunjukkan bagaimana Anda menemukannya (dokumentasi atau apa pun yang mengarahkan Anda ke solusi). Saya tidak dapat menemukannya di mana pun, dan solusi saat ini di sini terlalu samar untuk saya mulai.
Purchase Apps
file apk dengan dekompilasi. Itu tidak pernah menggunakan api apa pun untuk mendapatkan daftar aplikasi yang dibeli. Pendekatannya sama seperti yang kita ketahui yaitu mengurai konten html dari halaman web play store. Berikut adalah bagian dari kode ini: hastebin.com/uceyavurij.jsPurchased Apps
dapat diambil dari konten web playstore. Sayangnya saya tidak memiliki akses untuk membeli aplikasi dari google play. Jika Anda membagikan kepada saya akun yang memiliki aplikasi yang dibeli, saya dapat mengembangkan kode sampel untuk Anda.Jawaban:
Masalah teratasi. Eksploitasi telah ditutup.
Pembaruan terkini:
Ini adalah bug dan Google akan mengatasinya di pembaruan berikutnya.
Jawaban ini telah berubah menjadi kumpulan ide dan telah diedit untuk memasukkan informasi dari diskusi di komentar.
The
androidmarket
api, akan disesuaikan api yang ditulis oleh pengembang. Ini tidak tersedia untuk umum.Untuk mengatasi masalah Anda di komentar. Pengembang akan memanfaatkan API saat ini yang tersedia melalui Pengembang Android dan Google untuk membuat proyek yang mengelola semua ini.
Untuk mengakses
Full Account Access
, saya tidak yakin bagaimana para pengembang ini mencapai ini.Saya merekomendasikan penggunaan AccountManager , yang merupakan bagian dari android.accounts, memiliki akses ke kredensial dan metode getUserData . Manajer akun memiliki akses ke sandi dan mampu membuat dan menghapus akun. Ini, mungkin digunakan dengan Penyedia Konten
Lihat Udinic / SyncAdapter Authentication .
Untuk membalas komentar Anda:
Blog ini akan membantu Anda untuk memulai. Buat Authenticator Android Anda sendiri .
Bagaimana sebenarnya aplikasi ini bekerja, saya tidak dapat memberi tahu Anda. Mereka mungkin juga memiliki implementasi yang berbeda (kecuali jika mereka merupakan upaya kolaboratif di belakang layar, mereka pasti akan berbeda).
Satu tebakan. Pertama-tama gunakan GoogleSignInAccount dengan com.google.android.gms.auth.api.signin .
Ada definisi untuk ruang lingkup , untuk menentukan sejauh mana izin yang diberikan aplikasi.
Menggunakan requestScopes () , file
PROFIL String publik statis akhir
Untuk contoh :
Jika akses penuh dapat diperoleh, daftar semua aplikasi yang digunakan oleh pemegang akun dapat ditemukan dan dibandingkan dengan apa yang ada di perangkat.
Package Manager akan mengambil daftar semua aplikasi yang saat ini terinstal di perangkat.
PackageInfo memberikan detail tentang aplikasi.
INSTALL_REASON_USER juga akan memfilter aplikasi yang telah aktif dipasang oleh pengguna.
Anda mungkin ingin melihat com.google.firebase.appindexing dan Mencatat Tindakan Pengguna . Tindakan yang berbeda dapat dilacak.
Riwayat akun pengguna ditemukan di https://myactivity.google.com/myactivity .
Tautan yang berguna adalah OAuth 2.0 Playground .
Github repo node-google-play ini , menggunakan node, adalah yang terbaru dan akan memanggil Google Play API. Begitu pula arsip yang digunakan sebagai api "tidak resmi", android-market-api , untuk menanyakan pasar.
Aplikasi 1
The app mengklaim untuk menggunakan hak akses berikut:
Patut dicatat, aplikasi tidak mengatur izin apa pun ketika ada dasar, instal. Saya tidak dapat menggunakan fitur apa pun, karena saya tidak memiliki aplikasi berbayar. Jadi untuk pencarian awal - tidak diperlukan izin, yang menunjukkan bahwa aplikasi tidak memiliki akses ke akun saya.
Saya memeriksa izin - tidak ada yang ditetapkan. Jadi satu-satunya hal yang diperlukan adalah menerima pop up, seperti yang ditampilkan dalam pertanyaan Anda.
Aplikasi 2
Aplikasi lain yang Anda rujuk yang melakukan hal yang sama lebih terbuka tentang apa yang sedang diakses.
Aplikasi Berbayar Saya
Saya telah membahas secara detail aplikasi ini di posting blog ini , yang ditujukan untuk proyek batu penjuru universitas (tidak ada keuntungan moneter). Saya cenderung berpikir ini adalah eksploitasi di API dan bukan status berdasarkan desain oleh Google, karena tidak ada panggilan API untuk mengambil pembelian aplikasi selain aplikasi milik pengembang. Saya berhipotesis bahwa ini adalah eksploitasi zero day, dalam hal ini tidak ada cara yang sah untuk mengakses informasi ini.
sumber
Dalam kasus salah satu dari aplikasi ini (Aplikasi Berbayar Saya), setelah memeriksa lalu lintas jaringan, cukup jelas bahwa ia menggunakan halaman Akun Toko untuk mengambil daftar aplikasi berbayar. Sekarang, mekanisme yang digunakan adalah mekanisme yang sama dengan Google Chrome saat ini, dan Pokemon GO konon digunakan pada suatu waktu.
Singkatnya, langkah-langkah untuk melakukannya adalah sebagai berikut:
Login : Apa yang dilakukan program yang disebutkan untuk langkah pertama adalah memasukkan pengguna dan mendapatkan akses ke token akses pengguna. Untuk melakukannya, ia menggunakan
android.accounts.AccountManager.getAuthToken()
metode. (Lihat lebih lanjut: AccountManager ) Namun, untuk cakupan token,oauth2:https://www.google.com/accounts/OAuthLogin
diminta. Perlu diperhatikan bahwa berdasarkan dokumentasi OAth2 dari Google, cakupan ini tidak valid; namun, sepertinya cakupan yang valid untuk Google OAuth v1.Mengonversi token akses yang baru diambil menjadi
ubertoken
: Sekarang, apa yangubertoken
seharusnya dilakukan, tidak diketahui dan tidak ada dokumentasi resmi tentangnya. Namun, itu terlihat di alam liar untuk digunakan oleh browser chrome untuk login pengguna. Ini dilakukan dengan memintahttps://accounts.google.com/OAuthLogin?source=ChromiumBrowser&issueuberauth=1
halaman.Konversi
ubertoken
ke sesi situs web : Nanti, menggunakan sesi yang baru dibuatubertoken
dimungkinkan untuk mendapatkan sesi situs web menggunakanhttps://accounts.google.com/MergeSession
titik akhir API. Setelah langkah ini, aplikasi pada dasarnya mampu memuat semua halaman pribadi yang dapat Anda buka menggunakan browser saat masuk; kecuali beberapa halaman khusus termasuk pengaturan Pembayaran.Mengambil daftar aplikasi berbayar: Meminta dan mengurai
https://play.google.com/store/account
halaman.Berikut ini adalah lalu lintas aplikasi seperti yang ditangkap oleh ' Packet Capture ' :
Seperti yang terlihat jelas di gambar, hasil akhirnya identik dengan apa yang saya dapatkan ketika saya biasanya membuka halaman akun toko di PC saya dengan Chrome Desktop:
Catatan samping :
Tampaknya tidak satu pun dari titik akhir ini yang didokumentasikan karena sebagian besar digunakan oleh program Google sendiri dan harus dianggap internal. Oleh karena itu saya sangat menyarankan untuk tidak menggunakannya dalam program atau kode apa pun yang Anda harapkan dapat berjalan untuk waktu yang lama atau dalam lingkungan produksi. Selain itu, ada juga kabar buruk di sini untuk Anda, sepertinya halaman akun Google Play hanya mencantumkan aplikasi berbayar atau aplikasi khusus gratis (lebih khusus lagi aplikasi OEM). Saya akan mencoba mencari waktu dan menggali lebih dalam ke aplikasi lain.
Artikel menarik :
Token Pokemon
Memanfaatkan Token OAuth2 Google Chrome
sumber
Jika Anda memiliki akses root, Anda dapat mengakses
/data/data/com.android.vending/databases/library.db
Basis data ini memiliki semua informasi, aplikasi mana yang telah Anda unduh, aplikasi mana yang telah Anda beli, dan bahkan aplikasi mana yang telah Anda lakukan
IAP
.Periksa tabel kepemilikan, Ini memiliki semua informasi.
sumber
Berurusan dengan Google API tidak resmi adalah wilayah yang sangat rumit. Ini akan mungkin untuk membuat ini bekerja, tapi hanya itu yang akan saya katakan. Lanjutkan dengan risiko Anda sendiri.
Hal pertama yang perlu Anda lakukan adalah mendapatkan token autentikasi Google Play . Ini dapat dilakukan dengan beberapa cara, tetapi inilah cara mereka melakukannya di Aplikasi yang Dibeli:
Beberapa hal yang perlu diperhatikan di sini:
AccountManager
.Setelah Anda memiliki token autentikasi, Anda sekarang dapat mengakses titik akhir Google Play Store mana pun . Yang utama digunakan oleh Aplikasi yang Dibeli adalah
https://android.clients.google.com/fdfe/purchaseHistory
. Satu lagi yang mungkin menarik bagi Anda adalahhttps://android.clients.google.com/fdfe/details?doc=(package name)
(dari kode pengambilan APK ). Berikut adalah halaman dengan lebih banyak dan beberapa analisis. Jika Anda membuat permintaan ke API ini, Anda perlu menyediakan beberapa header: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
- ID Kerangka Kerja Layanan Google perangkat Anda, diperoleh dari AdvertisingIdClient .X-DFE-Client-Id
-"am-android-google"
Accept-Language
- Kode bahasa perangkat, mis"en"
.Sekarang, Anda perlu mengurai responsnya . Di sinilah hal-hal menjadi rumit. API ini mengembalikan pesan yang dikodekan sebagai Protobuf , jadi pada dasarnya ini hanya data biner kecuali Anda memiliki skema (yang tentu saja hanya dimiliki Google). Salah satu cara untuk melakukannya secara teori adalah dengan mendekompilasi aplikasi Google Play Store dan menggunakan kembali model protobuf yang dihasilkan dengan alat seperti JADX .
Sayangnya, saya sudah mencobanya dan tidak berhasil. Kelas model protobuf terlalu kompleks untuk dekompiler standar. Yang dapat Anda gunakan adalah alat yang disebut PBTK . Idealnya Anda ingin menjalankan ini di Google Play Store 6.1.12 APK, karena itu versi terakhir sebelum mereka mulai menggunakan ProGuard. Perhatikan bahwa program ini memiliki dua kesalahan dalam skripnya yang perlu diperbaiki sebelum menjalankannya: mengubah
'extracto'
ke'extractor'
dalam gui.py dan menghapus pernyataan pernyataan pada baris 500 dari jar_extract.py .Sekarang, itu harus menampilkan semua kelas respons sebagai file .proto. Buat folder di bawah src / main yang dipanggil
proto
dan seret seluruh direktori 'com' yang dihasilkan ke sana. Anda dapat menghapus semua yang tidak ada di bawahcom/google/android/finsky/protos
. Ikuti petunjuk online untuk menyiapkan Gradle dengan plugin Protobuf Lite.Saat Anda ingin mengurai respons, Anda dapat menggunakan kelas ResponseWrapper, karena semuanya tampak dimuat di bawahnya.
Itu sejauh yang bisa saya lakukan untuk Anda. Ada kemungkinan besar saya mendapat bagian dari kesalahan ini; JADX adalah teman terbaik Anda di sini, karena cara terbaik untuk mengetahui apa yang dilakukan aplikasi adalah dengan melihat kodenya. Semoga ini bisa membantu dan selamat berkembang!
sumber
AccountManager
, apakah Anda yakin itu masih tersedia? Saya pikir saat ini Google hanya memberikan opsi untuk digunakanAccountPicker
(seperti di sini: stackoverflow.com/a/26888259/878126 ). Tetapi bagaimana saya melakukan sisanya? Sudahkah Anda mengujinya? Apakah itu berhasil untuk Anda? Silakan bagikan kode untuk itu. Itulah mengapa saya menetapkan hadiah, untuk melihatnya bekerja dalam aksi ...Anda bisa mendapatkan nama paket dari semua aplikasi yang diinstal di perangkat dan kemudian mendapatkan informasi dari setiap paket yang diinstal yang Anda temukan di perangkat dari google play tanpa perlu masuk ke akun pengguna. ada beberapa pihak ketiga atau aplikasi tidak resmi untuk mendapatkan detail aplikasi google play sebagai json dengan mendapatkan nama paket aplikasi. misalnya: https://42matters.com/ kemudian gunakan informasi yang diterima untuk setiap paket untuk menemukan yang gratis.
sumber
Saya punya dua sumber untuk Anda pertimbangkan, tapi pertama, singkatnya, tidak. tidak ada api dari GOOGLE yang memungkinkan Anda melakukan apa yang Anda inginkan, karena metrik ini tidak disimpan di ponsel, metrik ini ada di server google play store, dan google tidak memiliki api RESMI untuk play store. namun Anda dapat memperoleh beberapa info dari kedua situs ini:
https://www.quora.com/Is-there-an-API-for-the-Google-Play-Store masukkan deskripsi tautan di sini
/android/162146/how-to-see-all-the-apps-i-have-downloaded-from-google-play-store
dan ini cukup untuk melihat bagaimana mencapai ini.
pertama, daftar aplikasi apa yang telah diunduh oleh suatu akun hanya dapat dirujuk oleh akun tersebut. dan ini bisa dilakukan melalui play store. karena aplikasi Anda akan diinstal pada ponsel pengguna itu, dosnt ini penting ... Anda sudah masuk.
kedua, Anda akan membutuhkan API pihak ke-3 yang dibuat untuk GOOGLE PLAY STORE, ada beberapa di luar sana, periksa tautan pertama.
menggunakan api pilihan Anda, Anda akan mengirim permintaan get, ke play store, dan sebagai gantinya Anda akan menerima dalam banyak kasus objek json untuk deserialisasi.
deserialize objek, dan Anda akan memiliki daftar Anda. daftar mana yang Anda dapatkan akan bergantung pada titik akhir yang Anda gunakan, tetapi itu harus dijelaskan oleh / dalam API itu sendiri.
semoga berhasil!
sumber