Android ioctl: permisos y uso de root

Estoy trabajando en alguna funcionalidad de enrutamiento en una aplicación para Android y necesito acceder a ioctls. Dado que las aplicaciones que utilizan ioctls necesitan permiso de root para ejecutarse, la única forma en que he podido llamarlas es vincular un ejecutable independiente y llamar desde Java con Runtime.getRuntime().exec() .

¿Hay una manera de acceder a los permisos de root desde JNI en Android sin construir un ejecutable independiente? ¿Es la construcción de un ejecutable el mejor enfoque para acceder a un ioctl?

No hay medios para que un proceso no root se convierta en root (más allá de exploits), así que sí, necesitas un proceso separado.

Esto se hereda sin cambios de linux – la diferencia es que no hay manera directa de lanzar un proceso de aplicación de Android como root desde el lanzador, ya que envía una intención de zygote que bifurca y privilegios-reduce a un niño que se especializa en un proceso de aplicación. (Puede haber un método indirecto para crear manualmente un proceso de aplicación, pero tendría que tener un proceso de aplicaciones para hacerlo, por lo que sería por definición un proceso secundario y sería ineficiente como una aplicación que no era un Hijo de zygote no heredaría el mapeo compartido de bibliotecas de sistema, y ​​por lo tanto tendría que cargar sus propias copias únicas en memoria)

Ioctl () es sólo otra syscall, y sólo requiere root si los permisos de acceso a ese fd (desde su archivo de dispositivo) lo hace. Obviamente, ése es el caso de los que desea utilizar, pero otros son unpriveleged. Por ejemplo, la mayoría del framework IPC de Android se implementa en última instancia con Binder ioctl, y se utilizan comúnmente para controlar un socket de red.

Las llamadas ioctl () no requieren explícitamente permiso root (o cualquier permiso específico) para usar. Como dijo Chris Stratton, necesitará permiso para acceder al dispositivo en cuestión. Si usted no tiene dicho permiso, usted no lo va a conseguir aparte de exploits.

¿Qué estás tratando de lograr?

  • ¿Cómo obtener los mensajes "printf" escritos en la aplicación NDK?
  • Manejo de excepciones de Android JNI
  • JNI- java.lang.UnsatisfiedLinkError: Método nativo no encontrado
  • ¿Cómo utilizar NDK? Comenzando con la aplicación "hola mundo"
  • Error de libcurl CURLE_SSL_CACERT_BADFILE en android
  • Cómo convertir char a jstring en JNI?
  • Cómo liberar jstring en un bucle correctamente?
  • Android poco convencional y desagradable durante el código de carga de JNI / OpenGL ES
  • Desbordamiento de tabla de referencia Jni
  • Carpetas de estudio androide dentro de paquetes
  • El proceso de alojamiento del servicio de cámara ha muerto inesperadamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.