Android 取得 root user 權限原理

By | January 14, 2012

Android 取得 root user 權限原理:
(1) check what the number of processes limit is,
(2) check to see what process number the “adb shell” is running under,
(3) spawn, or make a bunch of useless processes to run the operating system up to its limit,
(4) kill the adb shell process, and then
(5) restart the adb shell.

Since we are at limit-minus-one when the adb shell is killed off, starting the adb shell again puts us at exactly limit! The operating system then, for security, attempts to lower the user level of the adb shell…but it can’t! The operating system can’t run the one-more-process it needs to lower the shell from root to user level since the processes are maxed out.

大約即是原來 Android adb 預設接入電話時是以 root 身份連接,之後再行一個程式把用者降為普通使用者。取得 root user 權限原理就是找出系統最大執行程式數和 adb 的 PID,之後不斷製告無用的程序以達到系統上限,再重啟 adb,那麼再次連入時因無法降低使用者權限,這時使用者就有 root 權限了

這時只是暫時的 root 權限

Android 2.2 或以下的我們會使用 psneuter;2.3 會使用 gingerbreak 達到取得暫時的 root 權限

之後放進主菜,掛入 /system,把 su 這個程式放入 /system/bin/,su 是 一個在 Linux 上可以令使用者變 root 的程式 (在 Linux 上要打 root 的 password),以後 Android 上的 Apps 只要執行 su 就可以以 root 權限執行

但這樣很危險,故需要 superuser.apk 這個 App 控制那些 Apps 可以執行 su

最後某些需要 root 權限的 App 由放功能需要,會用到 busybox,一個把 Linux 工具簡化功能後集合的程式

這時就完美 root 機了。手動 root 機最安全,唔怕俾人植入不知明軟件。當然想方便的話坊間有很多一 click 即 root 的 App

psneuter 的 source code 我都睇過,無問題,有興趣可以自己睇
https://github.com/tmzt/g2root-kmod/blob/master/scotty2/psneuter/psneuter.c