• android user如何打开一个版本号root才干


    首先,你要确认你要打开adbd 的root 才干,或者让app 它有可能获得root 才干。
     
    (1). adbd 的root 才干
    我们通常debug user 当问题的版本号, 或行为user 版本号monkey test 如果将这项工作,debug.
     
    假设你想user 版本号adb root 权限默认关闭, 而在想开启时, 能够通过project模式中的设置项开启, 那么请USER2ROOT 功能。
    此功能默认关闭, 假设开启, 须要在ProjectConfig.mk 中设置: MTK_USER_ROOT_SWITCH = yes
     
    (2). app 的root 权限
    app 的root 权限一般是通过运行su 命令来获取。

    注意的是KK 上, 由于多种限制, 普通的su 难以直接拿到root 权限, 须要做针对性的修改.
    通常我们会内置具有控制端的第三方su, 以下以内置SuperSU, 以及使用Google default su 为例进行说明。
     
    (3). 怎样内置第三方SuperSU
    该方式能够绕过zygote 和 adbd 对Root Capabilities BoundSet 的限制.
    3.1. 下载SuperSU
     SuperSU: http://forum.xda-developers.com/showthread.php?t=1538053
     
    3.2. 内置Superuser.apk 到 system/app
       将su 复制并改名成: daemonsu
       内置su 到 system/xbin
       内置daemonsu 到 system/xbin
       内置chattr 到 system/xbin
       内置chattr.pie 到 /system/xbin
     
    3.3. 内置install-recovery.sh 到system/etc
    更新alps/system/core/inlcude/private/android_filesystem_config.h
    在android_files 数组的最開始新增.
    { 00755, AID_ROOT,      AID_ROOT,      0, "system/etc/install-recovery.sh" },
     
    (4). 怎样内置Google default su
    4.1 放开Google default su 仅仅准shell/root 用户使用的限制.
        system/extras/su/su.c 中删除以下3行代码
        if (myuid != AID_ROOT && myuid != AID_SHELL) {
            fprintf(stderr,"su: uid %d not allowed to su ", myuid);
            return 1;
        }
     
    4.2 首先将此编译出的su 内置到system/bin, 然后改动su 的内置权限,启用sbit 位.
    更新alps/system/core/inlcude/private/android_filesystem_config.h
    在android_files 数组中
    添加
    { 06755, AID_ROOT,      AID_ROOT,      0, "system/bin/su" },
    注意这行要放在
    { 00755, AID_ROOT,      AID_SHELL,     0, "system/bin/*" },
    之前
     
    4.3 假设是KK 以及以后版本号, 须要强行解除zygote 和 adbd 对Root Capabilities BoundSet 的限制
    更新kernel/security/commoncap.c 中 cap_prctl_drop 函数为:
    static long cap_prctl_drop(struct cred *new, unsigned long cap)
    {
      //begin: Let 'zygote' and 'adbd' drop Root Capabilities BoundSet ineffectively
            if (!strncmp(current->comm, "zygote", 16)) {
                    return -EINVAL;
            }
            if (!strncmp(current->comm, "adbd", 16)) {
                    return -EINVAL;
            }
            // add end
            if (!capable(CAP_SETPCAP))
                    return -EPERM;
            if (!cap_valid(cap))
                    return -EINVAL;
            cap_lower(new->cap_bset, cap);
            return 0;
    }
    又一次编译系统, 又一次download 后, adb shell 回车,然后输入su 要查看是否在命令行$切换到#, 这一假说切换成功。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    黄聪:让wordpress模板完全整合google AdSense搜索广告
    黄聪:如何用SQL Server内置的存储过程模板对数据库进行备份和恢复
    git使用安装实战
    Redis持久化之大数据服务暂停问题
    redis的那些事
    centos上安装git
    拿什么守护你PHP程序级守护进程的实现与优化
    redis学习资料链接地址汇总
    redis搭建实战记录
    zeromq_传说中最快的消息队列
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4756715.html
Copyright © 2020-2023  润新知