¿Cómo pueden "ShareIt", "Xender", etc., instalar APK sin requerir permiso de "fuente desconocida"?

9

Normalmente, si tengo que instalar un apk (por ejemplo, desde la tarjeta SD), necesito habilitar "Fuentes desconocidas" en la configuración de mi teléfono. Pero cuando transfiero e instalo cualquier APK desde otro teléfono usando "ShareIt", mi teléfono no requiere tal permiso.

¿Cómo puede ShareIt omitir este permiso?

Neo
fuente
¿ShareIt vino preinstalado en su dispositivo o lo instaló usted mismo?
Izzy

Respuestas:

8

Investigué un poco y es posible sin los permisos del sistema desde API 21 en adelante https://developer.android.com/reference/android/content/pm/PackageInstaller.html .

De hecho, hay un ejemplo de código de Google que muestra cómo hacerlo. https://github.com/googlesamples/android-testdpc/blob/master/app/src/main/java/com/afwsamples/testdpc/cosu/CosuUtils.java

Neo
fuente
Felicitaciones por desenterrar esto, ahora para descubrir si la aplicación realmente usó esto ...
Andy Yan
2
@beeshyams - En realidad no. La aplicación no puede realizar una instalación "silenciosa". A través de la intención pendiente, se requiere el "clic" explícito del usuario en el momento de la instalación.
Neo
1
@Neo Damn, así que asumí una instalación silenciosa cuando escribí mi respuesta ... Lo malo.
Andy Yan
2
En otras noticias, el paquete de ShareIt parece estar de alguna manera ofuscado, por lo que aunque mis herramientas tuvieron éxito en la generación del código Java, no se puede ver nada significativo desde los stubs.
Andy Yan
Espera, utilicé otra herramienta y creo que podría haberla conseguido. Lo editaré en su respuesta después de la verificación.
Andy Yan
4

Si las aplicaciones se instalan silenciosamente (sin el diálogo de instalación habitual), presumiblemente estas aplicaciones llaman directamente pm, es decir PackageManager, que como una aplicación del sistema tiene el permiso android.permission.INSTALL_PACKAGES.

El teléfono debe estar rooteado para que la aplicación pueda llamar pmen un contexto raíz, de lo contrario, recibirá el mensaje "Ni el usuario xxxx ni el proceso actual tienen android.permission.INSTALL_PACKAGES".

EDITAR: como @Izzy señaló en el comentario, android.permission.INSTALL_PACKAGEStambién se otorga a las aplicaciones instaladas en /system. Vea el comentario a continuación y esta pregunta SO para obtener más información.

Andy Yan
fuente
Tenga en cuenta que en realidad no probé ShareIt y analicé lo que realmente hace, solo planteé la teoría más probable. Si no está rooteado y aún funciona, entonces podríamos tener un problema mucho más interesante que analizar.
Andy Yan
1
@beeshyams En China aquí, muchos mercados de aplicaciones de terceros harían una instalación silenciosa o automatizada. La primera forma es como se describe aquí, y solicitarán permiso de root en la primera instalación; el segundo es pedirle que active un servicio de accesibilidad, luego automatice los clics en los botones "instalar".
Andy Yan
1
Mi teléfono no está rooteado. Y tampoco solicitó permisos de root. Pero en la India, ShareIt es un método muy popular para instalar aplicaciones a través de punto a punto.
Neo
1
@beeshyams Evita esa aplicación y su horrendo topo de permisos requeridos. Considere usar el recurso compartido de código abierto a través de HTTP (disponible en F-Droid). De ninguna manera estoy afiliado a la aplicación.
Grimorio
1
@beeshyams Funciona con cualquier dispositivo conectado a la misma red. Por lo que puedo decir, el host debe ser Android, pero cualquier dispositivo puede conectarse a la misma red y visitar la dirección HTTP que se muestra en la aplicación para descargar los archivos.
Grimorio