Android手機(jī)手動(dòng)Root

?Superuser?這是一款可以管理?root?權(quán)限的程序,可以在?Android?手機(jī)上操作使用,常常被用來判斷你的手機(jī)是否?root?過,因?yàn)樾薷倪^的?su?版本都是搭配此程序使用的,故一般有?root?過的手機(jī)應(yīng)該都會(huì)裝?Superuser 總結(jié)流程:

設(shè)法拿到?root?權(quán)限?->?更改系統(tǒng)為可讀寫狀態(tài)?->?把修改版的?su?放進(jìn)?/system/bin?->?安裝?Superuser.apk?(擺進(jìn)?/system/app?里)?->?回復(fù)系統(tǒng)狀態(tài)?->?收工Root?方式:手動(dòng)處理使用?Android?SDK?之?adb?程序,透過?adb?push?把檔案移到手機(jī)內(nèi),并透過?adb?shell?連進(jìn)手機(jī),后續(xù)動(dòng)作如?root?原理流程透過?SuperOneClick.exe?代勞實(shí)例參考:[Android]?Sony?Ericsson?XPERIA?X8?-?Root?教學(xué)、關(guān)閉拍照聲音,仔細(xì)看程序的輸出的每一步,就是上述?root?原理的流程啦透過安裝某個(gè)程序?(*.apk)透過他搶到執(zhí)行權(quán)限,接著把程序內(nèi)偽裝成圖檔的程序執(zhí)行(副檔名皆為?png?或?jpg?類的),如此一來也能搞定透過?update.zip?進(jìn)行系統(tǒng)回復(fù)仔細(xì)去看?script?就可以看到?root?原理的流程喔在此以?Nexus?One?with?Android?2.3.3?為例,在?Ubuntu?10.04?進(jìn)行手動(dòng)?root?流程:以下是以?Nexus?One?with?Android?2.3.3?進(jìn)行測(cè)試的,不確定是否適用于其他手機(jī)環(huán)境,并且?root?手機(jī)存在風(fēng)險(xiǎn),其自行評(píng)估負(fù)責(zé),在此僅供個(gè)人筆記使用Step?0:取得?Android?SDK?(此步驟可以跳過,因?yàn)榻酉聛硭璧臋n案都在?GingerBreak.zip?里都有)只需從?Android?SDK?-?http://developer.android.com/sdk/index.html?下載?Android?SDK?后,并更新?SDK?即可。(執(zhí)行?Android?SDK?需要?Java?執(zhí)行環(huán)境,別忘了抓一下?Java?SDK?啦)若在?Windows?XP?則需要更新?Android?SDK?以取得驅(qū)動(dòng)程序,驅(qū)動(dòng)程序擺在?C:\Program?Files\android-sdk\extras\google\usb_driver\?里,記得?Nexus?One?有普通模式(Google,?Inc.?Nexus?One)和?fastboot?模式(htc,?Inc.?Android?1.0),兩者所使用的驅(qū)動(dòng)程序不同,但資料都在上述的目錄中。Step?1:使用?GingerBreak.zip?為例,在?Simple?SDK?setup?and?manual?root?guide?(Windows)?下載里頭有兩個(gè)目錄,一個(gè)是有?adb?程序,另一個(gè)有?Nexus?One?之?Windows?上的驅(qū)動(dòng)程序。Step?2:在?Ubuntu?10.04?上,設(shè)定?USB?對(duì)應(yīng);在?Windows?上,則是安裝驅(qū)動(dòng)程序(當(dāng)設(shè)備接時(shí),透過指定驅(qū)動(dòng)程序的目錄來安裝)此為?Ubuntu?10.04?的設(shè)置,若是?Windows?可跳過$?sudo?vim?/etc/udev/rules.d/51-android.rules#?adb?protocol?on?passion?(Nexus?One)SUBSYSTEM=="usb",?ATTR{idVendor}=="18d1",?ATTR{idProduct}=="4e12",?MODE="0600",?OWNER=""#?fastboot?protocol?on?passion?(Nexus?One)SUBSYSTEM=="usb",?ATTR{idVendor}=="0bb4",?ATTR{idProduct}=="0fff",?MODE="0600",?OWNER=""#?adb?protocol?on?crespo?(Nexus?S)SUBSYSTEM=="usb",?ATTR{idVendor}=="18d1",?ATTR{idProduct}=="4e22",?MODE="0600",?OWNER=""#?fastboot?protocol?on?crespo?(Nexus?S)SUBSYSTEM=="usb",?ATTR{idVendor}=="18d1",?ATTR{idProduct}=="4e20",?MODE="0600",?OWNER=""別忘了將??替換掉。$?sudo?service?udev?restartStep?3:正式進(jìn)入?root?流程,使用?adb?指令與?Nexus?One?互動(dòng)首先,將?Nexus?One?啟動(dòng)?USB?Debug?模式,在?[設(shè)定]?->?[應(yīng)用程序]?->?[開發(fā)]?->?[USB?偵錯(cuò)]?后,并使用?micro?usb?與?PC?連接使用?adb?devices?確認(rèn)是否有連到機(jī)器,應(yīng)該要可以看到?HT#####?的東西:

$?adb?devices使用?adb?push?將?GingerBreak.zip?里的?su?、?Superuser.apk?、GingerBreak?和?busybox?復(fù)制到?/data/local/tmp?中:

$?adb?/path/GingerBreak/su?/data/local/tmp/

$?adb?/path/GingerBreak/Superuser.apk?/data/local/tmp/

$?adb?/path/GingerBreak/GingerBreak?/data/local/tmp/

$?adb?/path/GingerBreak/busybox?/data/local/tmp/

關(guān)于?busybox?的東西,其實(shí),主因是?Android?手機(jī)內(nèi)的環(huán)境沒有?cp?指令,所以上述作者透過?busybox?來做?copy?的動(dòng)作。使用?adb?shell?連進(jìn)手機(jī)查看:

$?adb?shell

$?cd?/data/local/tmp

$?ls?-lbusyboxSuperuser.apkGingerBreaksu透過?GingerBreak?取得?root?權(quán)限:

$?cd?/data/local/tmp$?chmod?755?GingerBreak

$?./GingerBreak[**]?Gingerbreak/Honeybomb?--?android?2.[2,3],?3.0?softbreak[**]?(C)?2010-2011?The?Android?Exploid?Crew.?All?rights?reserved.[**]?Kudos?to?jenzi,?the?#brownpants-party,?the?Open?Source?folks,[**]?Zynamics?for?ARM?skills?and?Onkel?Budi[**]?donate?to?7-4-3-C@web.de?if?you?like[**]?Exploit?may?take?a?while![+]?Plain?Gingerbread?mode![+]?Found?system:?0x########?strcmp:?0x########[+]?Found?PT_DYNAMIC?of?size?232?(29?entries)[+]?Found?GOT:?0x########[+]?Using?device?/devices/platform/goldfish_mmc.0

·vold:?0063?GOT?start:?0x########?GOT?end:?0x########

·vold:?0063?idx:?-####?fault?addr:?0x########

[+]?fault?address?in?range?(0x########,idx=-####)[+]?Calculated?idx:?-####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

·vold:?0635?idx:?-000####

[!]?dance?forever?my?only?one#當(dāng)看到?"dance?forever?my?only?one"?以及提示符號(hào)從?"$"?換成?"#"?時(shí),代表取得"暫時(shí)性"的?root?權(quán)限了。依照?GingerBreak?的執(zhí)行過程,感覺有點(diǎn)類似透過?Buffer?Overflow?去取的?root?權(quán)限,但細(xì)節(jié)不清楚還需研究。趁著?root?權(quán)限時(shí),將系統(tǒng)設(shè)定為可讀寫:

#?mount.../dev/block/mtdblock3?/system?yaffs2?ro,relatime?0?0...

#?mount?-oremount,rw?/dev/block/mtdblock3?/system

#?mount.../dev/block/mtdblock3?/system?yaffs2?rw,relatime?0?0...將?su?和?Superuser.apk?移到特定位置:

#?cd?/data/local/tmp#?chmod?755?busybox

#?chmod?777?/system/bin?/system/app

#?./busybox?cp?/data/local/tmp/su??/system/bin/

#?./busybox?cp?/data/local/tmp/busybox??/system/bin/

#?./busybox?cp?/data/local/tmp/Superuser.apk?/system/app

#?chown?root?/system/bin/su?/system/bin/busybox

#?chmod?4755?/system/bin/su

#?chmod?755?/system/bin?/system/app回復(fù)系統(tǒng)狀態(tài):

#?mount.../dev/block/mtdblock3?/system?yaffs2?rw,relatime?0?0...

#?mount?-oremount,ro?/dev/block/mtdblock3?/system#?mount.../dev/block/mtdblock3?/system?yaffs2?ro,relatime?0?0...清除垃圾:

#?cd?/data/local/tmp

#?lsbusyboxshboomshSuperuser.apkGingerBreaksu

#?rm?busybox?sh?boomsh?Superuser.apk?GingerBreak?su

#?ls

#

收工!此時(shí)可以在手機(jī)上看到?Superuser?程序,接著離開?root?環(huán)境、adb?shell:#?exit$?exit別忘了把手機(jī)重開,就完成?root?動(dòng)作!以?adb?shell?測(cè)試?root:重開機(jī)后,使用?adb?shell?與手機(jī)連線,并使用?su?指令切換成?root,可以看見手機(jī)畫面有訊息:$?adb?shell$?su如果沒有動(dòng)作,隨著倒數(shù)時(shí)間一樣會(huì)被拒絕,而按下拒絕的結(jié)果,那就是熟悉的拒絕句子:su:?permission?denied若按下允許,自然就會(huì)從?"$"?換成?"#"?并取得?root?權(quán)限。

以?app?測(cè)試?root:從?Android?Market?安裝?SSHDroid?這程序,這是?SSH?Server?,把他的預(yù)設(shè)開啟的?port?調(diào)到?22?(<1024也可),接著選?Start?后,可以看到詢問頁面:一樣按下拒絕程序就會(huì)顯示相關(guān)錯(cuò)誤訊息,若按下允許,那就會(huì)正常執(zhí)行,并可以看到服務(wù)成功綁在?22?port:接著可以透過?ssh?root@10.0.2.3?的方式登入?Android?手機(jī),此時(shí)就是以?root?權(quán)限執(zhí)行任何動(dòng)作囉!最后,來提提上述重要程序的細(xì)節(jié),先來說說?GingerBreak?這只程序,總共才?550?行上下,但使用的系統(tǒng)觀念很多,我也還不太了解,稍微筆記:復(fù)制一份?/proc/self/exe?和?/system/bin/sh?擺在?/data/local/tmp?中,分別為?boomsh?和?sh依照系統(tǒng)編譯的版本,決定等會(huì)要使用的策略從?/proc/net/netlink?中,取出執(zhí)行中的?vold?信息(pid)從?/system/libc/libc.so?找尋?system?和?strcmp?相關(guān)的特征從?/system/bin/vold?中,找尋相關(guān)信息(還不太懂,晚點(diǎn)再看)從?/etc/vold.fstab、/system/etc/vold.fstab?中,找尋一個(gè)?dev_mount?裝置,若都找不到改用?/devices/platform/msm_sdcc.2/mmc_host/mmc1?。透過?socket?不斷寫信息給執(zhí)行中的?vold?(在?vold?src?中可看到?process_config函數(shù)),類似請(qǐng)他掛載裝置。一直重復(fù)動(dòng)作?7?直到系統(tǒng)出錯(cuò)而拿到?root?權(quán)限。關(guān)于?GingerBreak?的部分還不太懂,上述極可能有誤,有空再仔細(xì)查看。接著提提?su?的部分,原版?su?部份,在?http://android.git.kernel.org/?p=platform/system/extras.git;a=blob;f=su/su.c?可看到?line?60?的片段:/*?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;}可知當(dāng)執(zhí)行的?uid?必須是?AID_ROOT?或?AID_SHELL?時(shí),才能取得權(quán)限。看看修改后的?su,在?https://github.com/ChainsDD/su-binary?可取得?su.c、su.h?和?activity.cpp?三程序,其中?main?寫在?su.c,稍微研究一下流程:取得等待使用?root?權(quán)限的程序指令如果運(yùn)行身份是?AID_ROOT?就讓他通過,結(jié)束A從數(shù)據(jù)庫的紀(jì)錄中,判斷該程序指令是否已經(jīng)被設(shè)定成允許或拒絕,如果數(shù)據(jù)庫里有資料,那馬上回應(yīng)?allow?或?deny,結(jié)束B如果數(shù)據(jù)庫中沒資料,接著開啟一個(gè)?socket?連線,并且隨后叫起?Superuser?管理界面,詢問使用者是否要允許或拒絕從?Superuser?界面得知使用者的回應(yīng),透過?sockect?回傳,而?su?將依照結(jié)果給予?allow?或?deny,結(jié)束C上述共有?3?種正常的結(jié)束方式,不正常的結(jié)束就不多提。因此,這個(gè)?su?程序,整體上須搭配?Superuser.apk?來使用,依需求叫起?com.noshufou.android.su.REQUEST?或?com.noshufou.android.su.NOTIFICATION?出來,并把使用者決定的結(jié)果回傳至?socket?連線。除此之外,若使用者勾選記憶目前的設(shè)定,代表以后將默認(rèn)為允許或拒絕,那?Superuser?界面上還會(huì)把允許或拒絕的結(jié)果一同紀(jì)錄到?databases?中。那?root?的安全問題?Q1:惡意程序若直接先改寫數(shù)據(jù)庫資料,不就可以安然通行?由?su.h?中得知,數(shù)據(jù)庫擺在?/data/data/com.noshufou.android.su/databases/permissions.sqlite?位置,該路徑上的存取是需要?root?權(quán)限,因?yàn)閻阂獬绦蜻€沒取得?root?權(quán)限,所以無法變更數(shù)據(jù)庫內(nèi)容。但他也還是可以走?GingerBreak?流程,透過漏洞取得?root?權(quán)限。Q2:只要都透過?Superuser?管理,這樣就十分安全嗎?不。假設(shè)有?A,?B?兩個(gè)程序,其中?A?是界面上看起來超贊超方便的便利程序,但他在使用時(shí)需要?root?權(quán)限,而使用者也給予并默認(rèn)后,以后他就用?root?權(quán)限一直運(yùn)行。結(jié)果?B?是惡意程序,雖然他無法拿到?root?權(quán)限,但?A?可以幫他啊(幫?B?更新資料至數(shù)據(jù)庫中),所以,一只惡意程序無法自行運(yùn)行,但如果有搭配套餐的模式,那么?B?就有機(jī)會(huì)取得。整體上這個(gè)權(quán)限機(jī)制并非十分安全,但對(duì)一般情況來說,算是夠了。Q3:如何安全使用?定期去查看?Superuser?上的紀(jì)錄,請(qǐng)盡可能搞懂給予?root?權(quán)限的程序到底做了什么事。隨意下載的程序,沒有使用要記得移除。結(jié)論:記得去年就看?iOS?app?相關(guān)文章,隨著?app?的量大,就曾聽到別人提過,以后使用者可能都只使用大廠軟件,就像現(xiàn)實(shí)生活中,人會(huì)有追求名牌的行為,這個(gè)現(xiàn)象將導(dǎo)致名牌廠會(huì)越做越好越大,在加上商譽(yù)影響,名牌廠就比較不會(huì)有惡意程序的行為,雖然仍不可保證就絕對(duì)不會(huì)有惡意。此外,其他無名程序,依舊存在惡意程序的機(jī)會(huì),為了降低風(fēng)險(xiǎn),資安意識(shí)下,就比較會(huì)去用?open?source?或原廠軟件,以通訊軟件來說,有?MSN、Mail?等類,與賬號(hào)、隱私有高度相關(guān)性,雖然原廠不見得做的好或方便操作等,但基于資安方面,還是建議安裝原廠程序,不然就是使用有用原廠公開?API?的開發(fā)程序。

參考資料:https://github.com/ChainsDD/su-binary/blob/master/su.h

https://github.com/ChainsDD/su-binary/blob/master/su.c

https://github.com/ChainsDD/su-binary/blob/master/activity.cpp

https://github.com/ChainsDD/Superuser/blob/master/AndroidManifest.xml

https://github.com/ChainsDD/Superuser/blob/master/src/com/noshufou/android/su/SuRequest.java

https://github.com/ChainsDD/Superuser/blob/master/src/com/noshufou/android/su/SuNotificationReceiver.java

http://rootzwiki.com/wiki/index.php/Gingerbreak

http://wikifilez.com/Root%20Files/gbreak/GingerBreak.tgz

http://wikifilez.com/Root%20Files/gbreak/GingerBreak-v1.00.apk

http://wikifilez.com/Root%20Files/gbreak/GingerBreak-v1.10.apk

http://android.git.kernel.org/?p=platform/system/vold.git;a=tree

http://android.git.kernel.org/?p=platform/system/vold.git;a=blob;f=main.cpp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,475評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,834評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,009評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,516評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,728評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,249評(píng)論 3 399
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,484評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容