[Android Pro] android root權限破解分析


許 多機友新購來的Android機器沒有破解過Root權限,無法使用一些需要高權限的軟件,以及進行一些高權限的操作,其實破解手機Root權限是比較簡 單及安全的,破解Root權限的原理就是在手機的/system/bin/或/system/xbin/目錄下放置一個可執行文件“su”,這是一個二進 制文件,相當於電腦上的exe文件,僅僅在系統中置入這個“su”文件是不會給手機的軟件或硬件造成任何故障。

下面的代碼是android系統原版的su中的部分代碼,可以看出只允許getuid()為AID_ROOT和AID_SHELL的進程可以使用su進行登陸。
/* Until we have something better, only root and the shell can use su. */
myuid = getuid();
if (myuid != AID_ROOT && myuid != AID_SHELL) {
fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
return 1;
}
面在Superuser這個android程序中的su不再有上面的一部分,這樣任何進程都可以使用su進行登陸了,有一部分android程序要使用root權限可能的用法類似於(這個也是Superuser中的一部分代碼):

Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("mount -oremount,rw /dev/block/mtdblock3 /system\n");
os.writeBytes("busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su\n");
os.writeBytes("busybox chown 0:0 /system/bin/su\n");
os.writeBytes("chmod 4755 /system/bin/su\n");
os.writeBytes("exit\n");
os.flush();



而在上面提到的Superuser和android程序中的su源碼中都有這部分代碼:

if(setgid(gid) || setuid(uid)) {
fprintf(stderr,"su: permission denied\n");
return 1;
}

看上去這里就是進行權限切換的地方了。面普通用戶要能使用su,su的權限要是這樣:
-rwsr-xr-x. 1 root root 34904 11月 3 2010 /bin/su
這個和電腦版的su上是一樣的。

從 出上面的分析可以認為破解android的root權限的實質是:在系統中加入一個任何用戶都可能用於登陸的su命令。當然這首先要取得root權限才能 做到。在z4root這個android下的破解android的root權限的程序中有一個rageagainstthecage,可能就是設法得到 root權限的程序。

 

--------------------------------------------------------------------------------------

 

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

     網上有一篇文章已經對root破解的基本原理進行了簡單介紹,大家可以先參考一下《android root權限破解分析》,本文只能說對root原理進行了方向性的描述,但是在一些具體的方面沒有描述清楚。本文將會對其進行一些必要的擴展和補充。

     如果你進行過程序開發,在root過的手機上面獲得root權限的代碼如下:

 

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權限,也算是給系統加了一層保險吧!


免責聲明!

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



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