Android攻防一

  • Post author:
  • Post category:其他

Android的总体架构有时被描述为“运行在linux上的java”

 

Android的总体架构由5个层次上的组件构成:

Android应用层、android框架层、dalvik虚拟机层、用户空间、原生代码层和linux内核层

 

Android应用层允许开发者无须修改底层代码就对设备的功能进行扩展和提升,而andoird框架层则提供大量用来访问android设备各种必须设备的API,及充当应用层与dalvik虚拟机之间的粘合剂。API中包含各种构件(building block),以允许开发者执行通用任务,比如管理UI元素,访问共享数据存储、以及在应用组件间传递信息

 

Android应用和andoroid框架都是java开发的,运行在dalvik vm中,。Dalvik vm作用是为底层操作系统提供一个高效的抽象层。Dalvik vm是一种基于寄存器的虚拟机,能够解释执行dalvik可执行格式(DEX)的字节码,另一方面,dalvik vm依赖于一些由支持性原生代码程序库提供的功能。

 

Android系统中的用户空间原生代码组件包括系统服务、网络服务(如dhcpd和wpa_supplicant)和程序库(如bionic libc,webkit和openssl),其中一些服务和程序会与内核级的服务与驱动进行交互,而其他的只是便利底层原生操作管理代码

 

Binder驱动实现了进程间通信(IPC)机制

 

Android操作系统应用了两套独立但又相互配合的操作模型。底层的权限模型继承自linux,用于对文件系统实体进行访问控制,这一模型通常被称为android沙箱。以dalvik vm和andoroid框架形式存在的android运行时实现了第二套权限模型。这套模型在用户安装应用时向用户定义用户权限。事实上,第二套权限模型中的某些权限直接映射到底层操作系统上的特定用户、用户组和权能(capability)

 

Android沙箱的核心机制基于以下几个概念:标准的linux进程隔离、大多数进程拥有某一的用户ID(UID),以及严格限制文件系统权限

 

Android没有使用linux传统的passwd和group文件来存储用户与用户组的认证凭据,作为替代,android定义了从名称到独特标识符(android id,AID)的映射表。初始的AID映射表包含了一些与特权用户及系统关键用户(如system)对应的静态保留条目。Android保留了一段AID范围,用于提供原生应用的UID,android4.1之后的版本为多用户资料档案和隔离进程增加了额外的范围段(如chrome沙箱)。可从AOSP中的system/core/include/private/android.filesystem_config.h文件中找到AID的定义。除了AID,adnrodi还使用了辅助用户组机制以允许进程访问共享或受保护的资源,如sdcard_rw用户组中的成员允许进程读写/sdcard目录,因为他的加载项规定了哪些用户组可以读写该目录。

 

Andriod的权限模型是多方面的,有API权限,文件系统权限、IPC权限等

 

要确定应用用户的权限和辅助用户组,android会处理在亿应用包的Android Manifest.xml文件中指定的高级权限。应用的权限由packagemanager在安装时从应用的manifest文件中提取并存储在/data/system/packages.xml文件中。这些条目会在应用进程的实例化阶段用于给进程程序适当的权限。映射到用户组的映射表存储在/etc/premissions/platform.xml文件中

 

在应用条目中定义的权限后面会通过两种方式实施检查:一种检查在调用给定方法时进行。由运行环境实施,另一种检查在操作系统底层进行,由库或内核实施。

 

API权限用于控制访问高层次的功能,这些功能存在于Android API、框架层,以及某种情况下的第三方框架中

 

Android的应用沙箱严重依赖于严格 的unix文件系统权限模型

 

IPC权限:IPC权限直接涉及应用组件(以及系统的IPC设施)之间的通信。

 

所有的APK都必须配合android的manifest.xml文件,文件中包含:唯一的应用包名及版本信息;accivity、service、broadcast reveiver和插桩定义;权限定义(包括应用请求的权限以及应用自定义的权限)、关于应用使用并一起打包的外部程序库的信息;其他支持性的指令,(如公用的UID信息、首选的安装位置和UI信息)(如应用启动时的图标等)

 

Manife文件在构建过程中由明文xml文件转换为二进制xml文件

 

应用间通信的一个关键组件是intent,intent是一种消息对象,其中包含一个要执行操作的目标组件信息等。

 

如果调用方式被调用包指明了发送或接受消息的权限要求,那么android运行时将作为一个参考监视器,对intent执行权限检查

 

当在manifest文件中声明特定的组件时,可以指明一个Intent filter来定义处理的。Intent filter将被用于处理那些没有指定目标组件的intent (隐式intent)标准

 

调用看起来就像是本地函数调用


版权声明:本文为yalecaltech原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。