Android系統root破解原理分析(續)

2021-06-19 07:41:14 字數 2625 閱讀 7125

上文《

android系統root破解原理分析

》介紹了android系統root破解之後,應用程式獲得root許可權的原理。有一些網友提出對於root破解過程比較感興趣,也提出了疑問。本文將會對這個root破解過程進行分析,來解答這個問題。

通過上文《

android系統root破解原理分析

》 的介紹大家應該明白了root破解過程的終極目標是替換掉系統中的su程式。但是要想替換掉系統中su程式本身就是需要root許可權的,怎樣在root破 解過程中獲得root許可權,成為我們研究的重點了。下面我們先清點一下我們需要破解系統情況,假設需要破解的android系統具備如下條件:

1、可以通過adb連線到裝置,一般意味著驅動程式已經安裝。 

2、但是adb獲得使用者許可權是shell使用者,而不是root。

要想理解root破解過程我們首先需要了解一下adb工具,sdk中包含adb工具,裝置端有adbd服務程式後台 執行,為開發機的adb程式提供服務,adbd的許可權,決定了adb的許可權。具體使用者可檢視/system/core/adb下的原始碼,檢視 android.mk你將會發現adb和adbd其實是乙份**,然後通過巨集來編譯。

檢視adb.c的adb_main函式你將會發現adbd中有如下**:

int adb_main(int is_daemon)

2:
10:
11:

if (secure)

17: }

從中我們可以看到adbd會檢測系統的ro.secure屬性,如果該屬性為1則將會把自己的使用者許可權降級成shell使用者。一般裝置出廠的時候在/default.prop檔案中都會有:

這樣將會使adbd啟動的時候自動降級成shell使用者。

然後我們再介紹一下adbd在什麼時候啟動的呢?答案是在init.rc中配置的系統服務,由init程序啟動。我們檢視init.rc中有如下內容:

2: service adbd /sbin/adbd
3:     disabled

對android屬性系統少有了解的朋友將會知道,在init.rc中配置的系統服務啟動的時候都是root許可權(因為init進行是root許可權,其子程式也是root)。由此我們可以知道在adbd程式在執行:

/* then switch user and group to "shell" */

2: setgid(aid_shell);
3: setuid(aid_shell);

**之前都是root許可權,只有執行這兩句之後才變成shell許可權的。

這樣我們就可以引出root破解過程中獲得root許可權的方法了,那就是讓以上面setgid和setuid函式執行失敗,也就是降級失敗,那就繼續在root許可權下面執行了。

這其實利用了乙個rageagainstthecage漏洞,具體分析請參考《

android adb setuid提權漏洞的分析

》和《rageagainstthecage

》。這裡面做乙個簡單說明:

1、出廠設定的ro.secure屬性為1,則adbd也將執行在shell使用者許可權下;

2、adb工具建立的程序ratc也執行在shell使用者許可權下;

3、ratc

一直建立子程序(ratc建立的子程式也 將會執行在shell使用者許可權下),緊接著子程式退出,形成殭屍程序,占用shell使用者的程序資源,直到到達shell使用者的程序數為 rlimit_nproc的時候(包括adbd、ratc及其子程式),這是ratc將會建立子程序失敗。這時候殺掉adbd,adbd程序因為是 android系統服務,將會被android系統自動重啟,這時候ratc也在競爭產生子程式。在adbd程式執行上面setgid和setuid之 前,ratc已經建立了乙個新的子程序,那麼shell使用者的程序限額已經達到,則adbd程序執行setgid和setuid將會失敗。根據**我們發 現失敗之後adbd將會繼續執行。這樣adbd程序將會執行在root許可權下面了。

3、這是重新用adb連線裝置,則adb將會執行在root許可權下面了。

通過上面的介紹我們發現利用rageagainstthecage漏洞,可以使adbd獲得root許可權,也就是adb獲得了root許可權。拿到root許可權剩下的問題就好辦了,複製破解之後的su程式到系統中(見上文

《android系統root破解原理分析

》的介紹),都是沒有什麼技術含量的事情了。

其實堵住adbd的這個漏洞其實也挺簡單的:

/* then switch user and group to "shell" */

2:

if (setgid(aid_shell) != 0)

5:

if (setuid(aid_shell) != 0)

如果發現setgid和setuid函式執行失敗,則adbd程序異常退出,就把這個漏洞給堵上了。為什麼這麼多設 備都沒有堵上這個漏洞呢?我覺得是裝置廠商的策略(不排除傻x的廠商存在哦),雖然知道怎麼封堵漏洞但是就是留著個後門給大家,讓第三方給自己定製 rom,提高自己系統的易用性。

至此我們把root的過程和root之後系統情況都進行了介紹,相信你也不會對root破解再神秘了吧!你對本文和上文有什麼意見歡迎和我**。

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...

Android系統root破解原理分析

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