Android攻防二

来源:互联网 发布:elsevier是什么数据库 编辑:程序博客网 时间:2024/06/10 21:34

在更高层次上所暴露的IPC方法,如那些由绑定服务所提供的IPC方法,通常会通过android接口定义语言(AIDL)提炼成一个抽象接口,AIDL允许两个应用使用标准化接口或“协商确定”来发送或接收数据,使得接口独立于具体的实现。

 

匿名共享内存服务,简称.ashmem,是另一个linux内核在android分支中添加的代码模块。Ashmem驱动基本上提供了基于文件,通过引用计数的共享内存接口。Ashmem能够自动收缩内存缓存,并在全局可用内存较低时回收内存区域,因而适用于低内存环境。在较高层次上,android框架层提供了memoryfile类,作为ashmem的封装器。此外,进程可使用binder机制在以后共享这些内存对象,并利用binder的安全特性来限制访问。

 

另一个android特有的自定义驱动是pmem,用来管理1~16MB的大块物理上连续的内存区块。这些区块可以在用户空间进程于其他内核驱动(如GPL驱动)之间共享。Pmem驱动需要一个分配进程,为pmem的内存堆保留一个文件描述符,直到所有其他索引都关闭。

 

虽然android内核仍维护自己基于linux内核的日志机制,但它也使用另一个日志记录子系统,即俗称的日志记录器(logger),这个驱动用于查看日志缓冲区,根据信息类型,提供4个独立的日志缓冲区:main(主缓冲区)、radio(无线电缓冲区)、event(事件缓冲区)于system(系统缓冲区)

 

主缓冲区通常是日志数量最大的,并且是应用相关事件的日志源

Android内核基于一个调用进程的辅助用户组来限制网络操作,而这个调用进程就是被成为paranoid networking的内核修改模块。在高层次上,这个模块讲一个AID(以及随后的GID)映射到应用层的权限声明或请求上。例如,manifest文件中的权限android、permission

INTERNET有效映射到AID,INETAID(或GID3003)上。这些用户组、UID以及他们相应的权能在内核源码树的include/linux/android.h文件中定义。可以从AOSP代码库中的system/core/include/private/android_fielststem_config.h文件中找到其他android特有的GID

 

 

Activity以一种面向用户的应用组件或用户界面(UI),activity基于activity基类,包括一个窗口和相关的UI元素

 

另一种类型的IPC端点是boradcastreceiver。它们通常会在应用希望接受一个匹配一个某种特定标准的隐式intent时出现。在Broadcast receiver上设置权限要求可以限定哪些应用能够往这个端点发送intent

 

Service是一类在后台运行而无需用户界面的应用组件,用户无需与service所属应用进行交互。Service通常可以被停止、启动或绑定,所有这些动作都通过intent触发

 

Content provider是为各种通用、共享的数据存储提供的结构化访问接口

 

作为应用和运行时之间的连接纽带,android框架层为开发者提供了执行应用任务的部件—程序包及其类。框架层中包仍然在dalvikvm中执行的非应用特定代码。通用的框架层程序包位于android.*名字空间中。Androdi也提供了许多java标准类,以及一些第三方程序包,如apache http客户端库和SAXXML解析器。Android框架层还包括许多用于管理内部类所提供功能的服务

 

DalvikVM是基于寄存器而不是栈的。整体的开发流程:以类似java的语法编码-》源代码被编译成.class文件-》得到的类文件被翻译成dalvikVM字节码—》所有类文件被合并为一个dalvik可执行文件(dex)-》字节码被dalvikVM加载并解释执行

 

Dalvik拥有大约4000个虚拟寄存器。通常用前16个,偶尔用前256个,这些寄存器被指定为虚拟机内存的存储位置,用于模拟微处理器的寄存器功能,就像实际的微处理器一样,dalvikVM在执行字节码时,便用这些寄存器来保持运行状态,并跟踪一些值

 

DEX文件在被虚拟机解释执行之前会进行优化,为0DEX,0dex文件是无法在不同版本的dalvikVM之间或是不同的设备间进行移植

 

DalvikVM使用javanative interface(JNI)于底层原生代码进行交互,这一功能允许java代码与原生代码之间相互调用

 

Android设备启动时,Zygote是最先运行的进程之一。Zygote负责启动其他服务以及加载android框架所使用的程序库,然后在Zygote作为每个Dalvik进程的加载器,通过复制自身进程副本(也被成为forking,分支)来创建进程进行优化.作为结果,核心库、核心类和对应的堆结构会在dalvikVM的所有实例之间共享

 

Zygote的第二大功能是启动system.server进程,此进程容纳了所有系统核心服务,并在system的AID用户环境中以特权权限运行。