W jaki sposób „ShareIt”, „Xender” itp. Jest w stanie zainstalować APK bez konieczności posiadania uprawnień „nieznanego źródła”?

9

Zwykle, jeśli muszę zainstalować apk (powiedzmy z karty SD), muszę włączyć opcję „Nieznane źródła” w ustawieniach mojego telefonu. Ale kiedy przesyłam i instaluję dowolny pakiet APK z innego telefonu za pomocą „ShareIt”, mój telefon nie wymaga takiej zgody.

W jaki sposób ShareIt może ominąć to uprawnienie?

Neo
źródło
Czy ShareIt jest fabrycznie zainstalowany na urządzeniu, czy sam go zainstalowałeś?
Izzy

Odpowiedzi:

8

Zrobiłem trochę kopania i jest to możliwe bez uprawnień systemowych od API 21 i później https://developer.android.com/reference/android/content/pm/PackageInstaller.html .

W rzeczywistości Google ma przykładowy kod, który pokazuje, jak to zrobić. https://github.com/googlesamples/android-testdpc/blob/master/app/src/main/java/com/afwsamples/testdpc/cosu/CosuUtils.java

Neo
źródło
Wyrazy uznania za wykopanie tego, teraz, aby dowiedzieć się, czy aplikacja faktycznie tego używała ...
Andy Yan
2
@beeshyams - Niezupełnie. Aplikacja nie może wykonać „cichej” instalacji. Z uwagi na zamierzony cel, wymagane jest wyraźne „kliknięcie” użytkownika podczas instalacji.
Neo
1
@Neo Cholera, więc po prostu przyjąłem cichą instalację, kiedy napisałem swoją odpowiedź ... Moje złe.
Andy Yan
2
W innych wiadomościach pakiet ShareIt wydaje się być jakoś zaciemniony, więc nawet jeśli moje narzędzia odniosły sukces w generowaniu kodu Java, z kodów pośredniczących nie widać nic znaczącego.
Andy Yan
Czekaj - użyłem innego narzędzia i myślę, że je mam. Po weryfikacji będę go edytować.
Andy Yan
4

Jeśli aplikacje są instalowane w trybie cichym (np. Bez zwykłego okna dialogowego instalacji), prawdopodobnie te aplikacje wywołują bezpośrednio pm, tj. PackageManagerKtóre jako aplikacja systemowa ma pozwolenie android.permission.INSTALL_PACKAGES.

Telefon musi być zrootowany, aby aplikacja mogła wywoływać pmw kontekście administratora, w przeciwnym razie zostanie wyświetlony komunikat „Ani użytkownik xxxx, ani bieżący proces nie ma android.permission.INSTALL_PACKAGES”.

EDYCJA: Jak zauważył @Izzy w komentarzu, android.permission.INSTALL_PACKAGESjest również przyznawany aplikacjom zainstalowanym na /system. Zobacz poniższy komentarz i to SO pytanie, aby uzyskać więcej informacji.

Andy Yan
źródło
Zauważ, że tak naprawdę nie próbowałem ShareIt i analizowałem, co to naprawdę robi, tylko przedstawiając najbardziej prawdopodobną teorię. Jeśli nie jesteś zrootowany i nadal działa, możemy mieć o wiele bardziej interesujący problem.
Andy Yan
1
@beeshyams W Chinach na wielu rynkach aplikacji firm trzecich instalacja jest cicha lub automatyczna. Pierwszy sposób jest taki, jak opisano tutaj, a przy pierwszej instalacji będą pytać o uprawnienia roota; druga to prośba o włączenie usługi ułatwień dostępu, a następnie zautomatyzowanie kliknięć przycisków „zainstaluj”.
Andy Yan
1
Mój telefon nie jest zrootowany. I nie poprosił również o uprawnienia roota. Ale w Indiach ShareIt jest bardzo popularną metodą instalowania aplikacji za pośrednictwem peer-to-peer.
Neo
1
@beeshyams Unikaj tej aplikacji i jej straszliwego pieprzu wymaganych uprawnień. Zastanów się , czy zamiast tego nie chcesz używać Open Source Share przez HTTP (dostępny na F-Droid). Nie jestem w żaden sposób związany z aplikacją.
Grimoire,
1
@beeshyams Działa z każdym urządzeniem podłączonym do tej samej sieci. O ile mi wiadomo, host musi być systemem Android, ale każde urządzenie może następnie połączyć się z tą samą siecią i odwiedzić adres HTTP pokazany w aplikacji, aby pobrać plik (i).
Grimoire,