Bagaimana saya bisa memverifikasi keaslian file APK yang saya unduh?

62

Pembaruan terbaru Google Maps tidak tersedia di negara saya, jadi saya mengunduh versi dengan googling untuk "Google Maps 5.4.0 apk". Saya memang menemukannya, tetapi sekarang saya bertanya-tanya bagaimana saya bisa tahu apakah ini sebenarnya versi yang sama seperti di pasar.

Bagaimana saya bisa yakin itu belum dirusak? Apakah aplikasi masuk dengan cara apa pun? Apakah ada cara untuk memeriksa tanda tangan?

Nathan Fellman
sumber
Jika Anda mengunjungi, dari ponsel Anda, halaman m.google.com/maps:, apakah ia menawarkan Anda tautan unduhan atau sejenisnya?
Nicolás
@ Nicolás: Ini tautan ke pasar, dari mana saya tidak bisa mengunduhnya.
Nathan Fellman
Tidak mengherankan datang dari google. Ngomong-ngomong, dan saya tahu saya tidak menjawab pertanyaan awal Anda, tetapi sudahkah Anda menguji MapDroyd ?
Nicolás
@ Nicolás: Saya belum, dan saya benar-benar menggunakan Waze untuk navigasi saya sehari-hari. Google Maps hanyalah sebuah contoh. Google Books adalah contoh lain, Google Streetview lagi (pada kenyataannya sepertinya hanya aplikasi Google yang memberikan saya masalah ini ...)
Nathan Fellman
1
Jika Anda memiliki aplikasi kedua yang "asli" dan berasal dari vendor yang sama, Anda dapat membandingkan jika kedua aplikasi ditandatangani menggunakan kunci / identitas yang sama: android.stackexchange.com/a/208326/2241
Robert

Jawaban:

71

Mengesampingkan perdebatan tentang keabsahan memasang aplikasi itu di ponsel Anda, pertanyaan tentang verifikasi adalah sesuatu yang sudah lama ingin saya pahami, dan Anda telah mendorong saya untuk mencoba mencari cara yang mungkin untuk memverifikasi siapa yang menandatangani sebuah apk.

Aplikasi Android masuk dengan cara yang normal dari file .jar (.apk benar-benar hanya .jar khusus yang hanya .zip khusus) namun mungkin tidak sepele untuk melacak keaslian sertifikat kecuali jika Anda memiliki sesuatu yang diketahui bagus untuk dilakukan. dibandingkan dengan. Pada dasarnya itulah yang dilakukan oleh ponsel itu sendiri - memverifikasi bahwa sesuatu yang mengklaim berasal dari pihak yang sama dengan sesuatu yang sudah ada di telepon sebenarnya - ponsel tidak menolak untuk menginstal hal-hal dengan penanda yang tidak diketahui, hanya dapat (objek ke / menghapus aplikasi data) pemalsuan nyata ketika sesuatu yang baru tidak cocok dengan sesuatu yang lama yang diklaimnya.

Anda harus memiliki jarsigner dan keytool. Saya percaya ini berasal dari JDK yang merupakan prasyarat untuk SDK android daripada SDK itu sendiri.

Pertama, Anda ingin mencoba memverifikasi kunci publik yang terkandung dalam .apk. Biasanya ini ada di META-INF / CERTS.RSA tetapi bisa juga di file lain - unzip -l akan memberi tahu Anda. Anda ingin melihat apa yang bisa Anda ketahui tentang itu:

unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert

Itu akan membuang banyak informasi tentang siapa yang menandatangani penanda tangan itu. Beberapa sertifikat tampaknya sendiri ditandatangani oleh pihak-pihak yang diketahui, tetapi tanpa mencari tahu cara melacaknya, saya menduga Anda dapat melakukan sesuatu seperti ini:

unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
unzip -p knowngood.apk META-INF/CERT.RSA | keytool -printcert | grep MD5

Jika Anda memiliki apk tepercaya yang dikenal dari penulis yang sama yang menggunakan sertifikat yang sama. Saya berasumsi bahwa sertifikat yang memiliki jumlah MD5 yang sama sudah cukup.

Dengan anggapan Anda telah memutuskan untuk mempercayai sertifikat, maka Anda dapat melihat apakah sudah digunakan untuk menandatangani setiap file di dalam .apk

jarsigner -verbose -verify suspect.apk

(Jika ada lebih dari satu file .RSA dalam arsip, Anda harus menambahkan flag -certs untuk memberi tahu Anda sertifikat mana yang telah digunakan untuk menandatangani setiap file, sehingga Anda dapat memastikan sertifikatnya yang Anda verifikasi)

Chris Stratton
sumber
9
Apakah ada cara untuk memverifikasi apk yang diberikan sama dengan yang resmi di Google Play store?
Bryce
@ Bryce Saya punya pertanyaan yang sama. Apakah Anda menemukan jawaban?
Kaizer Sozay
@ Chris Stratton Mungkinkah menyalin Google Maps apk dari perangkat? Maka seseorang dapat memeriksa sertifikat seperti yang Anda katakan.
Kaizer Sozay
Selain itu, Anda dapat mengekstrak APK dari perangkat dengan aplikasi berikut: play.google.com/store/apps/details?id=com.ext.ui&hl=id Best, Paul. [Diedit oleh Moderator Firelord]
Spipau
4

Ada (sekarang) apksigneralat dalam build-toolsmelakukan apa yang Anda inginkan. Dari dokumen :

Periksa apakah tanda tangan APK diharapkan dikonfirmasi sebagai valid pada semua platform Android yang didukung oleh APK:

apksigner verify [options] app-name.apk
Kahbou
sumber
1

Anda juga dapat mencoba mengunggah APK ke pemeriksa virus VirusTotal.com gratis . Ini akan menghasilkan hash unik untuk APK dan jika orang lain telah mengunggahnya untuk mengujinya (sangat mungkin) maka Anda akan memiliki lebih banyak gagasan bahwa APK itu valid.

Layanan ini juga akan memindai APK dengan lebih dari 60 pemindai virus dan memberi tahu Anda jika yakin ia memiliki tanda tangan yang mirip dengan virus yang sudah ditemukan.

raddevus
sumber
0

Untuk membandingkan sertifikat dari file apk yang dicurigai, mungkin satu gagasan adalah mengunduh versi itu di Play Store resmi di ponsel Anda, melakukan pencadangan di komputer Anda dan masuk ke direktori pencadangan, pilih file apk yang bersangkutan dan lakukan pemeriksaan yang sama. Anda juga dapat melihat sertifikat Google dengan melakukan pemeriksaan pada aplikasi standar perangkat (seperti com.google.android. * Apk)

Nozalys
sumber
0

Cara yang benar untuk memverifikasi file APK adalah menggunakan apksigner.

apksigner adalah bagian dari alat build Android, oleh karena itu Anda mungkin menemukan beberapa versi terinstal, satu untuk setiap versi alat build terinstal.

Salah satu contoh jalur dalam Android SDK apksigneradalah:

android-sdk/build-tools/29.0.2/apksigner

Jalankan apksigner dengan cara ini:

apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Number of signers: 1
Signer #1 certificate DN: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Signer #1 certificate SHA-256 digest: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Signer #1 certificate SHA-1 digest: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Signer #1 certificate MD5 digest: d90db364e32fa3a7bda4c290fb65e310
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Signer #1 public key SHA-1 digest: b46cbed18d6fbbe42045fdb93f5032c943d80266
Signer #1 public key MD5 digest: 0f9c33bbd45db0218c86ac378067538d
<skipped a lot of warnings>

Sekarang Anda telah memverifikasi APK, tetapi Anda masih tidak tahu apakah Anda dapat mempercayai orang / organisasi yang telah menandatangani file APK. Ini karena pada Android APK tanda tangan digunakan dengan definisi sertifikat yang ditandatangani sendiri. Karena itu, jika Anda dapat mempercayai sertifikat, itu adalah pertanyaan yang sulit. Satu-satunya cara adalah memeriksa aplikasi lain yang telah masuk menggunakan sertifikat yang sama.

Satu-satunya cara saya tahu untuk melakukannya adalah dengan menggunakan layanan perayapan PlayStore androidobservatory.org. Ini memiliki API untuk memeriksa aplikasi mana yang telah ditandatangani oleh sertifikat yang sama menggunakan sertifikat SHA-1 digest:

Sunting: apkmirror.com juga memungkinkan untuk mencari intisari sertifikat. Cukup masukkan intisari sertifikat SHA-1 atau SHA-256 (tanpa tanda titik atau spasi) di bidang pencarian:

Di halaman ini Anda dapat melihat semua file APK lainnya di Google Play Store yang ditandatangani dengan sertifikat yang sama.

Robert
sumber