Android SuperUser应用程序如何检测应用程序请求root?

我正在编写一个应用程序,它将使用su在linux内核中执行一些命令。 我想知道超级用户如何计算出应用程序正在寻求root权限? 另外,是否有任何已知的方式(通过模糊处理)可以绕过此检查?

换句话说:Android /(超级用户)如何知道应用程序需要root权限,尽pipe在android清单文件中没有明确要求的权限。

我从安全的angular度来问这个问题。 我想知道这是如何工作的细节,以确保恶意应用程序无法绕过超级用户。

Solutions Collecting From Web of "Android SuperUser应用程序如何检测应用程序请求root?"

超级用户系统有两个部分 – 超级用户二进制 (su在terminal上)和SuperUser.apk (用于使用supipe理应用的Android应用)。 查看su二进制文件的源代码,当你请求su访问时

 Process p = Runtime.getRuntime().exec("su"); 

它通过android消息pipe理器发布一个应用程序请求超级用户访问的意图。

 sprintf(command, "/system/bin/am broadcast -a '%s' --es socket '%s' --ei caller_uid '%d' --ei allow '%d' --ei version_code '%d' > /dev/null",action, socket_path, ctx->from.uid, allow, VERSION_CODE); 

pipe理员应用程序监听这个意图,并要求用户处理请求(允许/拒绝)。

当你运行这个:

 Process p = Runtime.getRuntime().exec("su"); 

你正试图执行只有超级用户权限的应用才能执行的“su”! 所以,每当Android检测到你正在尝试运行“苏”它会得到该应用程序将需要超级用户的权限。

此外,Android有一些只有Android系统才能访问的区域。 如果您的应用正在尝试访问某些内容,则Android会明白需要超级用户。

例如,假设您正在尝试修改主机文件或修改一些networkingconfiguration,如DHCP。 或者你正试图从系统区域访问文件,例如/data Android会检查应用程序是否具有超级用户权限,然后只允许它访问这些东西。

关于恶意软件,无论何时应用需要超级用户访问,系统都会提示用户授予或拒绝超级用户对应用的权限。 只有这样的应用程序才能获得root权限。 因此,用户决定是否接受或拒绝任何应用程序的根访问权限。 (系统会在用户每次尝试访问需要根访问的内容提示用户, 除非您告诉系统记住您对特定应用的接受或拒绝的select。)

PS:你可能会考虑检查网站的超级用户的应用程序 。

其实这很简单。 香草Android甚至没有susuperuser 。 当你根设备时,你以root身份运行一个shell。 然后你安装su二进制和superuser.apk 。 安装完成后,将shell设置回正常的权限。 所有这些只有root的应用程序现在可以调用su来请求root访问。

su运行时,它会调用superuser.apk并显示一条消息,询问您是否要提升权限。 su二进制和superuser.apk是通过Android的普通沙箱保护的。 请注意,一旦你给予应用程序的root权限,它可以自由地做任何事情,包括用自己的版本覆盖su。