第一章内容再度优化

This commit is contained in:
feiocng 2023-07-07 16:47:56 +08:00
parent f867630927
commit 8762175190

View File

@ -1,38 +1,57 @@
# 第1章 引言
`Android`系统是一款开源的移动设备操作系统,任何个人与组织都能轻易从网络上获取它的源码,编译修改并刷写到自己的设备上,这种独特的魅力吸引了众多的商业公司与开源社区,来自全球的开发测试与玩机人员,孜孜不倦的为其修正添加与测试系统功能。经历数十载发展,如今的`Android`不单只应用于手机市场,还有许多智能设备也是使用的`Android`系统来驱动,例如智能电视、机顶盒、车载娱乐系统、智能手表、智能家居等等,由于`Android`系统的灵活性和开放性,让其可定制性在各类设备中得到充分的利用。开发者可以根据自身业务的需求,自由的改造`Android`系统
**Android系统是一款开源的移动设备操作系统**,任何个人与组织都能轻易从网络上获取它的源码,编译修改并刷写到自己的设备上。这种独特魅力吸引了众多商业公司和开源社区以及来自全球的开发测试与玩机人员不断修正、添加和测试系统功能
本书内容将围绕着系统的编译修改、美化、安全分析增强等众多应用场景,讲解在`Android`系统实际开发定制过程中的一些技巧。由于国内用户时常将`Android`称为安卓,因此,本书后面部分讲解,内容描述中遇到`Android`与安卓,表述的都是同一个概念。
经过数十载发展如今的Android不仅应用于手机市场还广泛应用于其他智能设备中。例如智能电视、机顶盒、车载娱乐系统、智能手表和智能家居等等。由于Android系统具有灵活性和开放性使得其可定制性在各类设备中得到充分利用。开发者可以根据自身业务需求对Android进行自由改造。
本书将围绕着`Android`系统实际开发定制过程中的技巧,在编译修改、美化和安全分析增强等众多应用场景进行讲解。考虑到国内用户常称为"安卓"而非"Android",本书后面部分将使用两者互换描述同一个概念。
在这一章中,我们将简单介绍`Android`系统和定制,并通过学习帮助读者对于`Android`系统中常见名词有基本了解。
在这一章中,将简单的介绍`Android`系统和定制。通过这一章的学习,让读者对于`Android`系统中的常见名词有一个基本的了解。
## 1.1 AOSP是什么
`Android`操作系统是如今最流行、使用最广泛的智能手机操作系统。它的发展受到广大手机厂商和用户的支持,而`Android`操作系统的开源使它可以被任何人定制化,从而满足各类厂商和不同需求的用户
**Android操作系统是如今最流行、使用最广泛的智能手机操作系统**。它得到了广大手机厂商和用户的支持,而且由于其开源性质,任何人都可以进行定制化以满足不同厂商和用户的需求
`AOSP`的全称是`“Android Open Source Project”`,也就是安卓开源项目,它是由谷歌发起的移动设备的操作系统开源项目,任何人都可以自由地获取完整的项目源码,以及提交更新完善项目,同时,谷歌也会不断地迭代更新版本。
AOSP全称为"Android Open Source Project",即安卓开源项目。这是由谷歌发起的移动设备操作系统开源项目,任何人都可以自由获取完整的项目源码,并提交更新来完善该项目。同时,谷歌也会不断进行迭代更新版本。
由于`Android`的开源,各大手机厂商能能够自由地定制系统的源码,适配自己的硬件,由此衍生出了各种产品。常见的国产安卓设备的系统基本是厂商开发团队基于`AOSP`源码不断进行改造和优化的结果,例如小米`MIUI`系统、华为`Harmony`系统、一加的`H2OS`系统等等,大多数都是基于`AOSP`的源码修改而来。如今的`Android`能够百花齐放,占据手机市场的半壁江山,也是主要得益于`AOSP`的开源
由于Android的开源性质各大手机厂商能够自由地定制系统的源码来适配他们自己的硬件并因此衍生出各种产品。常见国产安卓设备基本上都是厂商开发团队基于AOSP源码不断改造和优化而成。例如小米MIUI系统、华为HarmonyOS系统、一加H2OS等等绝大多数都是基于AOSP进行修改而来。如今的Android之所以百花齐放并在手机市场中占据重要地位主要归功于AOSP的开放性
由于`AOSP`项目过于庞大和复杂,在了解和学习的过程中,要善于查询官方的说明文档。`Android`官方文档地址: [https://source.android.com](https://source.android.com)
考虑到AOSP项目过于庞大和复杂在学习过程中需要善用查询官方提供的说明文档。你可以在[https://source.android.com](https://source.android.com)找到Android官方文档。
下图是官方文档中的`AOSP`的框架结构图。
下图是官方文档中关于AOSP的框架结构图
![android_framework_details](images/android_framework_details.png)
### 1.1.1 Android框架
对于新手而言,刚开始接触安卓源码时,对于很多基础理论性的知识都是懵懵懂懂的。这些基础并不需要完全的记住,只需要大概有这么一个概念,以及了解它们之间依赖关系的印象即可,等熟悉`Android`源码后,大多数理论知识部分,就会茅塞顿开了
对于新手来说刚开始接触安卓源码时很多基础理论性的知识可能会感到困惑。但实际上并不需要完全记住这些基础知识只需要有个大概的概念并了解它们之间的依赖关系就可以了。等你熟悉了Android源码后许多理论知识部分会豁然开朗
简单介绍一下框架的概念,框架是一种软件开发的基础结构,它提供了一组标准化、可重用的代码和工具,帮助开发者更加高效地开发应用程序。通常,框架包括一些约定、规则和指南,以及可以被开发者扩展的可插入的模块
我们先简单介绍一下"框架"的概念。框架是一种软件开发的基础结构,它提供了一组标准化、可重用的代码和工具,帮助开发者更高效地开发应用程序。通常情况下,框架包括约定、规则和指南,并且提供可插入模块以供开发者扩展使用
框架的设计目的是简化开发过程,提高代码的可维护性和可扩展性,并促进开发人员之间的协作。通过使用框架,开发人员可以专注于业务逻辑而不必处理底层的实现细节,从而减少开发时间和成本,同时也能够降低代码错误率和风险。常见的框架有`Web`框架、移动应用框架、游戏引擎框架等。下面简单介绍`Android`框架的结构。
框架设计旨在简化开发过程、提高代码可维护性和可扩展性并促进开发人员之间的合作。通过使用框架开发人员可以专注于业务逻辑而无需处理底层实现细节从而减少开发时间和成本并降低错误率和风险。常见的框架包括Web框架、移动应用框架、游戏引擎框架等。
### 1.1.2 Apps
下面简单介绍一下Android框架的结构
`Apps`是日常开发的应用层,用户安装的应用与游戏等等都属于这一层,普通应用基本都在手机的目录`/data/app`中。包括`AOSP`提供的系统`APP`,也属于应用层。例如相机、短信、图库,在`/system/app`目录下的应用。应用层直接对接用户的输入操作和输出展示。这里的输入指的是,对手机进行的操作,例如点击屏幕,手机上的按键,所有对手机进行的操作行为,统称为一种输入。而输出指的是,手机接收到输入行为后的一种反馈,例如屏幕亮了,手机震动,页面刷新等等所有通过手机展示给你看到的,都算是手机的输出。
- **应用层**这是用户直接与之交互的部分包括各种应用程序和系统界面。它们通过调用底层框架提供的API来实现功能。
- **Java API框架层**这一层是Android框架中最重要也最大的部分它提供了许多核心组件和服务例如活动Activity、服务Service、内容提供器Content Provider等。开发人员可以利用这些组件来构建复杂而强大的Android应用程序。
- **C/C++本地库**在某些情况下需要使用C或C++编写性能敏感或底层操作相关的代码。Android允许将本地库与Java代码进行混合使用以获取更好的性能。
- **运行时库**提供安卓运行的基础环境。比如系统运行的一些核心库与ART虚拟机。
- **硬件抽象层HAL**:该层允许上述软件与设备硬件进行通信,并在不同设备间保持平台兼容性。
- **Linux内核及驱动程序**作为整个系统基础Linux内核负责管理系统资源、提供进程管理和设备驱动等功能。
### 1.1.3 Framework
这就是Android框架的大致结构通过理解和熟悉这些组成部分你将能够更好地理解和开发Android应用程序。
### 1.1.2 应用层
`Apps`是日常开发的应用层,用户安装的应用与游戏等等都属于这一层。普通应用基本都在手机的目录`/data/app`中。包括`AOSP`提供的系统`APP`也属于应用层,例如相机、短信、图库,在`/system/app`目录下的应用。应用层直接对接用户的输入操作和输出展示。
这里所指的输入是指对手机进行的操作,例如点击屏幕或按键等所有对手机进行操作行为统称为一种输入。而输出则是指手机接收到输入行为后产生的反馈,例如亮起屏幕、震动或页面刷新等所有通过手机展示给你看到的内容都算作手机输出。
### 1.1.3 Java API框架层
`Framework`框架指的是包含了大量系统级服务和`API`的软件层。它位于操作系统内核Linux和应用程序之间提供了一组通用的、可重用的软件组件以方便开发者构建各种类型的应用程序。下面简单列举几个框架层中的关键组件。
@ -61,67 +80,82 @@ adb pull /sdcard/framework.jar ./
![jadx_framework](images/jadx_framework.png)
### 1.1.4 Native Libraries
### 1.1.4 C/C++本地库
`C/C++`的常用库的支持,比如比较典型的`libc、ssl、OpenGL、WebKit`等等。为开发大大的提高了效率和性能。避免每次用到都需要自己去找工具库。
### 1.1.5 Android Runtime
安卓运行时缩写为`ART`,是`Android`系统5.0使用的新技术,替换了以前的`Dalvik`虚拟机运行环境。虽然`Android`开发常常使用的是`java`编程语言,但是`Android`开发的应用并不是运行在`JVM`虚拟机中,而是类似的针对`dex`结构的`Dalvik`虚拟机和`ART`虚拟机。在`Android`4.4开始测试`ART`功能,随后逐渐使用`ART`虚拟机全面替代了`Dalvik`虚拟机。`ART`使用了更高效的代码编译技术`Ahead-of-Time`,简称`AOT`编译。大致就是在安装应用时,将程序代码编译成可执行的机器码,而在运行时不再需要编译。由此提高了应用的运行效率,极大的提高用户体验。
### 1.1.5 运行时库
安卓运行时缩写为`ART`,是`Android`系统5.0使用的新技术,取代了以前的`Dalvik`虚拟机运行环境。尽管`Android`开发常常使用的是`Java`编程语言,但是应用程序并不是在传统的 `JVM` 虚拟机中运行,而是类似于针对`dex`结构设计的虚拟机——即`Dalvik`虚拟机或者现在更普遍使用的`ART`虚拟机。
从Android 4.4开始测试引入了 ART 功能并逐渐将其作为Dalvik虚拟机的全面替代品。与Dalvik不同ART使用一种更高效的代码编译技术称为"Ahead-of-Time"AOT编译。这意味着在安装应用程序时它会将程序代码预先编译成可执行的机器码在运行时就无需再进行实时编译。这样提高了应用程序的运行效率并大幅度改善用户体验。
### 1.1.6 HAL硬件抽象层
主要作用于系统内核与硬件之间的接口,是`Android`系统底层的部分,具有提供给硬件供应商实现的标准接口,`Android`系统通过接口访问硬件设备,也就是硬件的驱动程序开发,因此`Android`操作系统能够与各类硬件设备进行交互,不用关心底层硬件的处理。也有个说法是因为硬件供应商不愿意自身的驱动放在内核中被一起开源。所以单独抽出了`HAL`层来对接硬件驱动。
### 1.1.7 Linux内核
系统的最重要的核心部分内核负责与设备底层的硬件进行交互。比如显示驱动、音频驱动、WIFI驱动、电源驱动、内存管理、进程管理网络通信等等内核相当于一个操作系统的灵魂。
### 1.1.7 Linux内核及驱动程序
目前国内多数的手机厂商生产的手机都会开源配套的内核源代码。从安卓11开始安卓引入了GKI内核的概念目标旨在让手机内核接口统一减少碎片化同时达到通用内核可以启动不同设备的目标。比如一些安卓12的小米手机可以使用GKI内核进行刷机替换并成功启动设备无需编译厂商开源的内核代码
系统的核心部分是内核它负责与设备底层硬件进行交互。这包括显示驱动、音频驱动、WIFI驱动、电源驱动、内存管理、进程管理和网络通信等功能。可以说内核是操作系统的灵魂
Linux内核的修改需要谨慎错误的修改会让设备无法正常开机内核代码调试起来也比系统组件代码困难得多本书会在后面讨论内核代码的修改与编译。
目前国内大多数手机厂商都会开源其配套的内核源代码。从安卓11开始引入了GKIGeneric Kernel Image内核的概念旨在实现手机内核接口的统一化减少碎片化并使通用内核能够启动不同型号的设备。例如在某些小米手机上使用GKI内核进行刷机替换后成功启动设备时并无需编译厂商开源的特定版本内核代码。
对于Linux 内核来说,修改需要非常谨慎,因为错误的修改可能导致设备无法正常启动。相较于系统组件代码而言,在调试过程中处理内核代码更加困难。本书将在后面讨论有关修改和编译 Linux 内核代码方面的内容。
## 1.2 系统开发,定制,刷机,改机分别是什么
系统开发是指开发新的操作系统或对现有操作系统进行修改和优化的过程。这通常需要专业的编程技能和深入的计算机系统知识。
系统开发是指开发新的操作系统或对现有操作系统进行修改和优化的过程。这通常需要具备专业的编程技能和深入的计算机系统知识。
定制是指根据自身应用场景与功能的需求,对软件或硬件进行修改,以满足特定需求。这可以包括添加新功能、修改现有功能或更改用户界面等。
定制是指根据自身应用场景和功能需求,对软件或硬件进行修改,以满足特定需求。这可以包括添加新功能、修改现有功能或更改用户界面等。
刷机是指在手机或其他电子设备上,安装或替换操作系统的过程。这通常需要在设备上进行一些技术操作,例如解锁设备的引导加载程序,或使用特殊的刷机工具进行刷写。
刷机是指在手机或其他电子设备上安装或替换操作系统的过程。这通常需要进行一些技术性操作,例如解锁设备的引导加载程序,或使用特殊的刷机工具进行刷写。
改机是指对手机或其他电子设备进行硬件或软件方面的修改,以增强其性能或添加新功能。对软件方面的修改称为软改,而对硬件方面的修改称为硬改。在软件安全领域中,软改通常指一种更改设备指纹信息以隐藏设备信息检测或绕过风控系统等行为;而硬改则涉及更换处理器、增加内存、添加新传感器或修改设备固件等。需要注意的是,错误地进行此类修改可能会导致设备失去保修资格甚至无法正常使用。此外,请谨慎运用改机技术,并理解它代表了给设备增加“伪装”的行为。在网络安全领域中,改机过的设备常被视为计算机信息犯罪工具或黑灰产业的代名词。不合法使用改机技术存在极高的法律风险。
改机是指对手机或其他电子设备进行硬件或软件方面的修改,以增强其性能或添加新功能。对软件的修改称为软改,对硬件的修改称为硬改。软改在软件安全领域通常指的是一种设备指纹信息的修改,以达到隐藏设备信息检测或风控系统绕过;硬改可以包括更换处理器、增加内存、添加新的传感器或修改设备的固件等。需要注意的是,错误的修改,可能会导致设备失去保修或无法使用。而且,改机技术本身需要慎用,通常它代表着为设备增加一层“伪装”,在网络安全领域中,改机过的设备是各种计算机信息犯罪的工具材料,是黑灰产的代名词,不正规的使用具有极高的法律风险。
### 1.2.1 系统开发
人们口中常说的`Android`开发通常指的是App应用层开发。在开发应用程序时会接触到大量的安卓SDK提供的`API`,为获取权限、跨进程通信、网络请求等功能提供了便利。而运行的`App`整个生存周期都是寄托于`Android`框架中。作为开发人员往往最多面对的问题就是系统给你提供了哪些功能系统允许你获取哪些权限。但是并不代表着能满足所有群体的所有需求SDK中提供了通用统一的编程接口而一些定制化的需求需要依赖系统没有导出的接口或者隐藏的API这个时候就需要了解`Android`系统架构与代码修改方法,根据自己的需求,去添加功能提供接口(`API`)给应用层开发的`App`使用
人们口中常说的`Android`开发通常指的是App应用层开发。在开发应用程序时会接触到大量的安卓SDK提供的`API`,为获取权限、跨进程通信、网络请求等功能提供了便利。而运行的 App 整个生存周期都是寄托于 Android 框架中
`AOSP`是谷歌开源的系统,谷歌官方定制并出品的系统,并不一定完全符合当前国家用户的使用习惯。这种本地化的定制与需求十分旺盛,这也是国内的手机厂商乐此不疲修改系统并进行扩展的核心原因。在考虑到不同国家用户的使用体验时,界面布局、样式呈现、操作方式、服务本地化等都是系统定制关注的重点,在现代化物联网的今天,网络硬件适配与功能融合也是系统定制的一个重要方向。这些内容的实现,都离不开对`Android`系统的底层原有的代码进行修改定制化,调整系统的部分框架和核心代码来实现新的功能,例如硬件的驱动支持,优化系统的性能,实现本地化功能的系统`ROM`
作为开发人员往往最多面对的问题就是系统给你提供了哪些功能系统允许你获取哪些权限。但是并不代表着能满足所有群体的所有需求。SDK中提供了通用统一的编程接口而一些定制化的需求则需要依赖系统没有导出或者隐藏起来的API。这个时候就需要了解Android系统架构与代码修改方法并根据自己的需求去添加功能提供接口API给应用层开发者使用。
AOSP是谷歌开源并由谷歌官方定制和出品的操作系统并不一定完全符合当前国家用户习惯。因此在本地化定制和需求旺盛之下国内手机厂商纷纷进行系统修改和扩展。考虑到不同国家用户使用体验时界面布局、样式呈现、操作方式以及服务本地化等都成为了系统定制关注的重点。在现代化物联网时代网络硬件适配和功能融合也成为了系统定制的一个重要方向。
这些内容的实现都离不开对Android系统底层原有代码进行修改和定制化调整部分框架和核心代码以实现新功能。例如硬件驱动支持、优化系统性能以及实现本地化功能的系统ROM。
### 1.2.2 定制
系统定制属于系统开发的一种属于轻量级的二次开发。往往不会对系统核心进行太大的改动。比如安全领域的App逆向分析场景。把系统比作一个分析沙箱开发的应用运行于沙箱中。需要对应用进行分析和观测时可以通过修改小盒子运行流程时在相关系统接口与系统相关的调用上注入分析代码来监测应用执行时的各种状态。只要对`Android`系统有足够的了解,就可以像开了上帝视角一般,对普通应用进行跨维度的分析。
系统定制是系统开发的一种形式属于轻量级的二次开发。在这个过程中通常不会对系统核心进行大规模改动。例如在安全领域的App逆向分析场景中将系统比作一个分析沙箱应用程序在该沙箱中运行。当需要对应用程序进行分析和观测时可以通过修改小盒子的运行流程在相关系统接口和与系统相关的调用上注入分析代码来监测应用程序执行时的各种状态。只要对Android系统有足够了解就能像拥有上帝视角一样对普通应用程序进行跨维度分析。
掌握了系统的框架结构,了解系统的运作原理,对系统的预装应用进行修改,优化桌面的结构,预装系统权限`App`,替换系统默认应用,修改配置等等,这些操作都不在话下
掌握了系统框架结构并了解其运作原理后,可以对预装应用进行修改、优化桌面结构、预装特权应用、替换默认应用、修改配置等操作都变得轻而易举
在实际定制过程中,厂商与大团队多人开发`ROM`功能进行分层分模块对整个源码的系统UI运行优化驱动支持等等进行完整的改造可以看作是系统开发而个人或小团队不考虑代码的兼容性不考虑多设备的适配不考虑用户安全和隐私保护仅为自身需求而进行修改`ROM`,这种行为可以叫专属定制。
在实际定制过程中厂商和大团队多人协同开发ROM功能并按照层次和模块划分工作内容在整个源码范围内完成针对系统UI、性能优化以及驱动支持等方面的全面改造。这可以被视为系统开发。而个人或小团队则可能只关注自身需求而进行ROM修改并不考虑代码兼容性、多设备适配、用户安全和隐私保护等因素这种行为可以称为专属定制。
### 1.2.3 刷机
早先的`Android`版本界面非常简陋,而且功能并不是十分完善,随着各大第三方团队的加入,非官方`ROM`越来越多,而官方原版`ROM`长久使用后会有卡顿感,善于折腾的手机用户就开始尝试使用功能相对完善,界面漂亮,性能更好的第三方`ROM`。更换`ROM`的过程就叫做刷机。刷机的方式通常有两种,分别是线刷和卡刷。
早期的Android版本界面非常简陋而且功能也没有十分完善。随着各大第三方团队的加入非官方ROM越来越多。长时间使用官方原版ROM后会感觉到卡顿。因此喜欢折腾手机的用户开始尝试使用功能相对完善、界面漂亮且性能更好的第三方ROM。切换ROM的过程被称为刷机通常有两种方式线刷和卡刷。
线刷指的是刷机时候需要用数据线连接电脑,将线刷包通过数据线刷入设备。这里,刷机用到的系统镜像称为“线刷包”。线刷包一般都是分区镜像`img`后缀的文件。通过执行命令`adb reboot bootloader`,进入设备刷机模式后,然后执行`fastboot flash`命令,刷入对应分区的镜像。而`AOSP`编译完成后默认输出结果就是分区镜像。
线刷是指在刷机时需要通过数据线将电脑与设备连接起来,并将线刷包通过数据线传输至设备中进行安装。这里所说的线刷包是指用于系统镜像安装的文件,一般以.img作为后缀名。首先执行`adb reboot bootloader`命令进入设备的刷机模式,然后再执行`fastboot flash`命令将对应分区的镜像写入设备中。而AOSP编译完成后默认输出结果就是分区镜像。
卡刷指的是刷机过程不需要使用数据线连接电脑,而是将设备启动进入恢复模式,在该模式下,将放在设备上的“卡刷包”直接刷入设备。第三方常见的`ROM`,比如魔趣、`lineageOS``PixelExperience`等系统,`ROM`编译完成后,默认输出结果就是可用来刷入的系统的卡刷包。“卡刷包”一般是一个`zip`格式的压缩包文件里面集成了更新脚本与相应需要更新的内容模块由Recovery模式下提供的刷机功能来完成刷机操作。目前比较流行的第三方设备Recovery模式工具是`TWRP`。刷机流程是先在设备上通过fastboot刷入`TWRP`镜像,然后启动设备到`TWRP`的工作模式下,选择手机`sdcard`中存放的刷机包,导入后完成刷机过程。
卡刷则是指在不需要使用数据线连接电脑的情况下进行恢复模式启动,并直接将存放在设备上的"卡刷包"安装到设备中去。常见第三方ROM如魔趣、LineageOS和PixelExperience等在编译完成后默认输出结果就是可用于刷机的卡刷包。而"卡刷包"通常是一个zip格式的压缩文件内部集成了更新脚本以及相应需要更新的内容模块通过Recovery模式提供的刷机功能来完成整个刷机过程。目前比较流行的第三方设备Recovery模式工具是TWRP。刷机流程首先在设备上使用fastboot命令将TWRP镜像写入设备中然后启动设备进入TWRP工作模式在其中选择存放在手机sdcard中的刷机包并导入该包以完成整个刷机过程。
### 1.2.4 改机
每个设备都有各自的唯一标识和对应的指纹信息。这里的指纹信息,并不是指手指的指纹,而是一个概念的意思。比如每个人指纹不同,是因为手指有很多细微的纹路,纹路都组合在一起时,就会每个人的都不同了。设备也是如此,有很多种设备信息,当这些设备信息组合在一起时,就可以当作是这台设备唯一标识的指纹特征。
​每个设备都有独特的标识和对应的指纹信息。这里所说的指纹信息并不是指手指上的指纹,而是一个概念。举例来说,每个人的手指纹路都是不同的,因为它们由许多微小细节组成。当所有这些细节结合在一起时,就形成了每个人独特的手指纹。设备也类似,在其各种设备信息组合之后,可以作为该设备唯一标识的指纹特征。
在风险控制对抗中某些应用会收集设备各种信息以创建设备指纹并进行记录。其中一些设备信息可能被视为高风险设备并接受特殊处理。例如自定义编译的AOSP系统或谷歌原生支持Pixel手机很容易被判定为高风险设备。因此在自己编译ROM时常常会遇到检测情况。如果被检测出属于风险设备则可能导致应用崩溃、无法正常运行或服务器将用户标记为风险用户等情况发生。
在这种情况下,需要修改获取设备信息相关接口或直接修改与之相关联文件来伪装成普通手机。
有时候应用程序并不是通过系统接口来获取设备指纹,而是直接访问系统目录或将系统文件结构作为设备信息。另外,它们可能会绕过您的修改,通过底层内联汇编执行系统调用以读取文件来获取您的设备信息。因此,在不同情况下需要进行分析和持续对抗。
在风控对抗中,有些应用会收集设备的各种信息组合为设备指纹,记录起来。有些设备信息是属于风险设备,就会被特殊处理。而自己定制的`AOSP`,以及谷歌天然支持的`Pixel`手机,就很容易被判定为高风险设备。所以自己编译的`ROM`常常会碰到被检测的情况,识别到属于风险设备后,就可能导致`App`闪退,或者无法正常运行,或者服务端标记为风险用户等等情况。这时,就需要对获取设备信息的各个接口进行修改,或者直接将设备信息相关的文件修改,伪装成一台正常的手机。有时应用并不会通过系统接口来获取设备指纹,而是直接通过系统目录,或者将系统文件结构作为设备信息,或者是绕过你的修改,通过底层内联汇编执行系统调用,来读取文件获取你的设备信息,不同的情况就需要分析和持续的对抗。
## 1.3 安卓系统发展史
@ -196,48 +230,51 @@ Linux内核的修改需要谨慎错误的修改会让设备无法正常开机
### 1.5.1 系统定制的优点
学习系统定制的好处是非常多的,这里简单列举几点。
学习定制系统的好处非常多,以下是简要列举几点:
1. 可以通过源码的阅读,深入了解`Android`设计的原理,对异常错误排查,性能优化,以及应用提权等等开发应用层的程序也会得心应手
1. 深入了解Android设计原理通过阅读源代码可以深入了解Android系统的工作原理。这对于异常错误排查、性能优化以及应用提权等开发应用层程序非常有帮助
2. 从逆向的角度看,依托在系统下运行的应用,可以直接通过对`ROM`的修改,就能轻松获取到任何执行环节所使用的数据。如同游戏开外挂一般的降维打击
2. 逆向分析与修改在系统级别上运行的应用程序可以通过修改ROM来轻松获取执行过程中使用的数据。类似于游戏外挂一样这种方式能够降低复杂度
3. 同时也可以自己打造喜欢的日常用机。为自己`DIY`一些提供便利的小功能,或者打造自己专用的工具手机。
3. 自定义个人设备定制化系统允许你打造自己喜欢的日常使用设备。你可以为自己DIY一些方便实用的小功能或者创建专门用于特定目的的工具手机。
4. 控制操作系统体积和提升性能效率:通过定制化系统,可以有效地控制操作系统体积,并更好地改进产品性能和效率水平。
4. 可以有效的控制操作系统的体积,更好的提升产品的性能和效率。
### 1.5.2 系统定制的缺点
定制的优势有的时候同样也代表着缺点,杀鸡用牛刀可以非常形象的形容定制`ROM`来干的事情。因为有很多时候,一些需求并不需要修改`ROM`,就能用其他方案轻松做到的,下面简单的总结几个缺点。
定制系统的优势有时也代表着缺点,可以形象地说成"杀鸡用牛刀"。因为很多情况下并不需要修改ROM来实现一些需求其他方案可能更加简单易行。以下是对几个缺点的简要总结
1. 学习难度大,刚开始的阶段,搭建编译`ROM`的环境就较为麻烦,再加上庞大的源代码,复杂的结构,所以很容易劝退一些初学者
1. 学习难度大初学者在开始阶段搭建编译ROM环境会比较繁琐再加上源代码庞大且结构复杂容易让一些初学者望而却步
2. 开发成本大,每次修改完代码都需要重新刷机,很多时候哪怕做一个小小的功能,你在测试的过程都在无限的重复编译刷机。并且需要熟悉源码结构,必须深入理解`Android`系统以便于充分利用系统提供的`API`来制定出更加合理的定制方案,
2. 开发成本每次修改代码后都需要重新刷机即使只是做一个小功能在测试过程中也要反复编译和刷机。此外还需要熟悉源码结构并深入理解Android系统以便充分利用系统提供的API来制定合理的定制方案。
3. 维护成本大,即使是一个成型的产品后续难免会有优化和更新,`BUG`是不可能没有的。个人开发者而言,而想要更新,只能选择全部重新刷机,同样每次新的系统版本都需要重新定制和迁移,需要耗费大量的时间和精力。
3. 维护成本即使产品开发完成后仍然需要进行优化和更新并且难免会出现BUG。对于个人开发者而言在更新时只能选择全部重新刷机并且每次新版本发布都需重新定制和迁移这将消耗大量时间和精力。
4. 安全系数低,`AOSP`定制的系统安全性较低,所以定制的系统可能存在安全漏洞,导致定制系统比原生系统更容易受到攻击。
4. 安全性低基于AOSPAndroid Open Source Project定制的系统安全性相对较低因此定制系统可能存在安全漏洞使得其比原生系统更容易受到攻击。
### 1.5.3 系统定制的发展趋势
技术本身会随市场需求不断变化。安卓系统定制的发展趋势主要看不同领域的第三方ROM在相应市场中的发展。笔者看来可以从如下几个方面讨论:
技术本身会随市场需求不断变化。安卓系统定制的发展趋势主要取决于不同领域中第三方ROM在相应市场中的发展情况。我认为可以从以下几个方面进行讨论:
1. 安全性。随着社会的发展个人隐私与数据安全的市场也在逐渐放大。目前国内手机厂商在开发新功能的时候在安全性方面除了跟随同步厂家安全补丁外还需要考虑一些安全性增强功能。例如加强数据加密、加强权限管理、加强应用程序的安全性等。国内有一些设备已经加入了App行为记录运行过的App一些敏感的行为都会被记录。这个功能还是很贴心的。国外的系统ROM定制领域有一个名为`GrapheneOS`的第三方ROM它主打的就是用户隐私与安全。官网是https://grapheneos.org/`。GrapheneOS`是一个以隐私和安全为重点的移动操作系统,具有 Android 应用程序兼容性是作为非营利性开源项目开发的。它的安全特性可以在官方的features页面看到主要在权限管理、WIFI隐私、密码长度、指纹解锁增强、浏览器增强、安全缓解增强、加密备份等细节上打磨。安全无小事对于第三方开发者来说这是市场短时间不会消亡。
1. 安全性随着社会的发展个人隐私和数据安全也变得越来越重要。目前国内手机厂商在开发新功能时除了跟随同步厂家安全补丁外还需要考虑一些增强安全性的功能。例如加强数据加密、权限管理以及应用程序的安全性等。国内已经有一些设备已经加入了App行为记录功能可以记录运行过的App以及敏感行为等信息。这种功能非常贴心。而在国外有一个名为`GrapheneOS`的第三方ROM专注于用户隐私与安全并且该项目是作为非营利性开源项目开发的移动操作系统它具备Android 应用程序兼容性并提供了多项安全特性如权限管理、WIFI 隐私、密码长度、指纹解锁增强、浏览器增强、安全缓解增强以及加密备份等细节上打磨工作。安全问题非常重要,对于第三方开发者来说,这个市场在短时间内不会消亡。
2. 用户体验用户体验是安卓系统定制的另一个重要方面。随着用户对移动设备的需求不断提高,安卓系统定制需要更加注重用户体验的设计和实现。例如优化系统的响应速度、提高应用程序的稳定性、提高系统的易用性等。谷歌官方的安卓UI一直在更新但众口难调系统中的每个设计尽管十分优秀但安卓系统UI定制可以很大程度上满足用户的个性化需求例如提供更多的主题、更多的字体、更多的壁纸等都可以带来不一样的个性化体验。上一节中介绍的第三方ROM-`PixelExperience`,就是为用户提供最接近谷歌官方`Pixel`手机上的Android体验。随附所有Google应用和Pixel桌面、壁纸、图标、字体和启动动画让设备看上去像一台真正的`Pixel`手机。总体来看,在个性性需求领域,系统定制有比较小众的市场,目前没有看到发展起来的趋势。
2. 用户体验用户体验是安卓系统定制的另一个重要方面。随着用户对移动设备的需求不断提高,安卓系统定制需要更加注重用户体验的设计和实现。例如优化系统响应速度、提高应用程序稳定性以及增强系统易用性等。谷歌官方的安卓UI一直在更新迭代但由于众口难调在满足所有用户需求上存在一定困难。然而通过自定义ROM可以很大程度上满足用户个性化需求比如提供更多主题、字体和壁纸等选项以打造独特个人风格。此外在我之前介绍过的第三方ROM - `PixelExperience` 中也为使用者提供了最接近谷歌官方`Pixel`手机Android体验并附带了所有Google 应用程序、Pixel桌面、壁纸、图标和启动动画等元素使设备看起来像一部真正的`Pixel`手机 。总之,在满足个性化需求领域中,系统定制仍属小众市场且目前没有明显发展趋势。
3. 高性能。通过对系统的优化与修改,可以让一些老旧的设备,体验最新的谷歌官方系统。这方面的需求一直很大。这也是`LineageOS`这个第三方ROM能够长期存在的主要原因。`LineageOS`主打高性能、高通用性。大多数的第三方ROM都是基于它进行的二次开发。这一块的玩机市场较大在Mokee退出市场后无论是做安全增强、用户体验、或者安全系统定制`LineageOS`都将是首选。
3. 高性能:通过对系统的优化和修改,可以让一些老旧设备体验到最新的谷歌官方系统。这方面需求一直很大,也是`LineageOS` 这个第三方ROM长期存在的主要原因之一。`LineageOS`专注于高性能和广泛适用性并且大多数其他第三方ROM都是基于它进行二次开发。在市场上该领域具有较大玩机市场在Mokee 退出市场后,无论是做安全增强、用户体验还是安全系统定制,`LineageOS` 都将成为首选。
4. 环境定制。一些与安卓系统挂钩的业务环境离不开安卓系统的定制。比如传统医疗设备行业有一些设备的控制程序就运行在定制的安卓设备上。还有在安全分析领域动态沙箱需要定制App运行时的安全分析环境脱壳机需要定制系统实现系统层面的脱壳功能等。这一块的市场相对比较稳定变化不大。
4. 环境定制:某些与安卓系统相关联的业务环境离不开对安卓系统的定制。例如传统医疗设备行业中, 有些设备的控制程序运行在经过定制的安卓设备上;而在安全分析领域中, 动态沙箱需要根据实际情况来设置App运行时所需的分析环境脱壳机则需要针对特定需求来实现系统层面上解密应用等功能。这个市场相对稳定且变化不大。
5. 移植性。安卓系统定制的另一个领域就是系统移植。将安卓移植到主要的开发板、电视盒子等硬件设备上。这个领域一部分的移植是由开发板厂商来完成。目前主要的ARM芯片SOC出厂都有提供安卓系统支持这让安卓系统在开发板上使用变得常见。另外一部分比如树霉派等名气较大的开发板虽然厂家没有提供设置的安卓系统ROM但会有第三方的开发人员为其适配安卓系统。同理电视盒子也是如此它们的更新与否主要依赖芯片SOC相关的驱动完善情况以及硬件在市场中的火热程度。无论如何这一块的市场相比其它会小众很多不会消亡也没太大的发展。
5. 移植性另一个与安卓系统定制相关的领域就是系统移植即将安卓系统移植到主要的开发板、电视盒子等硬件设备上。这个领域中一部分移植工作由开发板厂商完成。目前大多数主要的ARM芯片SOC出厂都提供了对安卓系统的支持, 这使得在开发板上使用安卓系统变得非常普遍。另一方面, 一些名气较大的开发板如树莓派虽然没有官方提供相应定制ROM 但仍有第三方开发人员为其适配安卓系统。同样地电视盒子也是如此它们的更新与否主要取决于芯片SOC相关驱动程序是否完善以及硬件在市场上是否热销。无论如何在相比其他领域而言该市场规模较小众且不会消亡或有太大进展。
总体来看,安卓系统定制技术,在未来很长的时间里不会消亡,会伴随着系统本身的更新而不断进化。领域内的从业者,需要不断的更新知识栈,以应对新应用场景中遇到的挑战。
总体而言,在未来很长时间内,安卓系统定制技术不会消亡,并将随着系统本身的更新而不断进化。从业者需要不断更新知识储备以应对新应用场景中所面临的挑战。
## 1.6 小结
本节主要介绍了安卓系统的基础架构系统定制的一些基本概念常见的第三方定制ROM的功能与设备支持情况以及讲解了系统定制在不同领域中的发展趋势。
本节主要介绍了安卓系统的基础架构、系统定制的基本概念以及常见的第三方定制ROM的功能和设备支持情况。同时还讲解了系统定制在不同领域中的发展趋势。
系统定制涉及的前置知识非常多,并不需要完全掌握后才开始本书后面内容,读完本章后,读者应该清楚系统定制的目的,找准目标后,再深入去学习。这种以目标为导向的思路,是不错的学习方法,希望读者能够好好体会。从下一章开始,将正式步入安卓系统定制的世界,体验自己动手完成安卓系统定制的成就感。
系统定制涉及到广泛而丰富的前置知识,但并不需要完全掌握这些知识才能开始学习本书后面的内容。读者在阅读完本章后应该清楚地明确了系统定制的目标,并找准了自己感兴趣或专注于研究的领域,然后再深入学习相关内容。这种以目标为导向、有针对性地学习方法是非常有效和可行的,希望读者能够好好体会其中蕴含着的价值。
从下一章开始,将正式进入安卓系统定制之旅,在实践中亲手完成安卓系统定制所带来的成就感。期待你能享受这个过程!