Android 裝置root 原理及方法

2021-07-24 20:29:35 字數 2945 閱讀 4137

1: android 裝置被root 的含義是什麼?

在linux中,登入系統後,需要輸入使用者名稱和密碼,驗證通過之後,使用者登入shell,或得usserid和groupid,如果userid和groupid為root,表示此時的使用者具備root許可權;

在android中,開發板被root了,即表示使用者可以通過某種方式得到root許可權,可以以root的身份操控板子;

在android中,使用者和板子打交道的途徑有2中,一種是通過apk,另一種是adb命令;apk在執行時,會根據其簽名和sharduserid分配不同的userid值,但是一般最高許可權也就是system級別,目前沒有看到到root級別的;另一種通過adb,在終端出入id,會顯示userid和groupid資訊;adb互動的方式適合開發人員,作為使用者還是會喜歡apk的方式,希望執行的apk能被分配到root的userid;

2:使用者如何得到root 許可權,從apk的角度來看

在linux中有這樣的乙個標誌位-rw

sr-x-r-x,s是sticky bit,屬於linux許可權管理的知識,具體的可以檢視舉個具體例子來說明sticky bit的含義;

這裡sticky bit表示的含義是,su執行所在的程序,其userid 和groupid 為root;

我們看到su的第三組許可權為r-x,表示非root使用者可以執行su檔案;讓su檔案成功執行之後,su程式就是root使用者,具備root許可權,這樣對su傳送命令,就等價於作為root使用者在做事情了;這樣只要使用者可以執行su檔案就好;

所以使用者獲取root 許可權的步驟是:

1:su的許可權帶有sticky bit;即su的許可權為4755

2:對su的原始檔進行修改;將修改好,編譯過的su檔案push到system/xbin 目錄下;

修改方法,將if (myuid != aid_root ) 如下圖所示,遮蔽掉,因為如果是普通使用者,是無法執行su檔案的,中途會被return;

簡單的講,使用者可以獲取root許可權的本質,就是在板子上植入乙個具備4755許可權的」木馬「su檔案;

3: 在vt6078 上讓普通apk獲取root許可權的實驗過程;

步驟一:在vt6078 中執行mount -o remount rw /; 使板子上的目錄許可權為可讀可寫;

步驟二:將修改過的su檔案push到板子中,命令為adb push su /system/xbin/

步驟三:將/system/xbin/su 檔案的許可權修改為帶sticky bit,命令為chmod 4755 /system/xbin/su

步驟四:在板子上執行which su, 檢視當前執行的su檔案是不是為/system/xbin/su ,如果不是修改;

在vt6078的板子中,which su執行時,用的是/bin/su 檔案。原因是

/bin 排在/system/xbin前面;

解決方案是將/bin/su 刪除,因為/bin/su 是busybox的軟連線;

步驟五:寫apk測試,看apk是否可以有root許可權;

主要**如下:

結果會在result字串中返回,例如調動該函式,傳入的string為"adb devices", 通過log 列印result字串,如果成功,則log如下:

4:  如何不像第3部分那樣,手動修改板子,讓apk獲取root許可權?

我們在第3部分看到了,在終端的手動操作,讓apk獲取root許可權,這樣做,如果是對客戶,則是乙個不成型的產品,那麼如何讓板子一啟動之後就有這樣的許可權呢?

先來看看要讓apk在板子上獲取root許可權需要哪些條件

條件一: 乙個修改好的su檔案  

條件二:su檔案的許可權為4755

條件三:在板子中/system/xbin/su 檔案為首要執行檔案;

針對以上3個條件,我有2個修改思路

思路一:針對以上3個條件,修改編譯好之後out目錄;

我們知道刷到板子中的rom,在android原始碼中,都是來自編譯好的out目錄;那麼修改out目錄中對應的內容,最後大打包成rom,將rom放給客戶即可;這樣從客戶的角度來看,是乙個完全的產品;

修改一:乙個修改好的su檔案--- 修改android 原始碼system/extras/su/su.c 檔案,編譯即可

修改二:su 檔案的許可權為4755---  su,c 檔案編譯好之後,在out目錄下,具體位置為: 

-rws

r-x-r-x, 通過命令chmod 4755 su 即可解決問題;

修改三:刪除/bin/su 檔案,在板子中/bin/su檔案對應的out目錄的檔案是

將上面修改過的out目錄在打包刷機即可,就不需要我們在板子執行之後,手動修改了;

思路二:針對以上3個條件,修改android原始碼,讓apk在板子上可以獲得root許可權;

從客戶的角度來看,思路一可以解決問題,但是從研發人員的角度來看,沒有根本的解決問題;能解決問題的還是原始碼,怎麼解決?

回答以下3個問題:

達到 條件一: 乙個修改好的su檔案

,如何修改原始碼?

很簡單,修改

system/extras/su/su.c 檔案即可;

達到 條件二:su檔案的許可權為4755,如何修改原始碼?

在android中,關於檔案以及目錄的許可權都定義在

system/core/include/private/android_filesystem_config.h目錄中;將其中/system/xbin/su 的許可權定義為004755即可;

達到 條件三:在板子中/system/xbin/su 檔案為首要執行檔案,如何修改原始碼?

在android中,path的定義在init.rc檔案,中將/system/xbin/su 的定義放到/bin 之前即可;

Android獲取root許可權原理

1.android系統預設不提供su 2.android系統的su和linux的su不同,不需要密碼驗證 su其實是個許可權的切換,root使用者使用可以切換到普通使用者,普通使用者使用可以切換到root使用者 前提是普通使用者有許可權 3.如果將乙個檔案設定成rws許可權,那麼任何使用者執行此檔案...

Android系統root破解原理分析

現在android系統的root破解基本上成為大家的必備技能!網上也有很多中一鍵破解的軟體,使root破解越來越容易。但是你思考過root破解的原理嗎?root破解的本質是什麼呢?難道是利用了linux kernal的漏洞嗎?本文將簡單對root的破解原理進行分析。android root許可權破解...

Android 系統 root 破解原理分析

4月23日 武漢 osc 源創會 es6開發體系實踐 現在android系統的root破解基本上成為大家的必備技能!網上也有很多中一鍵破解的軟體,使root破解越來越容易。但是你思考過root破解的 原理嗎?root破解的本質是什麼呢?難道是利用了linux kernal的漏洞嗎?本文將簡單對roo...