亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android 操作系統獲取Root權限 原理詳細解析

2020-04-11 12:02:06
字體:
來源:轉載
供稿:網友

android root權限破解分析

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

下面的代碼是android系統原版的su中的部分代碼,可以看出只允許getuid()為AID_ROOT和AID_SHELL的進程可以使用su進行登陸。

復制代碼 代碼如下:

<SPAN style="FONT-SIZE: 18px"><STRONG>/* 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;
}</STRONG></SPAN>

面在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權限的程序。


第二篇文章:

如果你進行過程序開發,在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權限,也算是給系統加了一層保險吧!

通過上文《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)
{
    ......
    property_get("ro.secure", value, "");
    if (strcmp(value, "1") == 0) {
        // don't run as root if ro.secure is set...
        secure = 1;
        ......
    }

    if (secure) {
        ......


從中我們可以看到adbd會檢測系統的ro.secure屬性,如果該屬性為1則將會把自己的用戶權限降級成shell用戶。一般設備出廠的時候在/default.prop文件中都會有:
復制代碼 代碼如下:

ro.secure=1

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

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

復制代碼 代碼如下:

# adbd is controlled by the persist.service.adb.enable system property
service adbd /sbin/adbd
   disabled

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

/* then switch user and group to "shell" */
setgid(AID_SHELL);
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" */
if (setgid(AID_SHELL) != 0) {
    exit(1);
}

if (setuid(AID_SHELL) != 0) {
    exit(1);
}


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

至此我們把root的過程和root之后系統情況都進行了介紹,相信你也不會對root破解再神秘了吧!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品高潮呻吟久久av黑人| 国产欧美日韩综合精品| 国产精品久久久久久久天堂| 国产精品视频自拍| 欧美天天综合色影久久精品| 亚洲精品日产aⅴ| 精品国产91久久久久久老师| 欧美xxxx做受欧美| 成人黄色免费网站在线观看| 精品久久久久久中文字幕一区奶水| 日本不卡免费高清视频| 国外成人在线播放| 深夜福利日韩在线看| 亚洲欧美精品伊人久久| 夜夜嗨av一区二区三区免费区| 中文字幕精品av| 久久亚洲一区二区三区四区五区高| 欧美日韩国产精品一区| 97精品伊人久久久大香线蕉| 国产亚洲福利一区| 日韩国产高清视频在线| 成人在线精品视频| 亚洲视频在线播放| 丝袜美腿亚洲一区二区| 欧美国产高跟鞋裸体秀xxxhd| 国产精品一区av| 亚洲午夜精品视频| 国产精品99久久久久久人| 久久久亚洲影院| 91系列在线观看| 久久国产精品首页| 成人黄色片网站| 米奇精品一区二区三区在线观看| 日本一本a高清免费不卡| 色琪琪综合男人的天堂aⅴ视频| 欧美精品一区在线播放| 亚洲资源在线看| 国产一区二区三区在线看| 成人精品视频在线| 国产91色在线播放| 亚洲精品视频播放| 中文字幕日韩在线视频| 日韩av影视综合网| 国产精品三级久久久久久电影| 成人黄色在线免费| 2019av中文字幕| 日韩中文字幕在线视频播放| 亚洲第一视频在线观看| 国产精品成熟老女人| 国产91精品久久久久久久| 久久久女女女女999久久| 欧美高清视频在线播放| 日韩av中文字幕在线播放| 亚洲欧美成人精品| 国产亚洲一区二区在线| 81精品国产乱码久久久久久| 亚洲天堂影视av| 国产午夜精品美女视频明星a级| 亚洲福利视频网站| 国产视频观看一区| 91精品国产乱码久久久久久蜜臀| 欧美精品激情在线观看| 亚洲最大成人免费视频| 日韩成人在线视频观看| 色偷偷综合社区| 欧美激情区在线播放| 久久成人在线视频| 亚洲伦理中文字幕| 亚洲成年人影院在线| 中文字幕成人在线| 久久免费视频这里只有精品| 欧美福利视频在线观看| 国产精品爽爽ⅴa在线观看| 26uuu另类亚洲欧美日本一| 日韩av一区二区在线观看| 欧美成年人视频网站| 亚洲影院色无极综合| 亚洲美女精品成人在线视频| 国产精品精品国产| 日韩一二三在线视频播| 国产精品丝袜一区二区三区| 北条麻妃在线一区二区| 欧美日韩一区二区在线播放| 国产精品www色诱视频| 欧美与欧洲交xxxx免费观看| 青青草原成人在线视频| 欧美亚洲在线视频| 日韩av最新在线观看| 日韩中文字幕精品视频| 国产成人+综合亚洲+天堂| 91九色单男在线观看| 91网站在线免费观看| 久久这里只有精品视频首页| 色噜噜国产精品视频一区二区| 亚洲欧美制服中文字幕| 一本色道久久综合狠狠躁篇的优点| 麻豆国产va免费精品高清在线| 欧美专区日韩视频| 97视频在线观看成人| 国产丝袜一区二区三区免费视频| 欧美中在线观看| 欧美色欧美亚洲高清在线视频| 日韩一区二区三区国产| www.日韩不卡电影av| 成人a免费视频| 一本一道久久a久久精品逆3p| 欧美精品少妇videofree| 亚洲色图偷窥自拍| 丝袜美腿亚洲一区二区| 国产精品久久久999| 九九九热精品免费视频观看网站| 亲子乱一区二区三区电影| 国产亚洲精品va在线观看| 日韩在线观看免费| 国产亚洲欧美日韩一区二区| 久久久久久久一区二区| 欧美成人午夜激情视频| 国产精品第10页| 国产视频丨精品|在线观看| 亚洲大胆人体av| 九九九久久久久久| 91精品国产91久久久久久最新| 日韩在线观看视频免费| 亚洲人成在线观看| 亚洲网站在线播放| 国产mv免费观看入口亚洲| 国产福利视频一区| 亚洲网站在线观看| 日韩欧美成人网| 久久久国产精品亚洲一区| 91久久精品一区| 精品亚洲一区二区三区四区五区| 亚洲国产又黄又爽女人高潮的| 国产精品视频一区二区高潮| 欧美日韩中文字幕在线| 91香蕉电影院| 欧美黑人性猛交| 亚洲激情视频在线| 亚洲精品网址在线观看| 在线观看国产精品91| 91欧美精品午夜性色福利在线| 色综合视频一区中文字幕| 国产偷亚洲偷欧美偷精品| 成人免费直播live| 国产丝袜一区二区三区| 美女扒开尿口让男人操亚洲视频网站| 亚洲xxx视频| 成人亚洲欧美一区二区三区| 国产精品视频导航| 久色乳综合思思在线视频| 午夜精品一区二区三区视频免费看| 精品亚洲永久免费精品| 欧美激情欧美激情在线五月| 国产成人鲁鲁免费视频a| 欧美国产在线电影| 尤物yw午夜国产精品视频明星| 久久精品2019中文字幕| 91精品国产91久久久久久不卡| 色哟哟亚洲精品一区二区| 亚洲日本中文字幕| 亚洲一区中文字幕| 国产精品三级久久久久久电影| 国产精品一区二区av影院萌芽| 中文字幕日韩精品有码视频|