android 13 root

一:修改系统文件

需要修改一些系统文件,以允许adbd进程在root用户下运行,并关闭Verity检查。我们需要修改以下文件:

1.frameworks/base/core/jni/com_android_internal_os_Zygote.cpp

这个文件负责创建应用程序进程,并设置它们的权限和能力。需要注释掉DropCapabilitiesBoundingSet函数中的代码,以防止它删除adbd进程的任何能力。

@@ -658,7 +658,7 @@ static void EnableKeepCapabilities(fail_fn_t fail_fn) {}static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {
-  for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {;
+  /*for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {;if (prctl(PR_CAPBSET_DROP, i, 0, 0, 0) == -1) {if (errno == EINVAL) {ALOGE("prctl(PR_CAPBSET_DROP) failed with EINVAL. Please verify "
@@ -667,7 +667,7 @@ static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {fail_fn(CREATE_ERROR("prctl(PR_CAPBSET_DROP, %d) failed: %s", i, strerror(errno)));}}
-  }
+  }*/}
2. packages/modules/adb/Android.bp

这个文件定义了adbd模块的编译选项和依赖项。需要添加-DALLOW_ADBD_ROOT=1到cflags中,以启用adbd进程的root模式,并添加remount到required中,以允许adbd进程重新挂载系统分区。

@@ -50,6 +50,7 @@ cc_defaults {"-Wvla","-DADB_HOST=1",         // overridden by adbd_defaults"-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION=1",
+   "-DALLOW_ADBD_ROOT=1",],cpp_std: "experimental",@@ -111,8 +112,15 @@ cc_defaults {cc_defaults {name: "adbd_defaults",defaults: ["adb_defaults"],
+    cflags: [
+    "-UADB_HOST",
+    "-DADB_HOST=0",
+    "-UALLOW_ADBD_ROOT",
+    "-DALLOW_ADBD_ROOT=1",
+    "-DALLOW_ADBD_DISABLE_VERITY",
+    "-DALLOW_ADBD_NO_AUTH",
+],-    cflags: ["-UADB_HOST", "-DADB_HOST=0"],}cc_defaults {
@@ -605,7 +613,7 @@ cc_library {"libcrypto","liblog",],
-
+    required: [ "remount",],target: {android: {srcs: [
3. packages/modules/adb/daemon/main.cpp

这个文件是adbd进程的主要入口点。我们需要修改should_drop_privileges函数,让它总是返回false,以防止它降低adbd进程的权限。

@@ -64,6 +64,7 @@static const char* root_seclabel = nullptr;static bool should_drop_privileges() {
+    return false;// The properties that affect `adb root` and `adb unroot` are ro.secure and// ro.debuggable. In this context the names don't make the expected behavior// particularly obvious.
4. system/core/fs_mgr/Android.bp

这个文件定义了fs_mgr模块的编译选项和依赖项。fs_mgr模块负责管理设备上的文件系统。我们需要修改-DALLOW_ADBD_DISABLE_VERITY=0-DALLOW_ADBD_DISABLE_VERITY=1,以允许adbd进程关闭Verity检查。

@@ -237,7 +237,8 @@ cc_binary {"fs_mgr_remount.cpp",],cppflags: [
-        "-DALLOW_ADBD_DISABLE_VERITY=0",
+   "-UALLOW_ADBD_DISABLE_VERITY",
+        "-DALLOW_ADBD_DISABLE_VERITY=1",],product_variables: {debuggable: {
5. system/core/init/Android.bp

这个文件定义了init模块的编译选项和依赖项。init模块是设备启动时运行的第一个进程,负责初始化系统服务和属性。我们需要修改以下几个选项:(其实没什么卵关系,顺手改了下)

  • -DALLOW_FIRST_STAGE_CONSOLE=1:允许init进程在第一阶段打开控制台输出
  • -DALLOW_LOCAL_PROP_OVERRIDE=1:允许init进程覆盖本地属性
  • -DALLOW_PERMISSIVE_SELINUX=1:允许init进程设置SELinux为permissive模式
  • -DREBOOT_BOOTLOADER_ON_PANIC=1:允许init进程在发生内核崩溃时重启到bootloader模式
  • -DWORLD_WRITABLE_KMSG=1:允许init进程设置kmsg文件为可写
  • -DDUMP_ON_UMOUNT_FAILURE=1:允许init进程在卸载分区失败时生成内存转储
  • -DSHUTDOWN_ZERO_TIMEOUT=1:允许init进程在收到关机命令时立即执行
@@ -113,13 +113,13 @@ libinit_cc_defaults {"-Wno-unused-parameter","-Werror","-Wthread-safety",
-        "-DALLOW_FIRST_STAGE_CONSOLE=0",
-        "-DALLOW_LOCAL_PROP_OVERRIDE=0",
-        "-DALLOW_PERMISSIVE_SELINUX=0",
-        "-DREBOOT_BOOTLOADER_ON_PANIC=0",
-        "-DWORLD_WRITABLE_KMSG=0",
-        "-DDUMP_ON_UMOUNT_FAILURE=0",
-        "-DSHUTDOWN_ZERO_TIMEOUT=0",
+        "-DALLOW_FIRST_STAGE_CONSOLE=1",
+        "-DALLOW_LOCAL_PROP_OVERRIDE=1",
+        "-DALLOW_PERMISSIVE_SELINUX=1",
+        "-DREBOOT_BOOTLOADER_ON_PANIC=1",
+        "-DWORLD_WRITABLE_KMSG=1",
+        "-DDUMP_ON_UMOUNT_FAILURE=1",
+        "-DSHUTDOWN_ZERO_TIMEOUT=1","-DINIT_FULL_SOURCES","-DINSTALL_DEBUG_POLICY_TO_SYSTEM_EXT=0",],

步骤二:修改内核代码

接下来,需要修改一些内核代码,以允许adbd进程修改系统的能力集,以及关闭SELinux的强制执行。我们需要修改以下文件:

1. kernel-5.10/security/commoncap.c

这个文件实现了一些通用的能力操作函数。我们需要注释掉cap_prctl_drop函数中的代码,以防止它检查adbd进程是否有CAP_SETPCAP能力,以及是否传递了一个有效的能力参数。

@@ -1163,11 +1163,11 @@ static int cap_prctl_drop(unsigned long cap){struct cred *new;-   if (!ns_capable(current_user_ns(), CAP_SETPCAP))
+/* if (!ns_capable(current_user_ns(), CAP_SETPCAP))return -EPERM;if (!cap_valid(cap))return -EINVAL;
-
+*/new = prepare_creds();if (!new)return -ENOMEM;
2. system/core/init/selinux.cpp

这个文件实现了一些与SELinux相关的函数。我们需要修改IsEnforcing函数,让它总是返回false,以防止它检查系统属性或内核参数是否设置了SELinux的强制执行。

@@ -102,6 +102,7 @@ namespace {enum EnforcingStatus { SELINUX_PERMISSIVE, SELINUX_ENFORCING };+/*EnforcingStatus StatusFromProperty() {EnforcingStatus status = SELINUX_ENFORCING;@@ -120,13 +121,15 @@ EnforcingStatus StatusFromProperty() {}return status;
-}
+}*/bool IsEnforcing() {
-    if (ALLOW_PERMISSIVE_SELINUX) {
+    //add root
+    return false;
+    /*if (ALLOW_PERMISSIVE_SELINUX) {return StatusFromProperty() == SELINUX_ENFORCING;}
-    return true;
+    return true;*/}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML(13)——显示模式

目录 显示模式 块级元素 行内元素 行内块元素 转换显示模式 显示模式:标签的显示方式 作用:布局网页时,根据标签的显示模式选择合适的标签摆放内容 显示模式 块级元素 独占一行宽度默认为父级的100%添加宽高属性生效 行内元素 …

WordPress主题 酱茄免费主题

酱茄free主题由酱茄开发的一款免费开源的WordPress主题,主题专为WordPress博客、资讯、自媒体网站而设计,遵循GPL V2.0开源协议发布。 运行环境 酱茄Free主题当前版本:2020.11.25 V1.0.0 支持WordPress版本:5.4 兼容Chrome、Fire…

word复制技巧二则

1 纵向复制 按下Alt键,按下鼠标左键拖动,选中要纵向复制的内容,如下图, 再粘贴即可; 2 整页复制 在页的任意位置单击,然后按CtrlA,这会选中整页;然后再复制粘贴即可;

合并github未合并的PR

问题描述 有时候你急需某个PR解决问题,但是官方可能还未合并这个PR,你想合并到自己的分支。 解决方案 方案一:直接用别人的PR仓库 可以在具体的PR详情页面,查看别人的源仓库,将原仓库下载下来编译使用。 方案二&a…

Linux的dev/ 和 sys/ 和 proc/ 目录

linux精神: 一切设备皆文件。 设备被抽象成文件 1、 /dev : 该目录放的设备文件,是应用程序和内核的交互文件,应用程序对这些文件的读写控制可以直接访问到实际的设备 应用程序通过mknod创建的文件,如果底层驱动对mknod的设备号…

更换域名流程记录

华为云的服务器,阿里云购买的域名。 1.购买域名 2.在域名服务商绑定服务器ip(以阿里云为例) 控制台->域名控制台->域名列表->点击域名->域名解析->添加记录 记录类型填A , 主机记录“”或“www”,记录值填服务器i…

通俗易懂的ChatGPT原理简介

一、引言 随着人工智能的发展,聊天机器人已经成为我们生活中的常见工具。而在众多聊天机器人中,ChatGPT 无疑是最受关注的一个。ChatGPT 是由 OpenAI 开发的一种基于生成式预训练模型(GPT)的大型语言模型。本文将通俗易懂地介绍 …

最新暑假带刷规划:50天吃透660+880!

现在只刷一本题集根本不够 去做做24年的考研真题卷就什么都明白了,24年的卷子就是典型的知识点多,杂,计算量大。 而现在市面上的任何一本题集,都无法做到包含所有的知识点,毕竟版面有限! 所以&#xff0…

淘宝商品搜索新纪元:item_search接口技术揭秘与实战应用

淘宝item_search接口技术详解与应用 一、引言 淘宝作为中国最大的电商平台之一,拥有海量的商品信息。为了帮助开发者更高效地获取淘宝平台上的商品数据,淘宝开放平台提供了item_search接口。通过该接口,开发者可以根据关键词、分类、价格等…

iptables(3)规则管理

简介 上一篇文章中,我们已经介绍了怎样使用iptables命令查看规则,那么这篇文章我们就来介绍一下,怎样管理规则,即对iptables进行”增、删、改”操作。 注意:在进行iptables实验时,请务必在个人的测试机上进行,不要再有任何业务的机器上进行测试。 在进行测试前,为保障…

【JavaEE精炼宝库】多线程(7)定时器

目录 一、定时器的概念 二、标准库中的定时器 三、自己实现一个定时器 3.1 MyTimerTask 实现: 3.2 MyTimer 实现: 一、定时器的概念 定时器也是软件开发中的⼀个重要组件。类似于一个 "闹钟"。达到一个设定的时间之后,就执行…

两个数组的交集--力扣349

两个数组的交集 题目思路C代码 题目 给定两个数组 nums1 和 nums2 ,返回它们的 交集 输出结果中的每个元素一定是唯一 的。我们可以不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 示例 2&…

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.06.05-2024.06.10

文章目录~ 1.Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation2.Reasoning in Token Economies: Budget-Aware Evaluation of LLM Reasoning Strategies3.Low-Rank Quantization-Aware Training for LLMs4.MASSW: A New Dataset and Ben…

聊一聊 Monitor.Wait 和 Pluse 的底层玩法

一:背景 1. 讲故事 在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上,曾经也有不少人问我为什么用 !syncblk 看不到 Monitor.Wait 上的锁信息,刚好昨天有时间我就来研究一下。 二:Monitor.Wait 底层怎么玩的 1. 案…

Chromium 开发指南2024 Mac篇-Chromium项目编译小技巧(六)

1. 前言 在编译大型项目如 Chromium 时,优化编译速度是非常重要的。本文将介绍一些编译优化的小技巧,尤其是如何使用 ccache 来加速 C/C 代码的重新编译。ccache 是一个编译器缓存,通过缓存之前的编译并检测何时再次进行相同的编译&#xff…

“display interface“的43条信息,这条绝对被你忽略了

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 大家好,我是张总。 上周和老杨唠嗑,他说我每次都是直播,或者视频号上给大家聊聊技术,都没发过技术…

站群服务器对于网站优化有哪些好处?

站群服务器主要是指IP数量比一般服务器多的机器,这种类型的服务器会应用在网站集群和数据库集群等场景当中,站群服务器能够通过批量操作快速部署多个网站,为企业节省了大量的时间和人力成本。 那站群服务器对于网站进行优化的好处有哪些呢&am…

后缀表达式多语言版(c++ java python等)

后缀表达式&#xff0c;也称为逆波兰表达式&#xff0c;是一种不需要括号的运算表达式。在后缀表达式中&#xff0c;所有的数字和运算符用两个空格隔开&#xff0c;所有的运算符都放在两个操作数的后面。 后缀表达式求值c代码 #include <iostream> #include <stack&…

U盘删除的文件怎么找回?数据恢复,5个方法

“我的u盘里有部分文件不小心被删除了&#xff0c;尝试了很多的方法都无法找回它们。U盘删除的文件怎么找回呢&#xff1f;希望大家给我出出主意&#xff01;” 保存了很多重要的文件在u盘中&#xff0c;查看u盘内存时却发现很多文件被删除了&#xff1f;别慌&#xff01;即使u…

系统架构设计师【论文-2020年 试题4】: 论企业集成架构设计及其应用(包括解题思路和经典范文)

文章目录 真题题目&#xff08;2020年 试题4&#xff09;写作要点经典范文 真题题目&#xff08;2020年 试题4&#xff09; 论企业集成架构设计及其应用 企业集成架构&#xff08;Enterprise Integration Architecture&#xff0c;ElA)是企业集成平台的核心&#xff0c;也是解…