從adb prrmission denied到理解android手機提權背后


場景描述:

1. 連接Android手機,adb shell find xxxx,顯示adb permission denied;

2. Google顯示需要運行在root權限下,adb root,無錯誤輸出,再次adb shell find xxxx,仍顯示permission denied;

3. 發現手機未獲取root權限,嘗試root精靈和kingroot一鍵root均失敗。

原因:

1. adb是Android SDK自帶調試工具(相關介紹:Android developer);

2. adb默認以shell權限執行(非root),即使已獲取手機及root權限,也需要顯示切換 adb root;

    若未獲取root權限,顯示切換當然也是沒有用的;

3. adb 獲取root權限的大前提:手機已root,目前依賴root工具,而root工具一般會有試用機型系統列表,列表外的手機無法實現root。

 

解析:

1. 為什么要root?

Android采用Linux內核;所以同Linux一致,無root權限將無法操作部分文件(如系統文件等)。

2. “把手機root一下”,這句話應該聽說很多,究竟root一下代表什么呢?

用戶對手機的權限一般是普通用戶,手機廠商禁止用戶獲取root權限,root一下,即為將用戶的shell權限提升為root權限。

3. 重中之重,root的通用原理是什么?

(提前注明:搜索的資料多為2013年或之前,具體提及破解細節只適用於當時Android版本,但猜想通用原理是一致的,整理之。)

關鍵的 "su" 參考:Android 系統 root 破解原理分析 + Android 的提權 (Root) 原理是什么?

  • 在Linux中,執行su命令輸入密碼即可獲取root權限;在Android中,有些手機封裝系統會直接去除su命令,另外的也不是通過密碼來驗證,而是看用戶原先權限。即如果你是root,那你可以通過su切換到別的用戶,比如說shell,wifi,audio什么的。但如果你是root之外的其他用戶,就不能切換回root了,會提示你permission denied。
  • 在Linux中,存在一種特殊權限 s , 設置SUID(意思是,執行這個文件的用戶暫時擁有文件擁有者的權限)。而su的擁有者即為root,所以普通用戶運行su,即可獲取到root權限。

  • Android同理,由於手機廠商可能封裝了其他性質的su,所以首先需要確認兩點:1. Android手機中存在su命令;2. su命令擁有者為root,執行權限為s。

所以root的重點在於要想辦法替換並執行su。

cp /data/tmp/su /system/bin/                   #copy su 到/system/分區
chown root:root su #su的所有者置成root chmod 4775 /system/bin/su #把su置成-rwsr-xr-

     以上操作都需要root權限,至此陷入循環,常規途徑無法破解。

非常規途徑(adbd漏洞為例)參考Android 系統 root 破解原理分析(續)

Android init進程以root權限啟動,從而啟動init.rc及其配置的系統服務(包括adbd),adbd在執行以下兩句命令后變為shell權限

/* then switch user and group to "shell" */
setgid(AID_SHELL);
setuid(AID_SHELL);

破解的方法,在於讓這兩句命令執行失敗,切換為shell失敗則保留為原始的root權限。

(但實際在Android4.2以后su命令的執行過程有修改,5.X之后也有變動,具體資料未梳理明了,暫保留以上


免責聲明!

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



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