Android 如何修改AOSP以允许特定应用获得根访问权限?

Android 如何修改AOSP以允许特定应用获得根访问权限?,android,c,linux-kernel,root,android-source,Android,C,Linux Kernel,Root,Android Source,我正在处理AOSP。我已成功将我的apk添加到构建中。现在我想让root用户访问我的应用程序。我不想提供对其他应用程序的root访问权限,也不想在我的构建中安装超级用户应用程序。我只想添加我的应用程序以获得root访问权限。我怎样才能做到这一点 我浏览了路径system/extras/su中的su.c文件,但我无法理解整个代码 当我阅读代码时,我认为如果我能够修改su.c以提供对我的应用程序的root访问,编译它并将二进制文件添加到构建中,我的目标就可以实现。我说得对吗?你正朝着正确的方向前进。

我正在处理AOSP。我已成功将我的apk添加到构建中。现在我想让root用户访问我的应用程序。我不想提供对其他应用程序的root访问权限,也不想在我的构建中安装超级用户应用程序。我只想添加我的应用程序以获得root访问权限。我怎样才能做到这一点

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


当我阅读代码时,我认为如果我能够
修改
su.c以提供对我的应用程序的root访问,
编译它并将二进制文件添加到构建中,我的目标就可以实现。我说得对吗?

你正朝着正确的方向前进。您需要检查
su.c
的源代码,唯一可以面对的问题是如何以root用户身份运行程序。为此,您需要为应用程序的可执行文件设置SUID sticky位。为此,您需要修改
system/core/include/private/android\u filesystem\u config.h
文件(structure
android\u files[]
),例如,对于su程序,您可以看到该位的设置方式:

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

ChainFire已经编写了一个应用程序,以及如何在普通应用程序中使用它。如果您打算使用除自己手机以外的任何其他应用程序,我建议您采用这种方法。

如果任何应用程序都可以使用root,这不是一个巨大的安全壁垒吗?如果您不知道如何做到这一点,在让代码以root用户身份运行之前,您不太可能知道如何审核代码的安全性。从我找到的代码中,它允许root用户访问shell,就像我想解析data/system/packages.xml中的xml文件,找到我的应用程序的UID,并允许它以root用户身份访问系统一样。为什么需要root用户访问?我这样问是因为在安卓系统中它没有被使用,还有其他的机制。我有一个处理IPtables和网络监控的应用程序。为了访问IPtables,我需要根访问权限。这种方法不起作用,因为Android应用程序没有唯一的可执行文件。相反,它们最终是公共可执行文件的库。Zygote分叉来创建一个应用程序进程,但从来没有exec(),它只是更改UID并用应用程序代码加载一个库。我不明白。这就是苏的工作方式。我在我的项目中多次尝试使用这种方法。Yury,你能告诉我你在这两个文件中都更新了哪些部分,以使root用户能够访问你的应用程序吗?你需要创建类似于su的应用程序。在您的程序中,您应该调用setuid(0)函数以获取根权限。在android_filesystem_config.h中,您需要在我在答案中指定的结构中添加一行程序名。您需要做的唯一更改是更改应用程序可执行文件的路径。首先,您需要创建一个本机应用程序来执行您的功能(我通常将这些源代码放入/system/core目录)。然后您需要将这个应用程序添加到构建中(检查适当的.mk文件,例如core.mk)。然后您需要修改android_filesystem_config.h文件,正如我在文章中解释的那样。之后,您应该构建系统。现在,您可以创建Java应用程序,并在这些应用程序中使用您的本机应用程序运行一个新进程。我没有任何可执行的二进制文件。我想将root权限设置为预构建/预安装的Apk。我该怎么办?