ROOT 原理初探

来源:互联网 发布:并行计算与性能优化 编辑:程序博客网 时间:2024/05/16 09:12

ROOT原理

  1. 操作系统的基本组成

    Linux: root == Windows: administrator

    操作系统 = 系统内核 + 文件系统

  2. App
    1) 存储App目录:
    I. 本机的: /data/app
    II. 系统的: /system/app

    2) 向/system/app目录下复制文件的方法
    I. 拥有root权限后
    II. 通过Android ROM方式
    III. 通过Recovery升级包方式

  3. 获取ROOT权限步骤
    1) 刷一个合适Recovery
    2) 改造su命令
    3) Recovery刷机文件
    4) 执行su命令提取ROOT权限
    5) 让ROM本身拥有ROOT权限

4.Edify语言
1) 输出字符串: ui_print(“hello world”);
2) 用于执行程序: run_program(“/sbin/busybox”,”mount”,”/system”);
3) 删除一个多个文件: delete(“/system/xbin/su”);
4) 复制文件或目录: package_extract_dir(“system”,”/system”);
5) 设置一个或多个文件的权限: set_perm(0,0,0777,”/system/xbin/su”);
6) 挂载分区: mount(“ext4”,”EMMC”,”/dev/block/platform/s3c-sdhci.0/by-name/system”,”/system”);
7) 卸载分区: unmount(“/system”);

  1. 刷机步骤
    1) 下载Recovery.–网址: http://www.clockworkmod.com/rommanager
    2) adb reboot bootloader
    3) fastboot
    危险的命令:
    I. fastboot flash bootloader bootloader.img
    II.自毁命令 fastboot erase bootloader
    4) fastboot flash recovery grouper.img
    5) fastboot reboot

  2. 编写updater-script脚本文件
    1) 以读写模式挂载/system
    2) 删除旧的su文件
    3) 复制新的su文件
    4) 修改su文件的权限
    5) 卸载/system
    脚本文件内容:
    ui_print(“————”);
    ui_print(“Recovery Upgrade Package”);
    ui_print(“————”);

    ui_print(“—Mounting /system —”);

    以读写模式挂载/system

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

    ui_print(“*Delete /system/xbin/su *“);

    删除旧的su文件

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

    ui_print(“* extracting files”);

    将刷机包中的system目录的所有文件复制到/system目录中的相应位置

    package_extract_dir(“system”,”/system”);

    设置su命令的权限, 将其变成可执行的

    set_perm(0,0,0777, “/system/xbin/su”);

    卸载/system

    unmount(“/system”);
    ui_print(“finished”);

  3. 制作Recovery升级包
    存放updater-script文件: META-INF/com/google/android
    存放su文件: system/xbin

  4. 复制su命令到/system/xbin目录
    adb reboot recovery
    adb sideload update.zip

  5. 提取root权限(两种情况)
    1) 在Android设备的终端中执行su命令提取ROOT权限
    I. adb shell
    II. su 进入root权限
    III. mount | grep system 查看当前物理目录
    IV. mount -o rw,remount /目录 设置为读写权限

    2) 在App中调用su命令提取ROOT权限
    Runtime.getRuntime().exec(“su”);
    OutputStream os = process.getOutputStream();
    os.write(“ls /system/app”.getBytes());
    os.flush;
    os.close();

  6. 修改Android设备的启动动画
    1) 基本方法: 只需要替换/system/media目录下的bootanimation.zip文件即可
    2) desc.txt文件内容结构
    [width] [height] [frame-rate]
    p [loop] [pause] [folder]
    p [loop] [pause] [folder]
    … …
    p [loop] [pause] [folder]
    其中:
    width: 动画播放的宽度
    height: 动画播放的高度
    frame-rate: 每秒播放的帧数
    loop: 当前part动画循环的次数
    pause: 当前part动画播放完后暂停的帧数
    folder: 当前part动画对应的静态图像文件存储的目录名称。

  7. su命令原理分析
    源代码文件: su.c

原创粉丝点击