| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 8.1 MTK root版本解决方案 -> 正文阅读 |
|
[移动开发]Android 8.1 MTK root版本解决方案 |
? ?一、 需求 ?客户需要一个App应用能使用root权限的版本。 ? 二、 误解 ? ?以为编译Eng版本,adb root和 adb shell #就可以。实际上这至少其中一部分。 工作中我们一般会编译针对开发人员的eng版本以方便调试,按说eng版本应该开放了所有的系统权限,几乎应该是等同于root版本的,而实际上eng版本的root权限主要是给予了adb,对于上层应用依旧保持封闭状态(使用root助手等检测显示未root)。我们这里通过修改开放针对上层应用的root权限。 ? 修改前? ? ? ?? 修改后。 三、解决方案 1. system\core\libcutils\fs_config.c? 这个06755 权限配置非常重要和关键 由于su文件的权限位中有rws,所以:运行su的进程的EUID,在运行su期间,变成了su的所有者的UID。而上文已述,su的所有者是root用户,所以运行su的进程的EUID,在运行su期间,变成了root用户的UID。 需要特别注意的是,当shell进程开始运行su的时候,shell进程的EUID,就已经是root用户的UID了。换言之,此时的shell进程,已经拥有root用户权限了。但是,这种EUID变为root用户UID的情况,是有时效性的,在su文件运行完毕后就失效了。而之所以运行过一次su文件,进程就能持久性地获得root用户权限,归功于su文件的内容。 其实,只要shell进程,运行的是一个owner是root用户,且权限位为4775的可执行文件,shell进程都能获取到(短暂的)root用户权限。之所以必须要运行su文件,而不是其他文件,就是因为su文件中的代码,能赋予shell进程持久性的root用户权限。
?2.? build/make/core/main.mk? ---- 这里比较好理解,就是对比debug的参数配置 \system\core\init\Android.mk ifneq (,$(user_variant)) ??3. 修改selinux /code/1-android8.1/system/core/ diff --git a/init/init.cpp b/init/init.cpp index 6ecd88c..cfeef46 100755 --- a/init/init.cpp +++ b/init/init.cpp @@ -588,6 +588,7 @@ static selinux_enforcing_status selinux_status_from_cmdline() { static bool selinux_is_enforcing(void) { +return false; if (ALLOW_PERMISSIVE_SELINUX) { return selinux_status_from_cmdline() == SELINUX_ENFORCING; } ?4.? 消除Capabilities机制? kernel-4.4/security/commoncap.c添加 @@ -881,6 +881,14 @@ static int cap_prctl_drop(unsigned long cap) { struct cred *new; +if (!strncmp(current->comm, "zygote", 16)) { +return -EINVAL; +} + +if (!strncmp(current->comm, "adbd", 16)) { +return -EINVAL; +} ?framework ?cmds/webview_zygote/webview_zygote.cpp 这个所谓的Capabilities机制对于Root权限是另一种控制 \frameworks\base\core\jni\com_android_internal_os_Zygote.cpp \frameworks\base\cmds\app_process\app_main.cpp 5.? 修改 system 分区权限为可读写 Dear customer,开启完整的root 权限需要开通SELinux 权限,这部分修改无法通过CTS 测试。 我司目前不会提供类似的方案给贵司。目前我们只支持USB adb权限。这是 MTK 的官方回复。 vendor/mediatek/proprietary/hardware/fstab/mt6765/fstab.in.mt6765
6. busybox 安装问题解决 ? ?安装 busybox.apk 安装成功 ?? ? ?? |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/29 4:27:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |