Android提權原理


  Android的內核就是Linux,所以Android獲取root其實和Linux獲取root權限是一回事兒。 你想在Linux下獲取root權限的時候就是執行sudo或者su,接下來系統會提示你輸入root用戶的密碼,密碼正確就獲得root權限了。

  Android本身就不想讓你獲得Root權限,大部分手機出廠的時候根本就沒有su這個程序。所以你想獲得Android的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。也就說用root運行su才有用,但我這個時候還沒有root怎么辦呢?這就涉及到另外個問題。

  一般我們在Linux的console下輸入 ls -l 會列出所有文件的權限。 比如:-rwxr-xr-x,用過Linux的人都知道r代表該文件可讀,w代表可寫,x代表可執行,-就代表沒有該權限。第一個rwx代表文件所有者的權限,第二個rwx代表和所有者同組人的權限,第三個rwx代表其他用戶對該文件的權限。但下面這個文件就比較特殊:

rws,它的執行權限標志位是一個s,s代表當任何一個用戶執行該文件的時候都擁有文件所有者的權限,linux系統中,當前用戶執行的程序,該程序進程的有效用戶ID(Effective UID)就是當前用戶,但擁有s(set uid)權限的程序,其進程的有效用戶ID是這個程序的所有者。換句話說,有set uid權限的程序,運行之后,就相當於所有者運行了這個程序,如果所有者是root,那這個進程也擁有root權限。簡單點說就是不管誰執行這個文件,他執行的時候都是以root身份執行的。也就說即使我不是root也有可能以root身份來執行程序。

  同理,我們可以把一個所有者是root的su程序權限標志位置成-rwsr-xr-x,那么不管誰執行它,都是以root身份執行,su就可以順利執行,獲取root權限了。所以說能夠正常授權的su,其所有者必須是root,否則不能正常授權。

  問題都清楚了,就是你需要把一個所有者是root的su拷貝到Android手機上,並且把su的權限標志位置成-rwsr-xr-x。能把這個事情搞定你就成功root了一個手機。

   看以下代碼:

mount -o remount,rw /system #重掛載system使system可寫入 

cat /sdcard/su > /system/xbin/su #拷貝su到/system/xbin/ 

chown root.root /system/xbin/su #su的所有者置成root 

chmod 6755 /system/xbin/su #把su置成-rwsr-xr-x 

mount -o remount,ro /system #出於安全考慮,完事后remount回只讀

  在沒有root權限的情況下,我們可以通過chmod來設置s權限,但是不能使用chown來修改su的所有者為root(提示Unable to chown su: Operation not permitted)。也就是說你只有在有root權限的情況下才能執行中間兩行代碼,所以只有破解到了root權限,才能設置su的所有者是root,才能有可正常使用的su。但是這兩行代碼就是為了讓你獲得root權限的,這是一個邏輯閉環,那么如何打破這個邏輯閉環呢?

  一個辦法就是找一個本身已經有root權限的進程來啟動我上面的兩行代碼,那我這兩行代碼一啟動就是root權限,就可以順利執行了。但是已經有root權限的進程都是出廠時候就裝到手機上的,代碼寫死了,你沒法控制它執行你自己的代碼啊。

  我們可以用zergRush破解root權限(具體代碼見https://github.com/revolutionary/zergRush/blob/master/zergRush.c),然后用root權限啟動adbd,電腦端用adb登陸之后直接就擁有了root權限,然后設置su權限和所有者,重掛載system使system可寫入,然后拷貝su到/system/xbin/並安裝SuperSu,重啟手機。

  我們還可以通過安裝SuperSu,破解root權限,設置su的權限和所有者,重啟手機,執行su,重掛載system,拷貝su自身到/system/xbin。重掛載system並拷貝su到xbin只是為了讓應用程序更容易調用su罷了。

  

  參考資料:http://www.zhihu.com/question/21074979


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM