標籤:man root 梳理 www 切換 lin 替換 studio develop
情境描述:
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的所有者置成rootchmod 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之後也有變動,具體資料未梳理明了,暫保留以上)
從adb prrmission denied到理解android手機提權背後