devmem: '/dev/mem'을 열 수 없습니다: 권한이 거부되었습니다.

devmem: '/dev/mem'을 열 수 없습니다: 권한이 거부되었습니다.

나는 이미 루팅한 휴대폰 2개(Samsung Galaxy S4 LTE I9505, Android 4.4.2 Kitkat)를 가지고 있으며 해당 휴대폰에 대한 루트 액세스 권한을 가지고 있습니다. 이전에는 Android 4.1.2 Jelly Bean을 실행하는 루팅된 Samsung Galaxy S3 LTE I9505에서 /dev/mem 추가를 통해 장치 메모리의 일부를 얻을 수 있었습니다.

나는 전화의 실행 커널에 대한 리버스 엔지니어링을 수행하기 위해 램의 커널 코드 부분을 얻는 데 관심이 있으며, 커널 코드가 있는 주소 범위를 정확히 알고 있습니다(cat /proc/iomem 사용을 통해). 그러나 Kitkat 4.4.2를 실행하는 2 S4에서 adb 쉘(su 포함)을 사용하면 전화기에 마운트된 /dev/mem을 볼 수 없습니다. 'cat /dev/mem' 또는 'busybox devmem 0x80208000'을 사용하려고 하면 권한 거부 오류가 발생합니다.

그러나 루트 탐색기가 활성화된 ES 파일 탐색기를 사용하면 /dev에서 mem과 kmem을 모두 볼 수 있습니다. 이 문제를 해결하는 방법을 아는 사람이 있나요? 즉시 메모리를 편집하려면 busybox의 devmem 명령을 사용하여 /dev/mem에 액세스해야 합니다.

'cat /dev/mem' 출력:

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

'busybox devmem'의 출력:

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

답변1

4.4.2(적어도 Samsung S4에서는)에서 Selinux는 Enforcing으로 설정되어 있어 /dev/mem을 나열하거나 읽을 수도 없습니다.

전화를 루팅했으므로 ADB 쉘에서 'su'로 이동하여 'getenforce' 명령을 사용하면 'Enforcing'이 반환됩니다. Selinux 모드를 Permissive로 변경하는 'setenforce 0'을 사용하여 Selinux를 일시적으로 비활성화할 수 있으며 /dev/mem을 읽거나 나열할 수 있습니다.

관련 정보