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

asu*_*hak 15 security android su

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

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

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

Che*_*sum 18

超级用户系统有两个部分 - 超级用户二进制文件(终端上的su)和SuperUser.apk(使用su管理应用程序的Android应用程序).查看su二进制文件的源代码,当您通过su请求访问时

Process p = Runtime.getRuntime().exec("su");
Run Code Online (Sandbox Code Playgroud)

它通过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);  
Run Code Online (Sandbox Code Playgroud)

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


Sur*_*jaj 15

当你运行这个:

Process p = Runtime.getRuntime().exec("su");
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

PS:您可以考虑查看超级用户应用程序的网站.

  • 以及"超级用户"应用程序如何/为何仅作为**Su**权利提供者?是什么让它成为负责人? (2认同)

Ama*_*ron 6

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

su运行它调用superuser.apk一个消息,询问您是否要提升特权.在su二进制和superuser.apk通过Android的正常沙箱保护.请注意,一旦您授予应用程序root权限,就可以随意执行任何操作,包括使用自己的版本覆盖su.