來源:知乎
> Android的內核就是Linux,所以Android獲取root其實和Linux獲取root權限是一回事兒。
Linux下獲取root權限的時候就是執行sudo或者su程序。
接下來系統會提示你輸入root用戶的密碼,密碼正確就獲得root權限了。
Android本身就不想讓你獲得Root權限,大部分手機出廠的時候根本就沒有su這個程序。所以想獲得root權限:
第一步就是要把編譯好的su文件拷貝到Android系統的/system/bin或者/system/xbin/目錄下。我們先假設你可以把su放在xbin下,接下來你可以在Android手機的adb shell或者串口下輸入su了。
Linux下su以后輸入密碼就可以root了,但Android里的su和Linux里的su是不一樣的,Android里的su不是靠驗證密碼的,而是看你原來的權限是什么。意思就是如果你是root,那你可以通過su切換到別的用戶,比如說shell,wifi,audio什么的。但如果你是root之外的其他用戶,就不能切換回root了,會提示你permission denied。(具體su是怎么做到這一點的,我準備過幾天有時間的時候寫在下面,單獨說明)
也就說用root運行su才有用,但我這個時候還沒有root怎么辦呢?這就涉及到另外個問題。
一般我們在Linux的console下輸入 ls -l 會列出所有文件的權限。
比如:-rwxr-xr-x
用過Linux的人都知道r代表該文件可讀,w代表可寫,x代表可執行,-就代表沒有該權限。
第一個rwx代表文件所有者的權限
第二個rwx代表和所有者同組人的權限
第三個rwx代表其他用戶對該文件的權限。
但下面這個文件就比較特殊。
rws,它的執行權限標志位是一個s,s代表當任何一個用戶執行該文件的時候都擁有文件所有者的權限,這文件的所有者是root,簡單點說就是不管誰執行這個文件,他執行的時候都是以root身份執行的。
也就說即使我不是root也有可能以root身份來執行程序,那么我就把一個所有者是root的su程序權限標志位置成-rwsr-xr-x,那么不管誰執行它,都是root身份執行,su就可以順利執行成功了,執行成功之后我就是root身份了。