¿Es posible cambiar los derechos del usuario normal en Android a superusuario?
Mi requisito es ejecutar el código de superusuario (quiero leer los datos de un archivo del directorio del sistema) en un dispositivo que ha rooteado el shell pero no podemos instalar ningún gestor de superusuario (SuperSu, Magisk etc.) en ese dispositivo.
He pensado en una solución como la siguiente:
- Instala un apk en tu dispositivo que tenga UI para llamar a la función requerida en el lado JNI para comenzar a leer los datos del archivo.
- Encuentre la identificación del usuario de la aplicación instalada. Lo encontré en el archivo data/system/packages.list.
- Haz que el propietario del archivo sea este nuevo usuario con su shell.
- Llama a la función requerida en la aplicación que intenta abrir el archivo.
pero esta solución no funciona. El archivo no se abre por código y devuelve -8002. El errno
es 13.
fd = open("/system/file.txt", O_RDWR | O_LARGEFILE | O_NONBLOCK);
if (fd < 0) {
return -8002;
}
Esto es muy importante para nosotros. Estaré muy agradecido a todos los que me ayuden en esto.
2 votos
Si el teléfono no está rooteado con SuperSU/Magisk, de dónde viene el
su
¿binario? ¿Qué archivo quiere leer de /system? Puede que la información requerida esté disponible a través de alguna API de Android.1 votos
El fabricante me ha dado el shell y quiero leer los datos de un puerto de Android para registrar el uso de la red. La lectura del archivo es sólo un ejemplo para demostrar el concepto de que podemos leer los datos privilegiados con la ayuda de shell rooteado. Lo siento mucho si no logro explicar el requisito, pero no hay tal cosa como el malware oculto.
0 votos
No hay ninguna API que pueda exponer los datos del puerto de Android. El puerto de Android es en realidad un archivo por lo que he utilizado la palabra archivo aquí para simplificar el requisito.
1 votos
Quiero que mi aplicación ejecute código NDK para acceder al puerto sin llamar al comando su. Porque en el NDK no se puede crear un
su
proceso y sinsu
procesar una aplicación no puede leer los datos del puerto, por ejemplo mobileinsight.net/diag-revealer.html Estos desarrolladores están leyendo datos de/dev/diag
pero en realidad hacen un ejecutable y copian el ejecutable al directorio del sistema donde tienen acceso Root. No quiero utilizar el ejecutable y en su lugar quiero crear una biblioteca compartida que puede pasar directamente los datos del puerto a mi aplicación Android.0 votos
Gracias por su comprensión :)
1 votos
No sé nada sobre desarrollo; Java o nativo. Así que no puedo ayudarte directamente. Pero lo que sí puedo decirte es que no es posible en absoluto cambiar el UID de una app a un UID privilegiado. Android 4.3+ no permite que las aplicaciones se ejecuten
/system/xbin/su
por múltiples razones explicadas aquí: Android.stackexchange.com/a/207902/2185260 votos
¿Puede un proceso intermedio (que debe estar situado en el directorio /system y puede ser un demonio) ejecutar el
su
binario y de concesiónsu
permisos a la aplicación Android sin necesidad de ningúnsu
gestor de permisos como Magisk, SuperSu, ?0 votos
Depende de en qué contexto se esté ejecutando tu proceso medio y qué capacidades tenga.
0 votos
Así que es posible. ¿Alguna orientación sobre cómo hacer tal proceso demonio en Android?
1 votos
Magisk es de código abierto. Vea cómo lo hacen.
0 votos
El código fuente es muy complejo para mí. Soy un principiante en Linux y no sé python todavía. Creo que no me ayudará. Por favor, hazme un favor y hazme saber que la tarea para hacer tal proceso demonio es un <500 líneas de código o lo grande que es?