一、前言
在上篇文章源码编译(2)——Xopsed源码编译详解中详细介绍了Xposed源码编译的完整过程,本文将从Android编译过程到Xposed运行机制,最后进行Xposed框架的详细定制。其中Xposed的定制主要参考世界美景大佬的定制Xposed框架和肉丝大佬的来自高纬的对抗:魔改XPOSED过框架检测(下)。
致谢:
首先感谢世界美景大佬的定制Xposed框架,从里面学习到对Xposed框架特征的修改,但是由于个人水平有限,大佬的贴子不够详细,不能完整复现,经过搜索发现肉丝大佬的基于此的两篇详细的贴子讲解:来自高纬的对抗:魔改XPOSED过框架检测(上)和来自高纬的对抗:魔改XPOSED过框架检测(下),本文的Android系统运行参考老罗的博客
二、Android运行机制
我们在了解Xposed的运行机制前,不得不需要了解Android系统的基本结构和运行机制,这样我们才能进一步学习如何进行Xposed定制,才能减少更多的错误
1. Android平台架构
Android的平台架构如下图所示:
下面我们依次介绍各层之间的功能和作用:
(1)Linux内核
Android平台的基础是linux内核,Android Runtime(ART)依靠Linux内核来执行底层功能,使用Linux内核可让Android利用主要安全功能,并且运行设备制造商为著名的内核开发硬件驱动程序,可以理解基于linux内核让Android更安全并且可以拥有很多设备驱动
(2)硬件抽象层(HAL)
HAL提供标准界面,向更高级别Java API框架显示设备硬件功能,HAL包含多个模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机和蓝牙模块,当框架API要访问设备硬件时,Android系统为该硬件组件加载库模块。
(3)Android Runtime
Android 5.0之前Android Runtime为Dalvik,Android 5.0之后Android Runtime为ART
首先我们先了解一些文件的含义:
(1)dex文件:Android将所有的class文件打包形成一个dex文件,是Dalvik运行的程序
(2)odex文件:优化过的dex文件,Apk在安装时会进行验证和优化,通过dexopt生成odex文件,加快Apk的响应时间
(3)oat文件:Android私有ELF文件格式,有dex2oat处理生成,包含(原dex文件+dex翻译的本地机器指令),是ART虚拟机使用的文件,可以直接加载
(4)vdex文件:Android 8.0引入,包含APK的未压缩DEX代码,以及一些旨在加快验证速度的元数据
下面我们从Android系统的发展过程中详细介绍二者的区别:
[table]
[tr]
[td]版本[/td]
[td]虚拟机类型[/td]
[td]特性[/td]
[/tr]
[tr]
[td]2.1-4.4