Tengo 2 teléfonos (Samsung Galaxy S4 LTE I9505, Android 4.4.2 Kitkat) que ya rooteé y tengo acceso de root a los teléfonos. Anteriormente, en mi Samsung Galaxy S3 LTE I9505 rooteado con Android 4.1.2 Jelly Bean, podía obtener partes de la memoria del dispositivo agregando /dev/mem.
Estoy interesado en obtener la parte del código del kernel de la RAM para realizar ingeniería inversa del kernel en ejecución del teléfono, y sé exactamente el rango de direcciones donde se encuentra el código del kernel (mediante el uso de cat /proc/iomem). Sin embargo, en el 2 S4 que ejecuta Kitkat 4.4.2, cuando uso adb shell (con su), no puedo ver /dev/mem montado en el teléfono. Cuando intento utilizar 'cat /dev/mem' o 'busybox devmem 0x80208000' aparece un error de permiso denegado.
Sin embargo, cuando uso ES File Explorer con Root Explorer habilitado, puedo ver tanto mem como kmem dentro de /dev. ¿Alguien sabe cómo lidiar con este problema? Necesito obtener acceso a /dev/mem con el comando devmem de Busybox para editar la memoria sobre la marcha.
Salida de 'cat /dev/mem':
1|root@jflte:/ # cat /dev/mem | wc
tmp-mksh: cat: /dev/mem: Permission denied
0 0 0
Salida de 'busybox devmem':
root@jflte:/ # busybox devmem 0x80208000 16
devmem: can't open '/dev/mem': Permission denied
Respuesta1
Porque en 4.4.2 (al menos en Samsung S4), Selinux está configurado en Enforcing, lo que hace que no puedas enumerar /dev/mem o incluso leerlo.
Dado que ha rooteado el teléfono, desde el shell ADB, vaya a 'su' y use el comando 'getenforce', debería devolverle 'Enforcing'. Puede deshabilitar temporalmente Selinux usando 'setenforce 0' que cambiará el modo Selinux a Permisivo y podrá leer o enumerar /dev/mem