【问题标题】:How to modify AOSP to allow specific apps to get root access?如何修改 AOSP 以允许特定应用获得 root 访问权限?
【发布时间】:2012-12-10 14:25:59
【问题描述】:

我正在开发 AOSP。我已成功将我的 apk 添加到构建中。现在我想授予对我的应用程序的 root 访问权限。我不想提供对其他应用程序的 root 访问权限或在我的构建中安装超级用户应用程序。我只想添加我的应用程序以获取 root 访问权限。我怎样才能做到这一点?

我浏览了路径 system/extras/su 中的 su.c 文件,但我无法理解整个代码。

当我浏览代码时,我认为如果我可以modify su.c 为我的应用程序提供 root 访问权限,compile it and add the binary 为构建提供 root 访问权限,我的目标就可以实现。我说的对吗?

【问题讨论】:

  • 如果 任何 应用程序都能获得 root 权限,这不是一个巨大的安全屏障吗?
  • 如果您不知道如何执行此操作,那么您不太可能知道如何在以 root 身份运行代码之前对其进行安全审核。
  • 从我发现的代码中,它提供了对 shell 的 root 访问权限,就像我想解析 data/system/packages.xml 中的 xml 文件并找到我的应用程序的 UID 并允许它一样拥有系统的root访问权限
  • 为什么需要root权限?我问是因为在android中没有使用它,还有其他机制。
  • 我有一个处理 IPtables 和网络监控的应用程序。要访问 IPtables,我需要具有 root 访问权限

标签: android c linux-kernel root android-source


【解决方案1】:

你正朝着正确的方向前进。您需要检查su.c 的来源您可能面临的唯一问题是如何以root 身份运行您的程序。为此,您需要为应用程序的可执行文件设置 SUID 粘性位。为此,您需要修改system/core/include/private/android_filesystem_config.h 文件(结构android_files[]),例如对于su 程序,您可以看到该位是如何设置的:

{ 06755, AID_ROOT,      AID_ROOT,      "system/xbin/su" },

【讨论】:

  • 这种方法行不通,因为 Android 应用程序没有唯一的可执行文件。相反,它们最终是通用可执行文件的库。 Zygote 分叉创建一个应用程序进程,但它从不执行 exec(),它只是更改 UID 并使用应用程序代码加载一个库。
  • 我不明白。这就是 su 的工作方式。我设法在我的项目中多次使用这种方法。
  • Yury,您能告诉我您在两个文件中更新了哪些部分以授予对您的应用程序的 root 访问权限吗??
  • 你需要创建你的应用程序类似于su。在您的程序中,您应该调用 setuid(0) 函数来获得 root 权限。在 android_filesystem_config.h 中,您需要在我在答案中指定的结构中添加带有程序名称的行。您需要做的唯一更改是更改应用程序可执行文件的路径。
  • 首先,您需要创建一个本地应用程序来执行您的功能(我通常将这些源代码放在 /system/core 目录中)。然后您需要将此应用程序添加到构建中(检查适当的 .mk 文件 - 例如 core.mk)。然后你需要修改 android_filesystem_config.h 文件,正如我在帖子中解释的那样。之后,您应该构建系统。现在您可以创建 Java 应用程序,并在这些应用程序中使用您的本机应用程序运行一个新进程。
【解决方案2】:

ChainFire 写了一个a guide on su 以及如何将它用于普通应用程序。如果您打算使用自己的手机以外的任何东西,我建议您采用这种方法。

【讨论】:

  • 我没有任何可执行的二进制文件。我想将 root 权限设置为预构建/预安装的 Apk。我该怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2011-06-21
  • 2023-03-23
  • 2015-12-17
  • 2013-05-29
  • 2016-11-29
相关资源
最近更新 更多