Cómo obtener los permisos más altos del sistema Android a través del software
El siguiente es el 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 en dmesg que no se puede ejecutar./ifconfig_test.sh: Error de formato de ejecución
También puede usar C/C para escribir el archivo. comando que debe ejecutarse o programarse y compilarlo 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á en el sistema.
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. Agregue código de configuración de propiedad a la aplicación
Como se mencionó anteriormente, para Android, notifique a init. para iniciar la aplicación de servicio El programa se implementa configurando las propiedades del sistema, especialmente configurando la propiedad del sistema "ctl.start" 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; p>
}
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 precisamente, la está ejecutando. obtiene temporalmente privilegios de root al ejecutar comandos.