Android Root原理初探

來源:互聯網
上載者:User

Android Root原理初探
Root

Linux:Root == Windows:Adminstrator

Android是Linux系統嗎?

作業系統 = 系統核心 + 檔案系統
Linux發行版:Linux核心 + 檔案系統(ext3/4)
Android:Linux核心 + 檔案系統(ext3/4)

 

Android 沒有本地視窗系統

而Linux是可以脫離X視窗的。

Android 沒有glibc library
Android並不包括一整套標準的Linux應用程式

而Linux也是可以脫離這兩點的。

Android內建了專有的驅動程式

然並卵。Linux的核心也分主次,驅動程式也不是不能脫離的,只是去掉後無法識別對應的裝置,並不影響Linux的核心的裝載和運行。而且在Linux Kernel Configuration裡可以自由配置需要卸載的項目。不能因為增加了驅動就認為不是Linux。並不是決定作業系統性質的關鍵。判斷作業系統種類的並不是其上層建築,而是深層的系統核心和檔案結構。
Linux核心中與驅動相關且比較核心的是驅動介面(Linux驅動運行和安裝規範),是一套二進位規範。
綜上,Android實質上是Linux。

那麼,Root對於Android意味著什嗎?

用su命令切換到root使用者

Android為什麼要Root?刪除非官方或定製系統預裝的垃圾應用
擁有root許可權後直接複製 根據Android Rom複製 通過Recovery升級包方式複製
控制開機附加元件擁有更多許可權調試Linux驅動修改啟動畫面提取Root許可權的步驟1.刷一個合適的Recovery

方法一:在bootloader模式下複製整個檔案系統
方法二:在Recovery模式將檔案複製到Android裝置的指定目錄

刷入Clockwork Recovery

通過adb reboot bootloader命令或者關機下按組合按鍵進入bootloader模式。

fastboot:

危險的命令:

fastboot flash bootloader bootloader.img
// 如果bootloader.img錯誤,則需要更換主板

自毀命令:

fastboot erase bootloader
// 擦除

刷Recovery:

fastboot flash recovery recovery.img

重啟裝置<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxibG9ja3F1b3RlPg0KCTxwPmZhc3Rib290IHJlYm9vdDwvcD4NCjwvYmxvY2txdW90ZT4NCjxoNCBpZD0="2改造su命令的原始碼">2.改造su命令的原始碼

Android內建的su命令只允許root和shell使用者(adb shell)調用

3.製作Recovery刷機檔案(*.zip)

主要由待覆制的檔案和Edify語言(用於對檔案和目錄進行操作)編寫的指令檔組成
編寫Recovery升級包中的updater-script指令檔,將su命令複製到/system/xbin目錄中。

4.執行su命令提取Root許可權

改造後的su命令,可以被終端和App調用。

5.讓ROM本身擁有Root許可權(非必需)

不然進入終端執行su命令後才擁有Root許可權。

Edify

Android內嵌指令碼語言,用於編寫updater-script指令檔。
updater-script是Recovery Rom和升級包的核心。完全由函數組成。

ui_print(msg_1,…,msg_N);

用於在Recovery介面輸出字串,至少需要一個參數。指定多個參數,會將參數值連起來輸出。

run_program(prog, arg1,…,argN);

該函數用於執行程式,prog參數是必需的,表示要執行程式檔案的完整路徑。其他參數可選。如:

run_program(“/sbin/busybox”,”mount”,”/system”);

delete(file1,…,fileN);

刪除一個或多個檔案,參數為檔案的路徑。如:

delete(“/system/xbin/su”);

package_extract_dir(package_path, destination_path);

用於提取刷機包指定目錄package_path的所有檔案到目標目錄destination_path。

set_perm(uid, gid, mode, file1,…fileN);

設定一個或多個檔案的許可權。
uid是使用者id。gid是使用者組id。
如果想讓檔案的使用者和使用者組都是Root,需要將uid和gid設為0。

mount(fs_type, partition_type, location, mount_point);

掛載分區。如:

mount(“ext4”, “EMMC”, “/dev/block/paltform/s3c-sdhci.0/by-name/system”, “/system”);

unmount(mount_point);

卸載分區。如:

unmount(“/system”);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.