Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo obtener permisos de root para Android apk

Cómo obtener permisos de root para Android apk

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

1) Implementar un init que implementará un servicio para ayudar a las aplicaciones de Android a ejecutar comandos de permisos de root.

2) Implementar un dispositivo virtual para ayudar a las aplicaciones de Android a ejecutar comandos de autorización de root.

El segundo método es algo que aún no he probado y no lo intentaré por el momento. El siguiente es mi proceso de implementación del primer método y algunos de los problemas que encontré.

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 ejecutará. Puede ver la siguiente información a través de dmesg: no se puede ejecutar ./ifconfig_test.sh: error de formato de ejecución

También puede usar C/C para escribir. el programa que necesita ser ejecutado. Un comando o programa y lo compila en un programa ejecutable cuando se compila la imagen.

2. Registrar servicios en init.rc

Los servicios en Android deben registrarse en init.rc. Los servicios definidos en init.rc serán creados por el proceso init, que tendrá privilegios de root. El proceso de inicio iniciará el servicio después de ser notificado (establecido por la propiedad).

Los registros en este artículo son los siguientes:

servicio ifconfig_test /system/etc/ifconfig_test.sh

Oneshot

disabled

Oneshot significa que el programa no se reiniciará después de salir, y deshabilitado significa que el programa no se reiniciará después de salir.

Nota: El nombre del servicio no puede exceder los 16 caracteres. El nombre de mi servicio anterior tenía 18 caracteres, así que configuré la propiedad para notificar el inicio del servicio, luego miré dmesg y encontré el mensaje: init: no existe tal servicio. Vea el código fuente de /system/core/init/parser.c En la función parse_service-gt;valid_name, puede ver el siguiente contenido: if (strlen(name) gt; 16) { return 0 }, esto prueba; que el nombre del servicio no puede tener más de 16 caracteres. Esto demuestra que los nombres de los servicios no pueden tener más de 16 caracteres.

3. Eleve las aplicaciones de Android a permisos del sistema.

Dado que las aplicaciones pueden obtener privilegios de root al iniciar servicios, esto no es muy seguro. Android tiene esto en cuenta y requiere que sólo las aplicaciones autorizadas por el sistema puedan establecer propiedades para el inicio del servicio de notificación. Hay muchos artículos sobre cómo aumentar los permisos del sistema, por lo que no entraré en detalles aquí.

4. Agregar código de configuración de propiedades a la aplicación

Como se mencionó anteriormente, para Android, la aplicación que notifica a init que inicie el servicio se logra configurando las propiedades del sistema, especialmente las propiedades del sistema. "ctl.start" está configurado en "ifconfig_test" para que Android ejecute el servicio ifconfig_test por nosotros.

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

1) Código Java

Android proporciona System en la biblioteca Java The . Métodos getProperty y System.setProperty, que los programas Java pueden utilizar para establecer y obtener propiedades. El código es el siguiente:

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

El código anterior se utiliza para notificar a Android que ejecute el servicio ifconfig_test. debe consultar la ejecución del estado actual del servicio, por ejemplo, si la ejecución se completó, puede consultar de acuerdo con el siguiente código:

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

if(ret ! = null amp;amp; ret.equals("detenido"))

{

devuelve verdadero;

}

2 ) Código JNI

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

3) Script de Shell

Android proporciona la línea de comando setprop y getprop para configurar y obtener propiedades, que se pueden usar en scripts. | grep detenido

ret=$?

hecho

A través de los 4 pasos anteriores, la aplicación de Android ha obtenido permisos de root. Más específicamente, al ejecutar nuestro Temporalmente. Obtenga privilegios de root cuando necesite ejecutar el comando.

Reimpreso únicamente como referencia, los derechos de autor pertenecen al autor original. Que tengas un buen día y llévala contigo

Esta es la primera vez que veo una aplicación de Android con acceso root.