Android是开源移动终端操作系统,分成Linux内核层(Linux Kernel)、系统运行库层(Libraries和Android Runtime)、应用程序框架层(Application Framework)和应用程序层(Applications)。
(一)各层功能
层次 | 说明 | ||
1 | 应用程序层 | Android平台不仅是系统,也包含许多应用程序,如短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等。 | |
2 | 应用程序框架层 | 核心应用程序基于本层实现核心功能。开发者可以直接使用组件来进行快速开发或个性化拓展。 ①Activity Manager(活动管理器):管理各程序生命周期及导航回退功能 ②Content Provider(内容提供器):使不同程序之间存取或者分享数据 ③Location Manager(位置管理器):提供位置服务 ④Notification Manager(通知管理器):在状态栏中显示自定义提示信息 ⑤Package Manager(包管理器):Android系统内的程序管理 ⑥Resource Manager(资源管理器):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等 ⑦Telephony Manager(电话管理器):管理所有移动设备功能 ⑧View System(视图系统):构建应用程序的基本组件 ⑨Window Manager(窗口管理器):管理所有窗口程序 | |
3 | 系统运行库层 | 系统库 | 连接应用程序框架层与 Linux 内核层 ①FreeType:提供点阵字与向量字描绘与显示 ②Libc:标准 C系统函数库(定制) ③LibWebCore:Web浏览器引擎,驱动Android浏览器和内嵌web视图 ④Media Framework:多媒体库,支持多种常用音频、视频格式录制和回放 ⑤OpenGL|ES:3D绘图函数库 ⑥SGL:底层2D图形渲染引擎 ⑦SQLite : 小型关系型数据库引擎 ⑧SSL:通信过程中实现握手 ⑨Surface Manager:负责显示与存取操作间互动、2D绘图与3D绘图显示合成 |
Android runtime | 核心库:提供Java API 中大多数功能和Android核心API。 Dalvik虚拟机:每个Android 程序都运行在自己的Dalvik虚拟机实例中。注意:不是编译后的字节码,而是dex格式的中间码。 | ||
4 | Linux内核层 | 提供进程管理、内存管理、文件系统管理、设备驱动程序等操作系统的基本功能 |
(二)安全威胁
各层都面临着不同程度安全威胁,基础层安全威胁来自Linux内核攻击可能获取系统最高权限。
(三)常见威胁
APK重打包(repackaging)、更新攻击、诱惑下载、提权攻击、远程控制、恶意付费、敏感信息搜集.四
(四)APK文件
APK文件是Android Package的缩写,即Android安装包。
apk文件本质是一个压缩包,可以将apk文件后缀改为.zip来观察apk中的文件。
文件夹/文件 | 说明 | 备注 | |
1 | assets | 静态资源文件(图片,视频等) | 不会被编译,支持任意深度子目录。 访问时依赖AssetManager类 |
2 | lib | .so库、系统库、开发者打包库 | 加密token生成方式放在.so文件。 根据CPU型号不同,分为ARM,ARM-v7a,MIPS,X86目录 |
3 | META-INF | 应用签名信息 | 签名验证APK文件完整性 打包APK时,计算APK包中所有文件的完整性,保存到本目录 安装APK时,根据META-INF目录校验APK完整性,确保每个文件都不会被篡改。 包含文件: ①CERT.RSA:用于签名的公钥证书 ②CERT.SF:各文件摘要,确保完整性 ③MANIFEST.MF:存储元数据(签名算法、证书及签名有关信息) |
4 | res | 资源文件(静态文本,图片,关键资源) 汉化 | 编译后映射到Android工程.R文件中,生成对应ID。 调用方式:R.id.filename 子目录: ①anim存放动画文件; ②drawable目录存放图像资源; ③layout目录存放布局文件; ④values存放特征值; ⑤colors.xml存放color颜色值; ⑥dimens.xml定义尺寸值; ⑦string.xml定义字符串值; ⑧styles.xml定义样式对象; ⑨xml存放xml文件。 |
5 | AndroidManifest.xml | 配置信息 | 开发Android应用时,需要把代码中的Activity,Service,Provider和Receiver在AndroidManifest.xml中注册,系统才能启动对应组件。还包含一些权限声明及使用的SDK版本信息等 |
6 | classes.dex | android dalvik虚拟机可执行文件 | 打包时通过AndroidSDK的dx工具(合并,重组,优化、压缩class文件)将Java字节码→Dalvik字节码。 |
7 | resources.arsc | 资源索引/对应文件 | 根据资源ID在res目录下寻找资源 |
(五)四大组件
组件 | 作用 | 安全威胁 | ||
1 | Activity | 活动 | 核心组件,表示应用的一个单一屏幕,是用户与应用交互的主界面。每个 Activity 提供一个窗口,用于绘制界面和接收与用户的交互事件。 每个 Activity 都是一个独立的界面。 | 越权:敏感页面需要验证用户身份 拒绝服务崩溃:接受Intent传输的畸形数据 界面劫持 |
2 | Service | 服务 | 可以在后台执行长时间运行的任务而不需提供用户界面(即使用户已离开应用)。 用来处理不需要与用户交互而需要长期运行的操作。 分为前台服务(显示持续通知)和后台服务(应用不在屏幕显示时执行)。 | 提权 service劫持 消息伪造 拒绝服务 |
3 | Broadcast Receiver | 广播接收器 | 用来处理来自系统或应用发出的广播通知。 可以对设备启动完成、电池电量变化、短信接收等系统事件做出响应,也可以接收应用自定义的广播消息。 | 消息伪造和拒绝服务 拒绝服务 |
4 | Content Provider | 内容提供器 | 用于在不同应用程序之间共享数据。 提供了一种封装数据的方式,并通过一套标准 API 在应用之间进行数据访问。 某应用可以允许其他应用访问其数据,而不需要直接访问底层数据库或文件系统。 | 敏感信息泄露 SQl注入 目录遍历 数据备份 |
(六)存储方式
存储方式 | 描述 | |
1 | SharedPreferences | 轻量级的数据存储方式,本质是xml文件,适合保存键值对类型的简单配置信息。 |
2 | 文件存储 | 应用程序可以在自己的私有区域中创建文件,其他应用无法访问 |
3 | SQLite数据库 | 轻型的关系型数据库,适合存储结构化数据 |
4 | ContentProvider | 提供了一种统一的通过Uri实现数据操作的方式。 content://hx.android.text.myprovider/name |
5 | 网络存储 | 调用WebService返回的数据或是解析HTTP协议实现网络数据交互 |