如何Android的超级用户应用程序检测到一个应用程序请求根?(How does Android S

2019-08-02 03:13发布

我正在写,将使用一个应用程序su在Linux内核中执行某些命令。 我想知道超级用户如何计算出该应用程序是要求root权限? 此外,是否有任何已知的方式(通过混淆),其中该检查可以被绕过?

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

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

Answer 1:

有两个部分,以超级用户系统- 超级二元 (SU在终端上)和SuperUser.apk (Android应用来管理使用ス应用)。 纵观源代码苏二进制 ,当你请求通过苏访问

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

其发布通过Android消息管理员应用程序已请求超级用户访问的意图。

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);  

所述管理器应用侦听此意图,并要求用户来处理该请求(允许/拒绝)。



Answer 2:

当你运行这个:

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

您正在尝试实行“苏”,这只能超级用户权限的应用程序可以做! 所以每当Android的检测到您正在尝试运行“苏”这将让该应用程序将需要超级用户权限。

此外,Android有一些保留面积只有Android系统可以访问。 如果您的应用程序试图访问那里的东西,Android将会明白,需要超级用户。

例如,假设你正在试图修改host文件或修改一些网络配置(如DHCP)。 或者你正试图从系统区域如访问文件/data Android将检查应用程序有超级用户权限,然后才会授予其访问这样的事情。

关于恶意软件,当应用程序需要超级用户权限,系统会提示用户授予或拒绝超级用户权限的应用程序。 只有这样,应用程序可以获取root权限。 因此,它是由用户来决定是否接受或拒绝任何应用程序根目录访问。 (系统将一个应用程序试图访问的东西,需要root权限, 除非你告诉系统记住您接受或拒绝特定应用程序的选择每次都提示用户。)

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



Answer 3:

其实这很简单。 香草的Android甚至没有susuperuser 。 当根设备运行以root身份。 然后你安装su二进制和superuser.apk 。 安装完成后,你设置的背壳到正常的权限。 所有这些只有root-应用程序现在可以调用su索要root权限。

su时,它会调用superuser.apk一条消息,询问您是否要提升特权。 在su二进制和superuser.apk通过Android的正常沙箱保护。 请注意,一旦你给一个应用程序root权限它是免费为所欲为,包括与它自己的版本覆盖苏。



文章来源: How does Android SuperUser app detect that an app requests root?