一、Android目录结构
1. data/data目录
data/data
目录存放用户应用的数据,每个应用都有自己的子目录,以包名命名。例如,包名为com.example.app
的应用,其数据存放在data/data/com.example.app
中。该目录是私有目录,只有相应的应用能够访问,除非获得了root权限。
2. data/app目录
用户安装的应用存放在data/app
目录下。
3. data/local/tmp目录
data/local/tmp
是一个临时目录,具有较大的权限,通常用于存放一些临时文件。
4. system/app目录
system/app
目录存放系统自带的应用。
5. system/lib和system/lib64目录
system/lib
和system/lib64
目录存放应用使用的共享库文件(.so
文件)。
6. system/bin目录
system/bin
目录存放Android系统的shell命令。
7. system/framework目录
system/framework
目录存放Android系统使用的框架文件,如一些jar
文件和XposedBridge.jar
。
8. sd卡目录
无论设备是否有外部存储卡,都会有sd卡目录,通常是/sdcard
,链接到/storage/self/primary
。访问sd卡目录需要申请权限,如:
/sdcard -> /storage/self/primary
/mnt/sdcard
/storage/emulated/0
二、Android系统权限管理
在Linux系统中,文件和目录的权限通过ls -l
命令显示,权限部分如下所示:
lrwxrwxrwx 1 root root 8 May 29 04:09 sbin -> usr/sbin
1. 权限解释
a) 文件类型
-
:普通文件l
:链接文件,后面用->
指向真实文件d
:目录,相当于Windows的文件夹c
:字符设备文件,例如鼠标、键盘(位于/dev
目录)b
:块设备文件,例如硬盘(位于/dev
目录)
b) 权限位
- 第1-3位:所有者权限
- 第4-6位:所属组权限
- 第7-9位:其他用户权限
2. 权限表示方式
权限表示可以使用字母或数字:
r
:可读(4)w
:可写(2)x
:可执行(1)-
:无权限
例如,rwx
表示可读、可写、可执行,数值表示为7
(4+2+1)。
3. 其他说明
- 硬链接数:访问同一文件的不同路径数,文件一般为1,目录至少为2。
- 用户和组:文件的所有者和所属组。
- 文件大小:以字节为单位,目录大小通常显示为4096字节。
- 修改日期:最后修改的日期和时间。
- 文件名:包括软链接名和实际指向的文件或目录。
4. 修改权限
使用chmod
命令修改文件或目录权限:
- 使用符号方式:
u
:所有者g
:所属组o
:其他人a
:所有人- 示例:
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
- 使用数字方式:
- 示例:
chmod 777 文件/目录名
- 示例:
5. SELinux策略
并非所有目录和文件都能通过上述方式修改权限,有些需要修改SELinux策略。
6. Android目录权限测试
/data/data/pkgName
:应用的私有目录,文件通常拷贝到sd卡目录再pull出来。/data/local/tmp
:权限较大的临时目录,逆向工程人员常用。/sdcard
:访问权限需在清单文件中申请,Android 6.0以上需要动态申请,10.0以后还需额外设置。