Red de conocimiento informático - Material del sitio web - Cómo obtener permisos de root para aplicaciones de Android

Cómo obtener permisos de root para aplicaciones de Android

Hola, estaré encantado de responder a tu pregunta.

En términos generales, los permisos máximos que las aplicaciones en Android pueden obtener directamente son los del sistema. Si necesitamos ejecutar ciertos comandos que requieren permisos de root en el programa, como ifconfig, etc., se requieren permisos de root. . Según el artículo de Simon, hay dos formas para que las aplicaciones obtengan temporalmente permisos de root:

1) Implementar un init e implementar un Servicio para ayudar a las aplicaciones de Android a ejecutar comandos con permisos de root.

2) Implementar un dispositivo virtual que ayude a las aplicaciones de Android a ejecutar comandos con permisos de root.

Hablemos del proceso del primer método y de algunos problemas encontrados.

1. Escribir el comando que queremos ejecutar como script o programa ejecutable.

El siguiente es mi script ifconfig_test.sh:

#! /system/bin/sh

ifconfig

Nota: ¡La primera línea del script debe ser #! /system/bin/sh, de lo contrario no se puede ejecutar. Puede ver la información a través de dmesg ya que no se puede ejecutar ./ifconfig_test.sh: error de formato ejecutivo

También puede usar C/C++ para escribir comandos o. programas que deben ejecutarse y compilarse en un programa ejecutable al compilar la imagen.

2. Registrar el servicio en init.rc

El servicio en Android debe registrarse en init.rc. El servicio definido en Init.rc será creado por el proceso de inicio. Entonces obtendrá privilegios de root. Luego de recibir la notificación correspondiente (a través de la configuración de propiedades), el proceso de inicio iniciará el servicio.

Los contenidos registrados en este artículo son los siguientes:

servicio ifconfig_test /system/etc/ifconfig_test.sh

oneshot

disabled

Entre ellos, oneshot significa que el programa no se reiniciará después de salir, y deshabilitado significa que no se iniciará al iniciar el sistema.

Nota: El nombre del servicio aquí no puede exceder los 16 caracteres. El nombre de mi servicio anterior se definió como relativamente largo, 18 caracteres. Después de configurar el servicio de notificación de atributos, verifique dmesg y podrá ver el mensaje: init: no existe tal servicio. Al observar el código fuente de /system/core/init/parser.c, puede ver el siguiente contenido en la función parse_service->valid_name: if (strlen(name) > 16) { return 0}, lo que demuestra que el El nombre del servicio no puede exceder los 16 caracteres.

3. Eleve las aplicaciones de Android a permisos del sistema

Dado que la aplicación puede obtener permisos de root al iniciar el servicio, ¿no es muy inseguro? Android tiene esto en cuenta y estipula que sólo las aplicaciones con permisos del sistema pueden establecer propiedades y notificar el inicio del servicio.

4. Agregar código de configuración de atributos en la aplicación

Para Android, la aplicación notifica a init que inicie el servicio configurando las propiedades del sistema, específicamente configurando las propiedades del sistema "ctl. start" es "ifconfig_test", por lo que el sistema Android nos ayudará a ejecutar el servicio ifconfig_test.

Existen tres formas de configurar esta propiedad del sistema, correspondientes a tres aplicaciones diferentes:

1) Código Java

Android lo proporciona en la biblioteca Java System. Los métodos getProperty y System.setProperty, los programas Java pueden usarlos para establecer y obtener propiedades. El código es el siguiente:

SystemProperties.set("ctl.start", "ifconfig_test");

El código anterior notifica a Android que ejecute el servicio ifconfig_test si necesita realizar una consulta. el estado actual de ejecución del servicio, si la ejecución se completa, puede consultarlo a través del siguiente código:

ret = SystemProperties.get("init.svc. ifconfig_test ", "");

if(ret != null && ret.equals("detenido"))

{

devuelve verdadero;

}

2) Código JNI

Al escribir programas NDK, puede utilizar las dos API property_get y property_set para obtener y establecer propiedades. Para utilizar estas dos API, debe incluir el archivo de encabezado cutils/properties.h y vincular la biblioteca libcutil.

3) Script de Shell

Android proporciona la línea de comandos setprop y getprop para establecer y obtener propiedades, que se pueden usar en scripts.

Dado que mi programa llama a un script en JNI y ejecuta ifconfig en el script, puse la parte de configuración de propiedades en el script. El código es el siguiente:

setprop ctl .start ifconfig_test.

#esperar a que el servicio se detenga

ret=1

mientras [ $ret -ne 0 ]

hacer

getprop | grep "$ENABLE_MAPPER_SRV" | grep detenido

ret=$?

hecho

A través de los 4 pasos anteriores, la aplicación de Android obtiene permisos de root, más específicamente, obtiene permisos de root temporalmente al ejecutar el comando que necesitamos ejecutar.

Si está satisfecho, haga clic en el botón derecho para aceptar la respuesta. Si aún tiene preguntas, haga clic para preguntar.

Espero que mi respuesta le sea útil y. ¡Espero que lo aceptes!

~O(∩_∩)O~