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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市惧财,隨后出現(xiàn)的幾起案子巡扇,更是在濱河造成了極大的恐慌,老刑警劉巖垮衷,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厅翔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搀突,警方通過查閱死者的電腦和手機(jī)刀闷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仰迁,“玉大人甸昏,你說我怎么就攤上這事⌒煨恚” “怎么了筒扒?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绊寻。 經(jīng)常有香客問我花墩,道長(zhǎng),這世上最難降的妖魔是什么澄步? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任冰蘑,我火速辦了婚禮,結(jié)果婚禮上村缸,老公的妹妹穿的比我還像新娘祠肥。我一直安慰自己,他們只是感情好梯皿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布仇箱。 她就那樣靜靜地躺著,像睡著了一般剂桥。 火紅的嫁衣襯著肌膚如雪忠烛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天权逗,我揣著相機(jī)與錄音美尸,去河邊找鬼。 笑死斟薇,一個(gè)胖子當(dāng)著我的面吹牛师坎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堪滨,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啊掏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼北启!你這毒婦竟也來了尾菇?” 一聲冷哼從身側(cè)響起示损,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犯眠,沒想到半個(gè)月后按灶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筐咧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年鸯旁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片量蕊。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铺罢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出残炮,到底是詐尸還是另有隱情韭赘,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布势就,位于F島的核電站泉瞻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苞冯。R本人自食惡果不足惜袖牙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舅锄。 院中可真熱鬧鞭达,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叨襟,卻和暖如春繁扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芹啥。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工锻离, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铺峭,地道東北人墓怀。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卫键,于是被迫代替她去往敵國和親傀履。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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