zoukankan      html  css  js  c++  java
  • 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

    重新启动设备

    fastboot reboot

    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”);

  • 相关阅读:
    Oracle sql优化
    Oracle解决锁表语句与批量生成解锁语句
    使用Spring Task轻松完成定时任务
    oralce数据表空间满了
    关于出现 org.apache.commons.lang.exception.NestableRuntimeException的解决方法
    linux根分区满了如何处理,查找大文件方法
    bt协议详解 基础篇(上)
    如何做一个开心的程序员
    程序猿是如何解决SQLServer占CPU100%的
    SqlServer索引的原理与应用
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7098589.html
Copyright © 2011-2022 走看看