程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Android體系中的root權限取得道理

詳解Android體系中的root權限取得道理

編輯:關於JAVA

詳解Android體系中的root權限取得道理。本站提示廣大學習愛好者:(詳解Android體系中的root權限取得道理)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Android體系中的root權限取得道理正文


媒介
一向很獵奇Android Root的道理,正好比來碰著了一個跟Android默許帶Root權限的成績,這裡趁便記載一下Android體系root的道理。

道理
Android是基於Llinux內核的開源操作體系,與Ubuntu體系相似,所以在Android裡獲得root權限其實和在Linux體系下獲得root權限是一回事。在Linux體系下獲得root權限的辦法是在敕令行履行sudo或許su,接上去輸出提權暗碼便可以獲得root權限了。Android體系其實也是如許,例如運用層法式開辟,在root過的手機上運轉root權限的代碼以下所示:

  Process process = Runtime.getRuntime().exec("su"); 
  DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
  ...... 
  os.writeBytes("HelloWorld!\n"); 
  os.flush(); 

我們可以看到,Android運用法式獲得root權限也是須要履行su敕令,是以Android可以或許root的暗碼都在su法式上。然則,Android自己是不想讓你獲得root權限的,是以年夜部門手機出廠都是user版本,默許是不帶su這個二進制法式的。所以你想獲得Android的root權限,第一步就是要把編譯好的su文件拷貝到Android手機的/system/bin或/system/xbin目次下(為何要拷貝到/system目次下,是由於這個分區是沒有nosuid限制的,同時/system/bin和/system/xbin又都是體系情況變量PATH裡的途徑,可以直接履行su)。我們先假定你可以把編譯好的su法式放在xbin或許bin目次下,接上去你可以在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權限怎樣辦?這就是接上去要評論辯論的成績。
我們在Ubuntu下檢查/usr/bin/passwd文件的權限,以下圖所示:

這個文件的權限比擬特別,Linux用戶普通都曉得文件分為r、w、x權限,那這個s是神馬意思呢?這裡答復一下,s代表當任何一個用戶履行該文件的時刻都具有文件一切者的權限,這文件一切者是root。簡略來講,就是不論誰履行這個文件,他履行的時刻都是以root身份來履行的。
看到這裡,年夜家是否是都有思緒了,也就是說,即便我不是root用戶也能夠以root用戶的身份來履行法式,那末我把一個一切者是root的su法式權限標記位設置為-rwsr-xr-x,那末不論是誰履行它,都是以root身份履行。這就牛逼了,su武斷可以履行勝利,那你也便可以順遂的獲得root權限了。

破解
道理都清晰了,那root的進程其實就是分兩步:
1. 把一個一切者是root的su拷貝到Android手機上。
2. 把su的權限標記位設置成-rwsr-xr-x。
寫成代碼年夜概以下所示:

  cp /sdcard/su /system/xbin/ 
  chown root:root /system/xbin/su 
  chmod 4755 /system/xbin/su 

代碼看起來很簡略,然則想真實的運轉勝利,以上代碼每句都須要root權限履行。我擦,一下回到束縛前,跟先有雞照樣先有蛋的成績相似,代碼運轉須要root權限,而代碼自己的目標就是獲得root權限,成了一個關閉的逝世輪回了。然則所幸Android體系有Bug,是以就給了你打破這個逝世輪回的機遇。
打破的辦法就是找一個自己曾經有root權限的過程來運轉這個3行的shell劇本,如許劇本便可以順遂履行了。然則曾經有root權限的過程都是出廠時刻就裝得手機上的,代碼寫逝世了,你沒法掌握它履行本身的代碼啊,這個時刻就須要查找破綻了。例如Android2.3 root權限的zergRush破綻就是應用一個具有root權限的過程棧溢露馬腳。詳細應用破綻的辦法年夜家便可以自行谷歌了。

避免root
經由過程上述剖析,我們可以簡略的懂得,處理Android體系可以或許su提權的辦法就是把su文件干失落便可以了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved