百道网
 您现在的位置:Fun书 > 最强Android书:架构大剖析
最强Android书:架构大剖析


最强Android书:架构大剖析

作  者:[美]Jonathan,Levin,[乔纳森列维]

出 版 社:电子工业出版社

出版时间:2018年06月

定  价:89.00

I S B N :9787121318139

所属分类: 专业科技  >  计算机/网络  >  计算机体系结构  专业科技  >  计算机/网络  >  程序设计    

标  签:

[查看微博评论]

分享到:

TOP好评推荐   [展开]

TOP内容简介

本书通过实验而不是源码,将Android 系统层层拆解,令读者深刻透彻地掌握Android 系统的内部技术:以init 进程为切入点详细阐述了Android 的启动过程和关键服务;从Android 作为资源协调者和服务提供者的角度,重点分析了servicemanager 和system_server 这两个进程。同时,作者比较了Linux 与Android 系统的区别,并对Android 系统的安全性做了深入的阐述。

本书采用了大量的图表示例和实验,表达新颖清晰,让读者能直观地掌握Android 的技术精髓。

本书适合广大移动开发者及对Android 系统感兴趣的人员阅读。

 

TOP作者简介

JonathanLevin是一位经验丰富的技术培训师和咨询师,他的关注点是"三大系统"(Windows、Linux和MacOS)以及它们的移动版本(Android和iOS)原理。15年来,Jonathan坚持传播内核工程和修改技术的真知灼见,在DefCON会议上发表了很多技术演讲。他是Technologeeks.com公司的创始人和首席技术官(CTO)这是由一些志趣相投的专家合伙创办的公司,致力于通过技术培训传播知识,通过咨询解决棘手的技术难题。他们的专业领域覆盖软件架构中的实时及其他关键部分、系统/核级编程、调试、逆向工程以及性能优化。

译者简介

崔孝晨,教师,专注于信息安全领域,研究深入。翻译出版了多部著作,包括《黑客大追踪》、《Android安全攻防实战》,并致力于推动安全技术的发展。

 

TOP目录

关于本书  XIV

第1 章 Android 体系结构的变革之路  1

1.1 Android 系统版本的历史变迁  2

Froyo(冻酸奶)  3

Gingerbread(姜饼人)  3

Honeycomb(蜂巢)  4

Ice Cream Sandwich(冰激凌三明治)  5

JellyBean(果冻豆)  5

KitKat(奇巧)  6

Lollipop(棒棒糖)  7

Marshmallow(棉花糖)  8

Nougat(牛轧糖)  9

1.2 Android 与Linux  11

并非另一个Linux 发布版本  11

然后Android 就登场了  12

与Linux 的异同  13

Android 的框架  15

Dalvik 虚拟机  18

JNI  19

原生二进制可执行文件  20

Bionic  22

Android 的原生库  25

源自其他项目的原生库  27

硬件抽象层  28

Linux 内核  29

1.3 Android 的衍生产品  30

谷歌官方的衍生产品  30

非谷歌官方的衍生品  33

1.4 对前方道路的思考  36

兼容64 位  36

ART(Android 运行时)  37

多画面  38

把Android 用作台式机操作系统  38

Android 和ARA 项目  39

Brillo  40

本章小结  40

参考文献  41

第2 章 Android 的分区和文件系统  43

2.1 分区架构  43

需要许多单独分区的原因  44

GUID 分区表  45

闪存(Flash Storage)系统  46

文件系统  46

Android 设备中的分区  49

2.2 Android 文件系统中存储的内容  53

root 文件系统  53

/system 分区  54

/data 分区  65

/cache 分区  71

/vendor 目录  72

SD 卡  73

2.3 受保护的文件系统  74

OBB:Opaque Binary Blobs  74

ASec:Android 安全存储(Android Secure Storage)  76

2.4 Linux 伪文件系统  78

cgroupfs  78

debugfs  79

functionfs(/dev/usb-ffs/adb)  80

procfs(/proc)  81

pstore(/sys/fs/pstore)  81

selinuxfs(/sys/fs/selinux)  82

sysfs(/sys)  83

本章小结  84

参考文献  84

第3 章 Android 的启动、备份和重置  86

3.1 Android 系统镜像  87

Boot Loader  89

Boot 镜像  93

内核  95

RAM disk  97

/System 和/Data 分区镜像  99

3.2 启动过程  101

固件启动过程  101

内核启动过程  105

3.3 关机和重启  109

3.4 应用的备份和恢复  112

命令行工具  113

本地备份  114

监视备份操作  117

3.5 系统重置(recovery)和升级  119

OTA(Over-The-Air)升级包  121

制作你自己的ROM  124

制作ROM 时可用的网上资源  128

本章小结  130

参考文献  130

第4 章 init  132

4.1 init 的角色和任务  132

系统属性  134

.rc 文件  140

总结:init 的执行流程  146

4.2 init 和USB  150

4.3 init 的其他角色  152

ueventd  153

watchdogd  154

本章小结  154

XIV ┃ 最强Android 书:架构大剖析

本章讨论所涉及的文件  155

第5 章 Android 的守护进程  156

5.1 core 类中的服务  156

adbd  156

servicemanager  160

healthd  161

lmkd(Android L)  165

logd(Android L)  168

vold  173

5.2 网络相关服务  182

netd  182

mdnsd  187

mtpd  187

racoon  188

rild  189

5.3 图形及多媒体服务  190

surfaceflinger  190

bootanimation  192

mediaserver  194

drmserver  196

5.4 其他服务  197

installd  197

keystore  200

debuggerd[64]  204

gatekeeper(Android M)  207

sdcard  208

Zygote[64]  211

本章小结  214

本章讨论涉及的文件  214

参考文献  215

第6 章 框架服务的架构  216

6.1 再探servicemanager  217

6.2 服务调用的模式  222

优点和缺点  224

序列化和Android 接口定义语言(AIDL)  225

6.3 Binder  228

简明历史  228

那么,Binder 究竟是什么  229

使用Binder  230

分析Binder 的当前使用情况  231

6.4 system_server  232

启动及执行流程  232

修改启动时的行为  234

本章小结  237

本章讨论涉及的文件  237

参考文献  237

第7章 从Linux 角度看Android  238

7.1 重温/proc  239

符号链接:cwd、exe 和root  240

fd  243

fdinfo  245

status  247

7.2 用户模式内存管理  254

虚拟内存的分类和生命周期  254

内存的相关术语  258

内存不足时的应对方案  266

7.3 跟踪系统调用  269

toolbox ps 工具  269

wchan 和syscall 文件  270

strace 工具  271

本章小结  272

参考文献  272

第8 章 Android 安全性  274

8.1 移动安全威胁建模  275

攻击向量  275

攻击之道  278

8.2 Linux 层上的安全措施  281

Android 使用Linux 权限的方式  281

Linux 权能  289

SELinux  294

其他值得注意的特性  301

8.3 Dalvik 层上的安全措施  305

Dalvik 层上的权限  305

Dalvik 代码签名  310

8.4 用户层上的安全措施  312

锁屏机制  312

支持多用户  316

密钥管理  318

证书管理  318

密钥和私钥管理  322

8.5 存储安全  323

加密/data 分区  323

基于文件的加密(Nougat 7.1)  326

Direct Boot (Nougat 的新特性)  326

启动过程中加强验证  327

8.6 Root Android 设备  328

在设备启动环节中root  329

利用安全漏洞root  331

Root 对安全的影响  332

本章小结  334

参考文献  334

TOP书摘

推荐序一

Android 是当今最主流的移动端操作系统,然而作为安全研究者要找到一本适合入门学习的书籍却并不容易。本人总结其原因有三:第一,Android 操作系统更新周期较短,特别是近两年Android 自4.4.X 更新至7.1 版,它的系统安全特性已经发生了翻天覆地的变化,许多Android书籍自开始撰写到完工就需要几年时间,如果是英文书籍还涉及翻译的时间,通常读者拿到书的时候,内容已经比较过时了。第二,由于Android 系统的复杂性,对作者的技术要求比较高。

作者不仅要熟悉其原生(Native)层,对其Java 层等组件也需要有了解。市面上的很多Android书籍,很少能较好地覆盖每一个面向,或者是只有一个侧重点,这导致读者即便通读全书,也无法了解Android 的全部。第三,很多书籍从Android 源代码入手来讲解原理,虽有足够的深度,但略显乏味,会给读者一种纸上谈兵的感觉,给读者的阅读增添了困难,令他们很难全部读完并完全理解。

《最强Android 书:架构大剖析》是我见过的Android 书籍中,最适合安全研究人员阅读的一本。此书的作者Johnathan Levin 和译者崔孝晨都是本人的朋友,相信与这两位打过交道的朋友都会发现,他们精力非常充沛,虽然已经从事安全研究十几年,但对新技术仍然充满了热情和好奇心。在面对面交流的时候,他们经常对着一个技术点侃侃而谈、乐此不疲。而作者Johnathan Levin 更是在本书中引入“互联网思维”,为本书设立了网站http://newandroidbook.com,并不定期撰写文章,听取读者的反馈和建议,把Android 最新的、读者最想了解的特性分析更新到本书中。以上特性,保证了本书与那些“拿到就过时”的Android 书籍相比,具有明显的优势。

一本好书,光与时俱进、有技术深度还远远不够,如何把一个复杂的操作系统的内部机制和原理,合理有序、循序渐进地传授给读者,也是一个需要推敲的问题,而这就不仅仅是要求作者技术功底深厚那么简单了。Johnathan Levin 多年从事技术培训工作,这些积累的培训经验确保了本书的易读性: 细心的读者很快就能发现,本书的每一章节都相对独立,无论是顺序阅读或者跳着看都没有太大的问题;书中大量使用图表、图片来叙述,让读者更直观地掌握各个知识点,并且通过实验的方式加深对各个知识点的印象,充分掌握一些比较重要的概念。而译者崔孝晨同志更是在确保把原书的含义完整无误地传授给读者的同时,加入了许多中国元素,在表达上更为生动形象——这样的合作,无疑是中国读者的一大福音。

Android 的安全防护机制是多维的,我的团队成员何淇丹、刘耕铭在Mobile Pwn2Own 2016中远程攻破搭载最新Android7.1 的Nexus 6p 设备,从攻破所利用的漏洞来看,很明显,安全研究者需掌握Android 浏览器、框架组件、内核等安全特性并找出Java 层、Web 相关、原生层甚至内核层的漏洞,并串联在一起才能对Android 进行有效地远程攻击、突破沙盒、最终实现提权。本书对Android 安全特性的分析也是一大亮点,很好地覆盖了目前针对Android 的攻击面。

相信通过阅读本书,一定会对您的工作有所帮助。

陈良 科恩实验室高级研究员

2018 年6 月于上海

 

推荐序二

自2008 年Google 发布Android 的第一版以来,时至今日,无论是在系统特性,用户规模还是生态规模上,它都取得了惊人的进展,获得了移动操作系统领域的绝对优势。Android 是开源的,这对于任何想要一探究竟的人都提供了非常大的便利,但同时由于Android 系统本身日趋复杂,对大家也是个很大的挑战——一不小心就会陷进代码的汪洋大海之中。

Jonathan Levin 作为操作系统领域的专家,依赖自己深厚的技术功底和多年的研究,独辟蹊径地分别从高级用户和开发者的角度来探索Android 系统。读者手上的这本书是从高级用户的角度开始Android 的探索之旅的。这本书我首先接触的是英文版,现在非常高兴看到这本书的中文版面世,能让更多的读者受益。

本书特别适合高级用户(MIUI 称这部分用户为发烧友)学习使用。目前不少手机用户对各种硬件拆机评测很熟悉,这本书有如一个软件拆解,作者有如庖丁解牛一般,把运行在手机中的Android 系统逐层拆解。在简要地介绍了Android 的版本演化历史之后,作者先从分区和文件系统开始,详细介绍了各个分区的作用,各个分区上存储的内容和数据,还用实验详细演示了如何制作一个刷机包。在介绍了这些静态的软件组成之后,作者开始详细探索这些静态的内容是如何动态工作的。书中以关键的init 进程作为切入点,详细阐述分析了Android 的启动过程;接着分析了启动过程中的关键服务:原生服务和Android 框架服务。操作系统有两个重要的角色:资源的协调者和服务的提供者。作者重点分析了servicemanager 和system_server 这两个进程,它们构成了Android 系统所扮演的两个角色的基石。

对Android 系统有一点了解的读者可能知道,Android 是基于Linux 内核的,那么Android和一个常用的Linux 系统有何不同?作者接下来就从一个Linux 用户的视角来观察和分析Android 系统,剥去构筑在Linux 内核之上的那层Android 外衣,让一个熟悉Linux 系统的人跃跃欲试:“我也能构建一个Android 系统”。本书最后概要性地讲述了一些Android 的安全机制,虽然只有短短的一章,但是非常清晰,尤其是对selinux 的描述。从上述的脉络可以看出,作者动静结合,抽丝剥茧一般把运行在手机里的Android 系统清晰地展示在大家眼前。

本书虽然是从高级用户的角度来探索Android 系统的,但也很适合Android 开发者,尤其是Android 系统工程师学习。要想剖析一个系统,得先了解使用它。这本书有如一盏指路明灯,让我们在Android 代码的汪洋大海之中始终明确前进的方向。略有遗憾地是这本书来得有点晚,使我们在学习Android 系统的过程中走过一些弯路,今天的读者可以幸运地站在大师的肩膀上了!在小米MIUI,我们也打算使用其中的部分内容作为内部培训。如果您正好打开本书看到了这篇序,诚邀您一起开始我们的Android 系统探索之旅,这将是一个妙趣横生的旅程。谢谢!

汪文俊,MIUI 系统平台部总经理

2018 年6 月

 

译者序

市面上关于Android 的书籍可谓汗牛充栋,我甚至都不敢把书名Android Internals 按照惯例译为《深入理解Android 系统》——重名的书太多了。那么为什么还要把这本书介绍给国内的读者呢?因为市面上绝大多数的Android 书籍都是从程序员的视角展开的,入门的门槛相对比较高。尽管开发Android App 的程序员们自然应该对Android 系统有一个深入的理解,但这并不意味着其他人并不需要理解Android 系统。比如,电子取证人员,他们需要对Android 中的文件系统及数据存放位置有一个清晰的认识,以便从中提取相关数据;喜欢折腾的技术发烧友,root 掉系统之后一般都喜欢自己修改一下系统,比如禁用一些开机启动项之类的。如果无需依赖额外的App,只需一个文本编辑器就能完成相关修改,甚至给系统换上自己的开机动画岂不是很酷……诸如此类。但这些人中只有很少的一部分接受过正规的编程训练,因此市面上大部分的书籍对他们来说难度就太大了。

本书的作者Jonathan Levin,也是畅销书Mac OS X and iOS Internals: To the Apple's Core(中文版为《深入解析Mac OS X & iOS 操作系统》)一书的作者。按Jonathan 自己的说法,Mac OSX and iOS Internals: To the Apple's Core 一书的读者反馈中,反映最激烈的问题是:太技术化了!许多读者读起来感到头大!所以在这本后继的Android Internals 中,他把不需要代码就能表达清晰以及与开发人员关系不太紧密的部分放在这一本书中,而把剩下的、与开发紧密相关的部分放在了另一本书中。这一点从本书英文版的副标题“for Power User”就可以看出来。那么什么是“Power User”呢?如果一定要和传统的桌面系统的用户相对应,这个“Power User”就相当于系统管理员(administrator)的角色。相对于普通用户,他需要对系统有更加深入的理解,能对系统进行更加详细的配置,因而也被认为可以拥有较高的权限(比如root)——本书的部分实验确实需要拥有root 权限,且第8 章中也专用了一个小节讨论root 这一主题。

有人问,既然是讲系统内部实现,不讲编程又是如何把它讲清楚的呢?答案是使用实验。本书的内容是根据作者多年讲课的讲义,整理、精选1而来,通过在ADB(Android 调试桥)中执行各种命令的方式(相对于阅读代码),比较直观地向读者揭示Android 内部的工作原理。效果如何呢?别看广告,看疗效。上次曝出的CIA Value7 的相关内容显示,这本书已经被CIA 私下盗版,用于CIA 特工的内部培训了。而可怜的Jonathan Levin 既不敢告CIA 侵权,又不能告WikiLeaks……,只好在本书官网上提供了已经被泄密的2015 年6 月版的英文版的免费下载链接——与其去WikiLeaks 下载,不如上官网下载。不过读者也不必沮丧,自我2015 年10 月开始本书的翻译以来,几乎每个季度都会收到Jonathan Levin 发来的大量更新——其中包括历次Android 系统更新的新内容,以及书中已经发现的一部分错误的更新(包括一些我发现的错误:)),搞的我也不得不多次将译稿做一些必要的返工,目前出版的中文译本是以2016 年11 月底的最新版本为准(更新至Android Marshmallow PR1 版)的,您大可不必担心白花银子。

在本书的翻译过程中,我们力求将原文准确、清晰地翻译成中文。有模糊不清之处,我们尽量通过与作者沟通、阅读源码和实验的方式搞清楚。但各类缩写还是本着忠实原文的原则,沿用原文的写法。如在本书中,Android JellyBean 版会被缩写成J 版或JB 版,Android Lollipop版会被缩写成L 版,Android Marshmallow 版会被缩写成M 版等。

本书由上海公安学院的教师教官完成翻译,第一章由殷方老师翻译,第二章由王宏老师翻译,其余章节由我翻译,全书由我统一校对,并经本书作者Jonathan Levin 及其国内合作培训公司的同志审校。

最后感谢电子工业出版社刘皎老师在本书翻译过程中给予我们的有力帮助,感谢腾讯公司科恩实验室吴石、陈良、赵泽光等老师给本书初稿提出的宝贵意见。

囿于译者水平有限,书中必然存在疏漏之处,敬请读者不吝指正。

崔孝晨

2018 年6 月

 

TOP 其它信息

页  数:360

开  本:16

加载页面用时:85.5838