
我有 2 支手機(Samsung Galaxy S4 LTE I9505、Android 4.4.2 Kitkat),我已經對它們進行 root 操作並擁有手機的 root 存取權。以前,在運行 Android 4.1.2 Jelly Bean 的已 root 三星 Galaxy S3 LTE I9505 上,我可以透過新增 /dev/mem 來取得部分裝置記憶體。
我有興趣獲取 ram 的核心程式碼部分,對手機運行的核心進行一些逆向工程,並且我確切地知道核心程式碼所在的位址範圍(透過使用 cat /proc/iomem)。但是,在運行 Kitkat 4.4.2 的 2 S4 上,當我使用 adb shell(帶有 su)時,我無法看到手機上安裝的 /dev/mem。當我嘗試使用“cat /dev/mem”或“busybox devmem 0x80208000”時,權限被拒絕的錯誤。
但是,當我在啟用 Root Explorer 的情況下使用 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 甚至無法讀取它。
由於您已經root了手機,從ADB shell進入“su”並使用“getenforce”命令,它應該返回“Enforcing”。您可以使用「setenforce 0」暫時停用 Selinux,這會將 Selinux 模式變更為 Permissive,並且您可以讀取或列出 /dev/mem