ApplicationInfo().uid的工作原理与系统应用有何区别?

Jos*_*ema 1 android uid android-source

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

在这段代码中:

getApplicationInfo().uid
Run Code Online (Sandbox Code Playgroud)

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

但是如何分配?

并且分配给系统应用程序的uid是否具有比普通应用程序执行命令更多的权限?

Chr*_*ton 5

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

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

系统应用程序也不以root用户身份运行.他们有哪些第三方应用程序不就是专门给Android级权限造成该平台的服务代表他们以root身份运行或其他特权用户的ID的特权的东西.一些Android权限还可以赋予具有特殊访问权限的用户组的成员资格 - 其中一些可用于第三方应用程序(例如Internet权限),而另一些则不可用.