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

时间:2012-10-30 12:22:04

标签: android security su

我正在编写一个应用程序,它将使用su在linux内核中执行某些命令。我想知道SuperUser如何确定应用程序是否要求root权限?此外,是否有任何已知的方法(通过混淆)可以绕过此检查?

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

我从安全的角度问这个问题。我想了解其工作原理的详细信息,以确保恶意应用无法绕过SuperUser。

3 个答案:

答案 0 :(得分:18)

超级用户系统有两个部分 - superuser binary(终端上的su)和SuperUser.apk(使用su管理应用程序的Android应用程序)。当您通过

请求su访问时,查看su binary的源代码
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);  

经理应用程序侦听此意图并要求用户处理请求(允许/拒绝)。

答案 1 :(得分:15)

运行时:

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

您正在尝试执行“su”,只有具有超级用户权限的应用才能执行此操作!因此,只要Android检测到您正在尝试运行“su”,就会发现应用程序需要超级用户权限。

此外,Android还保留了一些只有Android系统才能访问的区域。如果您的应用尝试访问某些内容,Android会理解需要超级用户。

例如,假设您正在尝试修改主机文件或修改某些网络配置(如DHCP)。或者您正尝试从系统区域访问文件,例如/data Android将检查该应用是否具有超级用户权限,然后仅授予其访问此类内容的权限。

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

PS:您可以考虑结帐website for Superuser app

答案 2 :(得分:6)

实际上这很简单。 Vanilla Android甚至没有susuperuser。以root用户为root时,以root用户身份运行shell。然后安装su二进制文件和superuser.apk。安装完成后,将shell设置回正常权限。所有这些仅限root的应用现在都可以调用su来请求root访问权限。

运行su时,会调用superuser.apk并显示一条消息,询问您是否要提升权限。 su二进制文件和superuser.apk受到Android正常沙盒的保护。请注意,一旦您授予应用程序root权限,它就可以随意执行任何操作,包括使用自己的版本覆盖su。