Android 11编译第三弹 ADB开启ROOT权限
一、为什么需要adb root权限
问题:Relese版本,默认adb访问会降级到shell权限,一些敏感操作不能进行,远程调试比较麻烦。且Release版本没有su模块,不能切换Root用户。
开启adb调试以后,默认进入adb是system权限,不能切换到root(因为Release没有集成su).
有两种方式切换Root:
1) Release也集成su模块
2)默认Release版本adb 开启Root权限
二、开启adb ROOT权限
开启Root权限
ro.secure表示root权限,要开启Root权限,系统配置ro.secure=0 开启ROOT权限
2.1 编译时默认开启ROOT权限
build/make/core/main.mk
ifneq (,$(user_variant))# ==== modify begin ====# fix: zhouronghua default as root# Target is secure in user builds.ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=0# ==== modify end ====ADDITIONAL_DEFAULT_PROPERTIES += security.perf_harden=1ifeq ($(user_variant),user)# ==== modify begin ==== fix: default as rootADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=0# ==== modify end ====endif
user版本就是Releae版本,userdebug版本就是debug版本。
2.2 Zygote关闭权限降级
frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
static void DropCapabilitiesBoundingSet(fail_fn_t fail_fn) {// ==== modify begin ==== zhouronghua #if 0for (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 ""your kernel is compiled with file capabilities support");} else {fail_fn(CREATE_ERROR("prctl(PR_CAPBSET_DROP, %d) failed: %s", i, strerror(errno)));}}}#endif// ==== modify end ====}
2.3 Android.bp允许暴力修改selinux权限
system/core/init/Android.bp
-DALLOW_PERMISSIVE_SELINUX=0 修改为 -DALLOW_PERMISSIVE_SELINUX=1
cc_defaults {name: "init_defaults",cpp_std: "experimental",sanitize: {misc_undefined: ["signed-integer-overflow"],},cflags: ["-DLOG_UEVENTS=0","-Wall","-Wextra","-Wno-unused-parameter","-Werror","-Wthread-safety","-DALLOW_FIRST_STAGE_CONSOLE=0","-DALLOW_LOCAL_PROP_OVERRIDE=0","-DALLOW_PERMISSIVE_SELINUX=1","-DREBOOT_BOOTLOADER_ON_PANIC=0","-DWORLD_WRITABLE_KMSG=0","-DDUMP_ON_UMOUNT_FAILURE=0",
2.4 init程序允许暴力修改selinux权限
system/core/init/Android.mk
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
init_options += \-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
else
# ==== modify begin ==== zhouronghua allow permissive
init_options += \-DALLOW_FIRST_STAGE_CONSOLE=0 \-DALLOW_LOCAL_PROP_OVERRIDE=0 \-DALLOW_PERMISSIVE_SELINUX=1 \-DREBOOT_BOOTLOADER_ON_PANIC=0 \-DWORLD_WRITABLE_KMSG=0 \-DDUMP_ON_UMOUNT_FAILURE=0
# ==== modify end ====
endif
2.5 su程序权限提级
system/core/libcutils/fs_config.cpp
// the following two files are INTENTIONALLY set-uid, but they// are NOT included on user builds.{ 06755, AID_ROOT, AID_ROOT, 0, "system/xbin/procmem" },// ==== modify begin ==== zhouronghua su right improve{ 06755, AID_ROOT, AID_SHELL, 0, "system/xbin/su" },
2.6 修改su程序权限
system/core/rootdir/init.rc
chown system system /sys/devices/system/cpu/cpufreq/interactive/io_is_busychmod 0660 /sys/devices/system/cpu/cpufreq/interactive/io_is_busy# ==== modify begin ==== zhouronghua su rightchmod 6755 /system/xbin/su# ==== modify end ====
2.7 su程序构建
system/extras/su/Android.mk
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)# ==== modify begin ==== zhouronghua su as common module
LOCAL_MODULE_TAGS := optional
# ==== modify end ====
2.8 su程序去掉Root用户检测
system/extras/su/su.cpp
int main(int argc, char** argv) {// ==== modify begin ==== zhouronghua delete root shell check#if 0uid_t current_uid = getuid();if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");#endif// ==== modify end ====
2.9 关闭selinux.cpp强制安全检测
system/core/init/selinux.cpp
bool IsEnforcing() {// ==== modify start ==== zhouronghua 不需要强制安全检测return false;// ==== modify endif (ALLOW_PERMISSIVE_SELINUX) {return StatusFromCmdline() == SELINUX_ENFORCING;}return true;
}
2.10 adb不降级采用ROOT访问
adbd启动时检查属性,决定是否进行权限降级到AID_SHELL
system/core/adb/daemon/main.cpp
static bool should_drop_privileges() {// ==== modify begin ====// fix: zhouronghua "adb root" not allowed, always drop privileges.if (!ALLOW_ADBD_ROOT && !is_device_unlocked()) return false;// ==== modifu end ====
adb Root权限访问不需要降级。
2.11 安卓内核默认开启selLinux
kernel/configs/o-mr1/android-3.18/android-base.config
kernel/configs/o-mr1/android-4.4/android-base.config
kernel/configs/o-mr1/android-4.9/android-base.config
kernel/configs/o/android-3.18/android-base.config
kernel/configs/o/android-3.18/android-base.config
kernel/configs/o/android-4.4/android-base.config
kernel/configs/o/android-4.9/android-base.config
kernel/configs/p/android-4.14/android-base.config
kernel/configs/p/android-4.4/android-base.config
kernel/configs/p/android-4.9/android-base.config
kernel/configs/q/android-4.14/android-base.config
kernel/configs/q/android-4.19/android-base.config
kernel/configs/q/android-4.9/android-base.config
kernel/configs/r/android-4.14/android-base.config
kernel/configs/r/android-4.19/android-base.config
kernel/configs/r/android-5.4/android-base.config
CONFIG_XFRM_USER=y
# ==== modify begin ==== zhouronghua selinux
CONFIG_SECURITY_SELINUX_DEVELOP=y
# # ==== modify end ====
相关文章:
Android 11编译第三弹 ADB开启ROOT权限
一、为什么需要adb root权限 问题:Relese版本,默认adb访问会降级到shell权限,一些敏感操作不能进行,远程调试比较麻烦。且Release版本没有su模块,不能切换Root用户。 开启adb调试以后,默认进入adb是syste…...
《TCP/IP网络编程》--基于TCP实现字符串对话和文件传输
1--基于TCP实现字符串对话 主要需求: 服务器端和客户端各传递 1 次字符串,基于 TCP 协议,传递字符串前先以 4 字节整数型方式传递字符串长度,剩余部分为字符串数据; 注:下面的代码基于 Windows 系统实现&am…...
Feign负载均衡写法
Feign主要为了面向接口编程 feign是web service客户端,是接口实现的,而ribbon是通过微服务名字访问通过RestTemplate调用的,如下: 在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(类似…...
OpenCV(二十八):连通域分割
目录 1.介绍连通域分割 2.像素领域介绍 3.两遍法分割连通域 4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术,用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性,如相近的灰度值或颜色。连通域分割可以…...
达梦控制台还原报错“管道失败”
达梦数据库控制台还原报错“管道失败” 环境 主机操作系统:windows10 profession 达梦数据库版本:达梦7 问题背景 全新安装达梦7数据库后,创建数据库实例,需要恢复往期bat备份。在控制台配置指定搜索目录后,获取备份时…...
[杂谈]-快速了解直接内存访问 (DMA)
快速了解直接内存访问 (DMA) 文章目录 快速了解直接内存访问 (DMA)1、使用 DMA 需要什么?2、DMA介绍3、DMA 中的数据传输如何进行?4、DMA接口5、DMAC 控制器寄存器6、DMA 控制器编程模式6.1 突发模式(Burst Mode)6.2 循环窃取模式…...
java八股文面试[设计模式]——23种设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 在GOF编写的设计模式(可复用面向对象软件的基础)一书中说道: 本书涉及的设计模式并不描述新的或未经证实的设计,我们只收录那些在不同系统中…...
mysql(十)mysql主从复制--主库切换
概述 可能为了更迭升级服务器,或者主库出现问题,又或者只是希望重新分配容量,此时需要切换主库。 如果这是计划内的切换,会相对容易点。只需要在从库上使用CHANGE MASTER TO命令,并设置合适的值。大多数的值都是可选…...
vue3项目的src下的各个文件夹介绍
在Vue 3项目中,通常的目录结构如下所示: src/|- assets/ # 存放静态资源文件,如图片、字体等|- components/ # 存放可复用的Vue组件|- views/ # 存放页面级别的Vue组件|- router/ # 存放路由相关的配置文件|- store…...
五、编译预处理
源程序编译预处理命令一律以‘#’开头 5.1宏定义 不带参数的宏定义 # define 宏名 字符串 宏命令之后,出现宏名的地方均用其对应的字符串来替换。 宏替换是一种”机械替换“,宏定义语句后一般不加分号,因为它仅具有替换功能,…...
应用出海,Google 分享如何让数字营销素材再上层楼
数字营销广告要想取得理想的效果,广告素材是最关键的决定因素之一。 事实上米贸搜谷歌推广发现,在广告给品牌带来的销售额增量中,有 47% 都归功于广告素材。在当今自动化时代,广告素材的作用尤其重要:固然机器可以完成…...
酱香咖啡喝了没?用数据分析揭秘瑞幸咖啡的7500万用户增长策略
瑞幸 X 茅台 这波联名赢麻了,不仅狂卖 542 万杯,甚至带动茅台市值飙升200亿。 瑞幸这几年联名搞了不少,又是线条小狗的爱情故事,又是椰树、维密、周大福、足球的,下面老李就从数据分析角度,带大家来看一下…...
Grafana之魔法:揭秘数据可视化的艺术
在数据驱动的时代,如何有效地呈现和理解数据成为了每个组织和个人的核心任务。Grafana作为一个领先的开源数据可视化工具,为我们提供了强大的功能和灵活性。本文将深入探讨Grafana的魔法,以及它如何帮助我们更好地理解数据。 Grafana简介 G…...
c高级day2作业
写一个1.sh脚本,将以下内容放到脚本中: 在家目录下创建目录文件,dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中, 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz…...
第3章 【MySQL】字符集和比较规则
3.1 字符集和比较规则简介 3.1.1 字符集简介 如何存储字符串?需要建立字符与二进制数据的映射关系。建立这个关系需要: 1.把哪些字符映射成二进制数据? 2.怎么映射? 将一个字符映射成一个二进制数据的过程也叫做 编码 &#…...
2023 年全国大学生数学建模D题目-圈养湖羊的空间利用率
D题目应该是专科题目???不确定了 感觉类似一个细胞分裂问题一样,1,2,4,8, 题目1中规中矩 按照前面说的分配方法,一步一步计算进行 缺口的问题考虑反推回去,…...
攻防世界-WEB-ics-05
打开靶机 只有设备维护中心可以点开 点标签得到新的url pageindex 想到文件包含漏洞(URL中出现path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼 利用php伪协议查看源码 出现一段base64源码,进行转码得出源码 ?pagephp://filter…...
typedef的四种用法
目录 前言 1)为基本数据类型定义类型名 2)为自定义数据类型(结构体、枚举、共用体)定义别名 3)为数组定义简易的别名 4)为指针定义简洁的名称 前言 在看工程的过程中发现typedef的如下用法,…...
Rstudio开不开了怎么办?R is taking longer to start than usual
Rstudio Server 启动时卡死 在使用 linux 服务器版 RstudioServer 的过程中,发现出现了一个问题,导致没有办法正常载入工作页面,网页提示信息是“R is taking longer to start than usual”,直接翻译过来就是“这次启动 R 会比平…...
kubernetes 集群安装加载 br_netfilter 模块
kubernetes 集群安装加载 br_netfilter 模块 Linux 系统默认是禁止数据包转发功能。 加载系统参数: # sysctl -p /etc/sysctl.d/k8s.conf 错误提示: sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or director…...
使用Chandra构建数学建模助手:美赛备战全攻略
使用Chandra构建数学建模助手:美赛备战全攻略 1. 引言 数学建模竞赛就像一场智力马拉松,需要在有限时间内解决复杂问题。每年美赛期间,无数团队熬夜奋战,只为找到最优解决方案。但现实往往是:选题纠结、算法选择困难…...
ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成
ResNet50人脸重建作品集:cv_resnet50_face-reconstruction在艺术创作中的人脸风格迁移底图生成 1. 项目介绍与核心价值 cv_resnet50_face-reconstruction 是一个基于ResNet50架构的人脸重建项目,专门为艺术创作和设计工作提供高质量的人脸底图生成服务…...
如何用XHS-Downloader解决内容采集难题?3大维度提升效率90%
如何用XHS-Downloader解决内容采集难题?3大维度提升效率90% 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…...
『NAS』在绿联部署One API,统一管理你的所有大模型服务
点赞 关注 收藏 学会了 💡整理了一个 NAS 专属玩法专栏,感兴趣的工友可以戳这里关注 👉 《NAS邪修》 One API 是一个开源的接口管理与分发系统,它能将各种大模型的非标接口(如 DeepSeek、Kimi、LongCat 等ÿ…...
Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆
Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆 1. 为什么选择Qwen3-TTS进行语音克隆 想象一下这样的场景:你需要为海外客户录制多语言产品介绍,但雇佣专业配音演员成本高昂;或者想为自己的视频内容添加个…...
Qwen3-14B芯片设计辅助:Verilog注释生成、RTL代码解释、DFT建议
Qwen3-14B芯片设计辅助:Verilog注释生成、RTL代码解释、DFT建议 1. 镜像概述与硬件适配 Qwen3-14B私有部署镜像是专为芯片设计工程师打造的AI辅助工具,基于通义千问大语言模型优化定制。该镜像完美适配RTX 4090D 24GB显存配置,预装了完整的…...
影墨·今颜模型API接口开发与调用全指南
影墨今颜模型API接口开发与调用全指南 你是不是已经成功部署了影墨今颜模型,看着它能在本地生成惊艳的图片,心里正盘算着怎么把它变成一个能对外服务的“产品”?比如,让公司的设计团队直接调用,或者集成到自己的应用里…...
像素风AI工具体验:像素史诗智识终端,让研究变得有趣又高效
像素风AI工具体验:像素史诗智识终端,让研究变得有趣又高效 1. 引言:当科研遇上像素冒险 想象一下:你是一位勇者,站在像素风格的城堡前,准备开始一场史诗般的冒险。但这次,你的武器不是剑与盾&…...
Display Driver Uninstaller(DDU):显卡驱动深度清理工具,解决游戏玩家与设计师的驱动残留难题
Display Driver Uninstaller(DDU):显卡驱动深度清理工具,解决游戏玩家与设计师的驱动残留难题 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项…...
Java学习——String 类的不可变性、底层实现(JDK1.8+)
目录 一、核心定义与设计思想 1. 核心定义 2. 核心设计思想 二、底层实现原理(含 JDK 源码分析 / 反编译验证) 1. JDK1.8 String 核心源码解析 2. 字符串常量池(JDK1.8 底层) 3. 反编译验证(不可变性 编译器优…...
