devmem: não é possível abrir '/dev/mem': Permissão negada

devmem: não é possível abrir '/dev/mem': Permissão negada

Tenho 2 telefones (Samsung Galaxy S4 LTE I9505, Android 4.4.2 Kitkat) que já fiz root e tenho acesso root aos telefones. Anteriormente, no meu Samsung Galaxy S3 LTE I9505 com root executando o Android 4.1.2 Jelly Bean, consigo obter partes da memória do dispositivo por meio de dding de /dev/mem.

Estou interessado em obter a parte do código do kernel da memória RAM para fazer alguma engenharia reversa do kernel em execução do telefone e sei exatamente o intervalo de endereços onde o código do kernel está localizado (através do uso de cat /proc/iomem). No entanto, no 2 S4 executando o Kitkat 4.4.2, quando estou usando o adb shell (com su), não consigo ver /dev/mem montado no telefone. Quando tento usar 'cat /dev/mem' ou 'busybox devmem 0x80208000' recebo um erro de permissão negada.

No entanto, quando estou usando o ES File Explorer com o Root Explorer ativado, consigo ver mem e kmem dentro de/dev. Alguém sabe como lidar com esse problema? Preciso obter acesso a /dev/mem com o comando devmem do busybox para editar a memória em tempo real.

Saída de 'cat /dev/mem':

1|root@jflte:/ # cat /dev/mem | wc                                             
tmp-mksh: cat: /dev/mem: Permission denied
    0         0         0

Saída de 'busybox devmem':

root@jflte:/ # busybox devmem 0x80208000 16
devmem: can't open '/dev/mem': Permission denied

Responder1

Porque no 4.4.2 (pelo menos no Samsung S4), o Selinux está configurado para Enforcing, o que faz com que você não consiga listar o /dev/mem ou mesmo lê-lo.

Como você fez o root no telefone, no shell do ADB, entre em 'su' e use o comando 'getenforce', ele deverá retornar com 'Enforcing'. Você pode desativar temporariamente o Selinux usando 'setenforce 0', que mudará o modo Selinux para Permissivo e você poderá ler ou listar /dev/mem

informação relacionada