干货|Android系统中run-as和su命令的源码解析(升降权限)
run-as [packagename]
Android中的这些命令,在/system/bin和/system/xbin目录下,这些命令的源码路径为/system/core/
/system/core/run-as/run-as.c
/system/core/run-as/run-as.cpp
1.run-as命令运行有很多限制
第一个限制
运行的uid限制,运行命令的用户id只能是shell和root用户
第二限制
这个应用的安装必须合法
Android7.1.2及以下版本存在/system/core/run-as/package.c
包名、用户id(uid)、是否为debug模式,对应的数据目录,是否是release版,组id(gid)
#define PACKAGES_LIST_FILE "/data/system/packages.list"
packages.list文件是存储安装包的简略信息的,其实和packages.list同一目录下还有一个重要文件packages.xml
可以使用Android中的dumpsys packageinfo命令来查看指定应用的详细信息
Android8.0及以上版本无/system/core/run-as/package.c
第三个限制
应用的uid必须合法
AID_APP的定义
/system/core/include/private/android_filesystem_config.h
AID_ROOT对应的是root用户,uid=0
AID_SYSTEM对应的是system用户,uid=100
AID_SHELL对应的是shell用户,uid=2000
root用户的权限>>system用户的权限>>shell用户的权限>>第三方应用的权限
查看应用的uid为u0_a32最后的整数+10000
10000+32=10032
第四个限制
应用是否是debug模式
/data/system/packages.list文件读取权限是AID_SYSTEM
run-as有限制,这个命令只能是root和shell用户才可以访问的(shell用户也不比system用户权限低)
可试读52%