天天看點

[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");

看上去這裡就是進行權限切換的地方了。面普通使用者要能使用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過的手機上面獲得root權限的代碼如下:

     下面我們仔細分析一下程式是怎樣獲得root權限的,如果對Linux的su指令熟悉的朋友可能知道su程式都設定SUID位,我們檢視一下我的手機(已經root破解)上的su權限設定,

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

本文轉自demoblog部落格園部落格,原文連結http://www.cnblogs.com/0616--ataozhijia/p/3844456.html如需轉載請自行聯系原作者

demoblog

繼續閱讀