|
事實上證明,我成功的被一個軟件鄙視了。我搞了幾個星期的艱苦root之旅被一個軟件給弄好了。我很傷心。結果在我開機的時候,竟然發現了我修改的文件成功的出現在了手機的引導文件init.rc中,并且我強制設置的default.prop也以default.prop~文件的形式出現了。下面我把我這幾個星期的研究成果放在這里,大家可以參考看看辦。如果能成功收益,那將是極好的。
一、手機是如何獲取root權限的
像root大師、百度一鍵root等軟件,是怎樣root你的手機的?root的原理是什么?
實際上,root就是在你的手機/system/bin以及/system/xbin文件夾下放入二進制文件:“su“。是的,由于是二進制文件,所以沒有任何后綴。安卓是linux與JAVA模擬器的混合操作系統,其基本核心還是LINUX系統。所以可執行文件是以二進制文件形式存在的。su文件在Linux平臺上是一個獲取權限的程序。在一臺Linux電腦上,若想要獲取root(類似于在一臺WIN電腦獲得Administrator權限,即獲得電腦完全控制權限),只用在終端下如此輸入:
~$su root
~$password:
~#
是的。你可以清楚的發現提示符$變成了#,證明獲取了ROOT權限。而安卓可以直接SU不用輸入任何密碼的。你可以直接在一臺裝有超級終端的并獲取 root權限的手機上輸入
~$su
~#
直接就變成了#號。證明成功了。此時你手機上的授權管理軟件可能提示說明授權超級用戶。同意即可。
但是,普通的手機里不會有su文件的。那么,我們就要親自動手了。例如,一個我曾經嘗試root的方法,也是網上給的比較多的,采用adb(android debug bridge)root的方法:電腦端運行(以LINUX電腦為例 )adb
~$./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
1345643193 no permissions
(監聽5037端口)
~$./adb shell
$cd /system/bin
$root
#remount
#push ./su /system/bin/
實際上,往往出現這樣的提示:permission denied(權限不夠)。當你嘗試root命令時,就會這樣提示了。而你真的能這樣做的時候,必須已經獲取root權限了。這樣就是一個死循環。所以,這樣不行啊。嘗試卡刷吧。
二、關于卡刷,update.zip升級包的制作
那么,就要在系統在以root權限啟動時,進行root。卡刷是不錯的選擇。就來制作刷機包吧
在recovery下升級,需要制作update包。而直接以系統文件目打包錄是不行的(我試過)。沒有簽名認證的。
制作包:需要 META-INF文件夾。把system(有su的bin和xbin)與META-INF放在一起
修改 META-INF/com/google/android/update-script
用記事本打開,并修改成如下內容(我用gedit打開)(綠色是注釋):
show_progress(0.100000,0);show_progress(0.500000,0); //顯示進度條//
mount("MTD", "system", "/system"); //掛載system以777權限//
package_extract_dir("system","/system"); //復制文件//
set_perm(0,0,04755,"/system/bin/su");
set_perm(0,0,04755,"/system/xbin/su"); //授予su755權限//
unmount("/system"); //卸載掛載點//
ui_print("Well done..."); //顯示” 成功 “//
把META-INF和system一起打包為zip文件(命名update.zip)。下面開始進行簽名:
首先配置java環境(以linux為例,weindows請自行谷歌):
$sudo apt-get default-jdk
下載公鑰以及私鑰:testkey.pk8 testkey.x509.pem放入update.zip文件夾下。cd進入:
$java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip UPDATE_signed.zip
這樣卡刷包就制作好了,可以在你的文件目錄下發現已經簽名好的UPDATE_signed.zip文件了。那么刷機吧。
但是我發現一個問題,由于原裝的recovery是<3e>版本,基本上不能刷第三方卡刷包,提示簽名認證失敗。只能更換成CWMrecovery了。
三、刷機準備(很蛋疼只能拿到win下刷機)
聯發科手機是很難刷機的。但也很好刷。首先獲取你手機的cpu主板型號。可以在Factory Mode察看。大家自己摸索吧。通過察看手機,知道是MT6575 T07 版本的手機(尼采a360s)
下載rom包。上網竟然能搜到。若搜不到,可以用FLASH_TOOL來Dump你手機的ROM。刷機方法網上一大堆,這里不贅述。但是很明顯,沒有自己手機能用的CWMrecovery。
四、自制刷機包
下載國外大神做的img解壓工具:mkbootimg(Linux平臺)
找到原版recovery鏡像以及CMWrecovery
解壓:
$./unpack-MT65xx.pl recovery.img
$./unpack-MT65xx.pl CMWrecovery.img
獲得內核和鏡像文件: recovery.img-kernel.img recovery.img-ramdisk
把第二個里面的sbin文件夾下文件全部復制到第一個包的sbin下,確定覆蓋所有(特別是recovery文件,是recovery的內核文件)。
修改default.prop:
## ADDITIONAL_DEFAULT_PROPERTIES
#
ro.secure=0
ro.allow.mock.location=0
persist.mtk.aee.aed=on
ro.debuggable=1
persist.service.adb.enable=1
service.adb.root=1
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=alpsepade
ro.build.display.id=epadeALPS.GB2.MP.V2
...(省略)(紅字特別重要,一定這樣改)
把修改好的文件保存,再次打包:
$./repack-MT65xx.pl -recovery recovery.img-kernel recovery.img-ramdisk newrecovery.img
這樣你就獲得了你自己的newrecovery.img文件,刷入手機用吧。
(很不幸,這種方法好像BUG很多,自己根本不好解決,要多次嘗試各種版本的CWMrecovery,成功率很低,很不好弄。我自己做的img文件差不多成了死機專包,刷了很多遍,手機進入recovery就卡死。系統到無大礙。)
里番:recovery.img以及boot.img進一步研究以及安卓啟動蛋疼的修改(有關init.rc以及default.prop)
本次沒有使用任何第三方包,以修改原包為主:
打開init.rc(以我的為例)(recovery.img)(藍色的是我自己改動的):
on early-init
start ueventd
#掛載以及新建目錄
on init
export PATH /sbin
export ANDROID_ROOT /system
export ANDROID_DATA /data
export EXTERNAL_STORAGE /sdcard
symlink /system/etc /etc
mkdir /sdcard
mkdir /system
mkdir /data
mkdir /cache
mount /tmp /tmp tmpfs
insmod /sbup.ko
mknod /dev/sec c 182 0
chmod 0660 /dev/sec
chmod 0777 /system/bin
chmod 0777 /system/xbin
#啟動
on boot
ifup lo
hostname localhost
domainname localdomain
class_start default
service ueventd /sbin/ueventd
critical
service recovery /sbin/recovery
service adbd /sbin/adbd recovery
disabled
# 總是開啟adb
on property:ro.debuggable=1
#write /sys/class/usb_composite/adb/enable 1
#start adbd
setprop service.adb.root 1
# 重新啟動adbd 讓它以管理員權限運行
on property:service.adb.root=1
write /sys/class/usb_composite/adb/enable 0
restart adbd
write /sys/class/usb_composite/adb/enable 1
on property:persist.service.adb.enable=1
start adbd
on property:persist.service.adb.enable=0
stop adbd
#強制修改default.prop中的值
on property:ro.secure=1
setprop ro.secure 0
可自行到csdn上搜索各種文章有關安卓init.rc文件的。我在這里僅僅做了簡單的注釋。
下面是我的猜想,不一定正確 !!!
安卓啟動是依靠上面的啟動腳本啟動的。同時參照default.prop文件里的設置進行啟動管理。同時又能夠修改default.prop文件的內容。
解壓boot.img也能得到init.rc以及default.prop。對比可以發現,這次的這兩個文件就大的多了。我嘗試修改了boot.img的init.rc文件:
. . . . .
on property:ro.secure=0
start console
. . . . .
on property:persist.service.adb.enable=1
chmod 0777 /system/bin
chmod 0777 /system/xbin
chmod 0777 /system
start xlogdebugchanged
start adbd
on property:persist.service.adb.enable=0
chmod 0755 /system/bin
chmod 0755 /system/xbin
chmod 0755 /system
start xlogdebugchanged
stop adbd
. . . . .
可以看出,我修改的部分(紅字)是想嘗試獲取777權限。修改后刷入手機發現的確起作用了,并且生成了default.prop~文件以及init.rc~文件,并且init.rc的確有我修改的內容,這樣修改不影響手機的任何功能。刷入后我發現,default.prop中persist.service.adb.enable=0
所以都是755權限。也無法驗證是否起效。以后我還會深入研究的。
福利:MTKroot工具
逛xda發現的,還是中文工具。竟然很快就root了手機。我成功的(很成功的)被完全鄙視了。。。。。。內心很不爽。讓我一個人靜一靜。要工具的請留言。
。。
。
.。
一口氣寫這么長,我只想說:
累死我了!!!
(標準結局)
|
|