Jak mogę zweryfikować autentyczność pobranego pliku APK?

62

Najnowsza aktualizacja Map Google jest niedostępna w moim kraju, więc pobrałem wersję, przechodząc do „Google Maps 5.4.0 apk”. Właściwie to znalazłem, ale teraz zastanawiam się, jak mogę stwierdzić, czy w rzeczywistości jest to ta sama wersja, co na rynku.

Jak mogę się upewnić, że nie zostało zmienione? Czy aplikacje są podpisane w jakikolwiek sposób? Czy jest jakiś sposób sprawdzenia podpisów?

Nathan Fellman
źródło
Jeśli odwiedzasz z telefonu komórkowego stronę: m.google.com/mapsczy oferuje link do pobrania lub coś podobnego?
Nicolás
@ Nicolás: Odsyła do rynku, z którego nie mogę go pobrać.
Nathan Fellman
Nic dziwnego, że pochodzi z Google. Nawiasem mówiąc, i wiem, że nie odpowiadam na twoje pierwotne pytanie, ale czy przetestowałeś MapDroyd ?
Nicolás
@ Nicolás: Nie zrobiłem tego i faktycznie używam Waze do codziennej nawigacji. Mapy Google to tylko przykład. Google Books to kolejny przykład, Google Streetview to kolejny (w rzeczywistości wygląda na to, że tylko aplikacje Google przysparzają mi tego problemu ...)
Nathan Fellman
1
Jeśli masz drugą aplikację, która jest „autentyczna” i pochodzi od tego samego dostawcy, możesz porównać, czy obie aplikacje są podpisane przy użyciu tych samych kluczy / tożsamości: android.stackexchange.com/a/208326/2241
Robert

Odpowiedzi:

71

Pomijając debatę na temat zasadności zainstalowania tej aplikacji na telefonie, kwestia weryfikacji jest kwestią, którą chciałem zrozumieć od jakiegoś czasu, a ty zachęciłeś mnie, abym spróbował znaleźć sposób na sprawdzenie, kto podpisał apk.

Aplikacje na Androida są podpisywane w normalny sposób .jar (.apk to tak naprawdę tylko specjalny plik .jar, który jest po prostu specjalnym plikiem .zip), jednak śledzenie autentyczności certyfikatów może nie być trywialne, chyba że masz coś dobrego porównać do. To jest w zasadzie to, co robi sam telefon - weryfikuje, że coś, co twierdzi, że pochodzi od tej samej strony, jak coś, co już jest w telefonie, naprawdę nie jest - telefon nie odmawia instalacji rzeczy z nieznanymi sygnatariuszami, może tylko (sprzeciwić się / wyczyścić aplikację dane) pozornych fałszerstw, gdy coś nowego nie pasuje do czegoś starego, do czego się twierdzi.

Będziesz potrzebował jarsignera i keytoola. Uważam, że pochodzą one z JDK, który jest warunkiem wstępnym dla zestawu SDK systemu Android, a nie samego zestawu SDK.

Najpierw spróbuj zweryfikować klucz publiczny zawarty w .apk. Zwykle jest to plik META-INF / CERTS.RSA, ale może znajdować się w innym pliku - rozpakuje -l. Chcesz zobaczyć, co możesz o tym dowiedzieć:

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

To zrzuci wiele informacji o tym, kim jest osoba podpisująca. Niektóre certyfikaty najwyraźniej same są podpisywane przez znane strony, ale bez zastanowienia się, jak to prześledzić, podejrzewam, że możesz zrobić coś takiego:

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

Jeśli masz znaną zaufaną aplikację tego samego autora, który użył tego samego certyfikatu. Zakładam, że wystarczą certyfikaty o tej samej sumie MD5.

Zakładając, że zdecydowałeś się zaufać certyfikatowi, możesz sprawdzić, czy został on użyty do podpisania każdego z plików w .apk

jarsigner -verbose -verify suspect.apk

(Jeśli w archiwum jest więcej niż jeden plik .RSA, należy dodać flagę -certs, aby poinformować, które certyfikaty zostały użyte do podpisania każdego pliku, aby mieć pewność, że jest to certyfikat, który zweryfikowałeś)

Chris Stratton
źródło
9
Czy istnieje sposób, aby sprawdzić, czy dany plik APK jest taki sam, jak oficjalny w sklepie Google Play?
Bryce,
@Bryce Mam to samo pytanie. Znalazłeś odpowiedź?
Kaizer Sozay
@Chris Stratton Czy można skopiować aplikację Google Maps z urządzenia? Następnie można sprawdzić certyfikaty, jak powiedziałeś.
Kaizer Sozay
Ponadto możesz wyodrębnić pakiet APK z urządzenia za pomocą następującej aplikacji: play.google.com/store/apps/details?id=com.ext.ui&hl=pl Best, Paul. [Edytowane przez Moderatora Firelord]
Spipau
4

Jest (teraz) apksignernarzędzie, build-toolsktóre robi to, co chcesz. Z dokumentów :

Sprawdź, czy podpisy APK powinny zostać potwierdzone jako ważne na wszystkich platformach Android obsługiwanych przez APK:

apksigner verify [options] app-name.apk
kahbou
źródło
1

Możesz także spróbować przesłać pakiet APK do bezpłatnego programu antywirusowego VirusTotal.com . Wygeneruje unikalny skrót dla APK, a jeśli inni już go przesłali, aby go przetestować (bardzo prawdopodobne), będziesz miał więcej pomysłów, że APK jest ważny.

Usługa przeskanuje również pakiet APK za pomocą ponad 60 skanerów antywirusowych i poinformuje cię, jeśli podejrzewa, że ​​ma podobne sygnatury do już znalezionych wirusów.

raddevus
źródło
0

Aby porównać certyfikaty z podejrzanego pliku apk, być może jednym z pomysłów jest pobranie jego wersji z oficjalnego Sklepu Play w telefonie, wykonanie kopii zapasowej na komputerze i przejście do katalogu kopii zapasowej, wybranie odpowiedniego pliku apk i wykonanie tych samych kontroli. Możesz także wyświetlić certyfikaty Google, sprawdzając domyślną aplikację urządzenia (jak każdy com.google.android. * Apk)

Nozalys
źródło