現在android系統的root破解基本上成為大家的必備技能!網上也有很多中一鍵破解的軟體,使root破解越來越容易。但是你思考過root破解的 原理嗎?root破解的本質是什麼呢?難道是利用了linux kernal的漏洞嗎?本文將簡單對root的破解原理進行分析。
網上有一篇文章已經對root破解的基本原理進行了簡單介紹,大家可以先參考一下《android root許可權破解分析》,本文只能說對root原理進行了方向性的描述,但是在一些具體的方面沒有描述清楚。本文將會對其進行一些必要的擴充套件和補充。
如果你進行過程式開發,在root過的手機上面獲得root許可權的**如下:?
1
2
3
4
5
process process = runtime.getruntime().exec(
"su"
);
dataoutputstream os =
new
dataoutputstream(process.getoutputstream());
......
os.writebytes(
"exit\n"
);
os.flush();
從上面**我們可以看到首先要執行su程式,其實root的秘密都在su程式中,《android root許可權破解分析》中講到android系統預設的su程式只能root和shell可以用執行su,這個是安全的。如果把這個限制拿掉,就是root破解了!
下面我們仔細分析一下程式是怎樣獲得root許可權的,如果對linux的su命令熟悉的朋友可能知道su程式都設定suid位,我們檢視一下我的手機(已經root破解)上的su許可權設定,
我們發現su的所有者和所有組都是root,是其實是busybox的軟鏈結,我們檢視busybox的屬性發現,其設定了suid和sgid,並且所有者和所有組都是root。suid和sgid的作用是什麼呢?如果你不太清楚,請參考《linux程序的實際使用者id和有效使用者id》,這樣執行busybox的普通使用者,busybox執行過程中獲得的是root的有效使用者。su程式則是把自己啟動乙個新的程式,並把自己許可權提公升至root(我們前面提到su其實就是busybox,執行期它的許可權是root,當然也有許可權來提公升自己的許可權)。
再強調一下不光root手機上su需要設定suid,所有的linux系統上的su程式都需要設定suid位。請參考一下uc伺服器的su的許可權情況:
我們發現su也設定了suid位,這樣普通使用者也可以執行su程式,su程式會驗證root密碼,如果正確su程式可以把使用者許可權提高的root(因為其設定suid位,執行期是root許可權,這樣其有許可權提公升自己的許可權)。
這樣我們就可以看出其實android系統的破解的根本原理就是替換掉系統中的su程式,因為系統中的預設su程式需要驗證實際使用者許可權(只有root和 shell使用者才有權執行系統預設的su程式,其他使用者執行都會返回錯誤)。而破解後的su將不檢查實際使用者許可權,這樣普通的使用者也將可以執行su程式, 也可以通過su程式將自己的許可權提公升。
到這裡大家對root破解不感到神秘了吧。root破解沒有利用什麼linux核心漏洞(linux核心不可能有這麼大的漏洞存在),可以理解成root 破解就是在你系統中植入「木馬su」,說它是「木馬」一點兒都不為過,假如惡意程式在系統中執行也可以通過su來提公升自己的許可權的這樣的結果將會是災難性 的。所以一般情況下root過手機都會有乙個superuser應用程式來讓使用者管理允許誰獲得root許可權,也算是給系統加了一層保險吧!
上文《android系統root破解原理分析》介紹了android系統root破解之後,應用程式獲得root許可權的原理。有一些網友提出對於root破解過程比較感興趣,也提出了疑問。本文將會對這個root破解過程進行分析,來解答這個問題。
通過上文《android系統root破解原理分析》 的介紹大家應該明白了root破解過程的終極目標是替換掉系統中的su程式。但是要想替換掉系統中su程式本身就是需要root許可權的,怎樣在root破 解過程中獲得root許可權,成為我們研究的重點了。下面我們先清點一下我們需要破解系統情況,假設需要破解的android系統具備如下條件:
1、可以通過adb連線到裝置,一般意味著驅動程式已經安裝。要想理解root破解過程我們首先需要了解一下adb工具,sdk中包含adb工具,裝置端有adbd服務程式後台 執行,為開發機的adb程式提供服務,adbd的許可權,決定了adb的許可權。具體使用者可檢視/system/core/adb下的原始碼,檢視 android.mk你將會發現adb和adbd其實是乙份**,然後通過巨集來編譯。2、但是adb獲得使用者許可權是shell使用者,而不是root。
檢視adb.c的adb_main函式你將會發現adbd中有如下**:?
1
2
3
4
5
6
7
8
9
10
11
12
int
adb_main(
int
is_daemon)
if
(secure)
if
(setuid(aid_shell) != 0)
如果發現setgid和setuid函式執行失敗,則adbd程序異常退出,就把這個漏洞給堵上了。為什麼這麼多設 備都沒有堵上這個漏洞呢?我覺得是裝置廠商的策略(不排除傻x的廠商存在哦),雖然知道怎麼封堵漏洞但是就是留著個後門給大家,讓第三方給自己定製 rom,提高自己系統的易用性。
至此我們把root的過程和root之後系統情況都進行了介紹,相信你也不會對root破解再神秘了吧!
Android root原理分析
綜合多篇文章,記錄備忘 步驟 1 通過漏洞獲得root許可權 2 獲得root許可權後,複製su檔案到,system xbin目錄下 su檔案時特殊定製的 3 安裝superuser.apk到手機 和su協作完成使用者的許可權確認 有的手機在每次重啟是都會檢查su問件,看它是否有變化 檔案本身和許可...
Android Root原理和流程分析
android手機的內部儲存裝置分ram和rom,ram是執行記憶體,掉電就會失去所有內容 rom中的內容掉電後也不會丟失。比如一台手機的規格引數裡寫著 2g ram,16g rom 理論上,ram越大,系統執行越流暢。像大型的3d遊戲,執行時需要約300m的記憶體,那麼在記憶體2g的手機上就可以流...
android,root技術 筆記
應用技術 1,刷recovery包 製作recovery包 2,edify語言 編寫updater script指令碼檔案 3,su命令獲取root 3,啟動動畫 4,應用技術 1,悄悄獲取root許可權 2,superuser.apk驗證授權 3,am命令呼叫顯示視窗,傳值 編寫updater s...