Android13 Root实现和原理分析

简介: Android13 Root实现和原理分析

Android 13算是比较新的(这个patch半年前改的)Android版本,它带来了许多新特性和改进,也增加了一些安全限制,比起之前的版本想让系统拿到root权限变得更加麻烦。如果想在Android 13上拥有完全的控制权,需要修改一些系统文件和内核代码,以绕过SELinux、Verity和其他保护机制。本文将介绍如何在Android 13上实现root功能的一种方法,以及需要修改的文件和代码。

如果你们的设备不过GMS , 随便搞。但注意了 , 如果你们的产品涉及银行 教育可能他们的APP产品用不了!

此方法仅限于调试用。

前提条件

搞机,需要有以下几个条件:

  • Android 13源码和设备
  • 长得比较帅
  • 脑子比较聪明

步骤一:修改系统文件

需要修改一些系统文件,以允许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进程重新挂载系统分区。这个文件好像是Android12以上出来的, adb换到这个目录了

@@ -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检查。这个文件好像是Android12以上出来的, adb换到这个目录了

@@ -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;*/
 }

总结

通过以上的修改,我们可以在Android 13上实现root功能。但这些修改可能会降低设备的安全性,请在明确了解风险后再搞。

希望这篇博客能对你有所帮助,如果你有任何问题或建议,欢迎留言讨论。谢谢!

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1385 4
|
7月前
|
Android开发
安卓虚拟摄像头替换摄像头, 微信虚拟相机替换拍照,安卓免root虚拟摄像头
虚拟摄像头系统包含多个组件:主摄像头类、预览面板、驱动接口、DirectShow实现和管理类
|
7月前
|
Android开发 数据安全/隐私保护
手机微信虚拟视频聊天,安卓免root虚拟摄像头,免root虚拟hook相机
以上代码实现了一个完整的免root虚拟摄像头方案,通过Hook系统摄像头服务和微信视频通话接口
|
7月前
|
编解码 Java Android开发
安卓虚拟摄像头免root版,虚拟摄像头替换真实摄像头,jar代码开源分享
通过动态替换摄像头输入流的方式实现虚拟摄像头功能,代码经过简化展示核心逻辑。实际开发中还需要考虑视频编解码优化
|
7月前
|
Java Android开发
安卓虚拟摄像头过人脸,免root虚拟hook相机,虚拟相机hook版【jar】
两种Hook Android相机的方法:Xposed模块和Frida脚本。Xposed模块需要安装在已root的设备
|
8月前
|
安全 Shell 测试技术
安卓硬改一键新机,一键新机改串软件,免ROOT网卡串号Imei/sn码
本内容提供移动安全研究相关资料与方法,包括通过Android Studio官方工具和模拟器进行设备测试、ADB调试命令学习
|
8月前
|
编解码 自然语言处理 Java
安卓改机工具免root,一键过设备检测,串号SN码【jar即可实现】
本项目通过Hook系统API实现设备信息的拦截与修改,主要功能包括动态更改IMEI/SN等设备标识。核心技术基于Xposed框架(免Root可用VirtualXposed)
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
7月前
|
网络协议 Android开发 数据安全/隐私保护
三色过人脸虚拟摄像头,安卓免root虚拟摄像头, 安卓虚拟摄像头过人脸
这个实现包含三个主要部分:虚拟摄像头核心服务、安卓环境配置脚本和客户端测试程序
|
8月前
|
存储 Android开发
一键新机安卓无限, 免root改手机机型, 手机信息修改型号伪装
AndroidManifest.xml配置 资源文件管理 各系统服务的Hook

热门文章

最新文章