android - ApplicationInfo().uid 是如何工作的,与系统应用程序有区别吗?

标签 android android-source uid

我想知道我是否可以通过系统应用程序获得 root 权限来执行命令。

在这段代码中:

getApplicationInfo().uid

在文档中我可以读到uid 是已分配给此应用程序的内核用户 ID;目前这不是唯一 ID(多个应用程序可以具有相同的 uid)。

但是这个是怎么赋值的呢,

以及分配给系统应用的uid, 它是否比普通应用程序有更多的权限来执行命令?

最佳答案

出于所有实际目的,您的应用程序进程永远不会以 uid=0 或 root 身份执行,因为在您编写的一行代码执行之前,它已不可逆转更改为普通用户 ID。

当人们制作“root”应用程序时,他们并没有将应用程序进程本身改回 root - 这是根本不可能的。相反,他们正在做的是执行一个以 root 身份运行的新辅助进程。在 java 级别下,这最终是通过在设置了 setuid 位的文件上调用 exec() 系列函数来完成的。该文件可能是帮助程序本身,或者更常见的是它是一个“root shim”,例如被黑的“su”,它反过来以 root 身份运行指定的帮助程序。这样的帮助程序几乎总是 native 代码,并且可能未在 Android 框架中注册以能够利用 Android 级功能。

系统 应用程序 也不以 root 身份运行。他们拥有第三方应用程序所没有的特殊 Android 级权限,这会导致平台服务以 root 或其他特权用户 ID 的身份运行,以代表他们获得特权。一些 android 权限还可以授予具有特殊访问权限的用户组的成员资格 - 其中一些可用于第三方应用程序(例如 Internet 权限),而另一些则不能。

关于android - ApplicationInfo().uid 是如何工作的,与系统应用程序有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16438602/

相关文章:

android - 从另一个抽屉 fragment 导航回来时,选项卡布局数据消失

android - SAAgent.class 上的 Proguard 错误

android - 滚动事件上的视频播放(移动设备)

通过编辑 AOSP 侧边的 Android 导航栏

php - 使用mysql使用另一列获取唯一ID

Linux - 如何列出所有用户及其 UID

android - Android应用卸载重装后用户id有变化吗?

java - Android 2.1 如何创建狙击风格游戏

android - 唤醒锁在 Android 的自定义系统服务中无法正常工作

android - 如何获得预定义的振动模式?