新書推薦:
《
长寿时代:做自己人生的CFO
》
售價:NT$
310.0
《
早点知道会幸福的那些事
》
售價:NT$
295.0
《
知宋·宋代之货币
》
售價:NT$
340.0
《
爱的7种对话:建立持续一生的亲密关系 (加)苏·约翰逊
》
售價:NT$
345.0
《
中国近现代武术思想史研究
》
售價:NT$
500.0
《
废奴
》
售價:NT$
350.0
《
有法与无法:清代的州县制度及其运作 最新修订版
》
售價:NT$
640.0
《
重启春光
》
售價:NT$
214.0
|
編輯推薦: |
《Android取证实战调查分析与移动安全》是Android取证领域广受好评的经典著作,也是国内第一本关于Android取证的著作,由资深取证技术专家撰写,世界顶级取证专家审校,权威性毋庸置疑!
全书根据当前Android取证工作者的需求,首先从Android的硬件设备、应用开发环境、系统原理等多角度剖析了Android系统的安全原理,为读者打下坚实的理论基础,然后结合实用的取证分析工具和经典案例,系统而生动地讲解了Android取证的原理、技术、策略、方法和步骤,被公认为从事移动取证相关工作的从业人员必备的书籍之一。本书由胡格著。
|
內容簡介: |
本书是Android取证领域广受好评的经典著作,也是国内第一本关于Android取证的著作,由资深取证技术专家撰写,世界顶级取证专家审校,权威性毋庸置疑!本书根据当前Android取证工作者的需求,首先从Android的硬件设备、应用开发环境、系统原理等多角度剖析了Android系统的安全原理,为读者打下坚实的理论基础,然后结合实用的取证分析工具和经典案例,系统而生动地讲解了Android取证的原理、技术、策略、方法和步骤,被公认为从事移动取证相关工作的从业人员必备的书籍之一。
全书一共7章:第1章介绍了Android平台的概况和特点、Linux与Android,Android与取证,并讲解如何创建基于
Ubuntu
的虚拟机;第2章讲解了Android所支持的各种类型的硬件和终端设备,为取证和安全分析做好准备。第3章讲解了软件开发套件、Android虚拟终端的安装,以及取证技术的一些重要概念,涵盖Davlik虚拟机、Android程序调试桥、USB调试设置等;第4章分析了Android系统的数据存储方式、涉及的内存类型,以及Android中常见的各类文件系统;第5章分析了Android终端设备成为泄漏数据以及用于作为主动攻击源的原因,并为个人、企业安全总监和应用开发者提供了一些非常具体的建议;第6章深入讲解了规避密码的几个不同策略和多种逻辑获取技术和物理获取技术(如adb
pull、备份分析、AFLogical、JTAG、芯片摘取、AFPhysical等);第7章介绍了一些具体的策略和Android文件的目录(文件夹)结构,并深入分析了11个可以用于获取Android终端设备中主要数据的应用程序。
|
目錄:
|
译者序
前言
第1章 Android与移动取证
1.1 绪论
1.2 Android平台
1.2.1 Android的发展历程
1.2.2 谷歌的策略
1.3 Linux、开源软件与取证
1.4 Android开放源码项目
1.4.1 AOSP 使用许可
1.4.2 开发过程
1.4.3 开源在取证中的价值
1.4.4 AOSP下载和编译
1.5 Android平台的国际化
1.5.1 Unicode
1.5.2 输入键盘
1.5.3 个性化分支
1.6 Android市场
1.6.1 应用软件安装
1.6.2 应用情况统计
1.7 Android取证
1.8 本章小结
1.9 参考资料
第2章 Android硬件平台
2.1 绪论
2.2 核心部件概述
2.2.1 中央处理器
2.2.2 基带调制解调器无线电
2.2.3 内存(RAM与NAND闪存)
2.2.4 GPS
2.2.5 无线(Wi-Fi与蓝牙)
2.2.6 安全数字卡
2.2.7 显示屏
2.2.8 摄像机
2.2.9 输入键盘
2.2.10 电池
2.2.11 通用串行总线
2.2.12 加速仪陀螺仪
2.2.13 音响麦克风
2.3 终端设备类型概述
2.3.1 智能手机
2.3.2 平板电脑
2.3.3 上网本电脑
2.3.4 谷歌TV
2.3.5 车辆(内置)
2.3.6 GPS设备
2.3.7 其他终端设备
2.4 只读内存及启动加载程序
2.4.1 开启电源和片上ROM代码执行
2.4.2 启动加载程序(初始程序加载第二阶段程序加载)
2.4.3 Linux内核
2.4.4 init进程
2.4.5 Zygote和Dalvik
2.4.6 系统服务器
2.5 制造商
2.6 Android更新
2.6.1 自定义用户界面
2.6.2 售后市场中的Android终端设备
2.7 具体的终端设备
2.7.1 T-Mobile G1
2.7.2 摩托罗拉Droid
2.7.3 HTC Incredible
2.7.4 谷歌Nexus One
2.8 本章小结
2.9 参考资料
第3章 Android软件开发套件和Android程序调试桥
3.1 绪论
3.2 Android平台
3.3 软件开发套件
3.3.1 软件开发套件的发布史
3.3.2 软件开发套件的安装
3.3.3 Android虚拟终端设备(仿真器)
3.3.4 Android操作系统体系结构
3.3.5 Dalvik 虚拟机
3.3.6 本地代码开发
3.4 Android安全模型
3.5 取证与软件开发套件
3.5.1 将Android终端设备与工作站进行连接
3.5.2 USB 接口
3.5.3 Android程序调试桥简介
3.6 本章小结
3.7 参考资料
第4章 Android文件系统与数据结构
4.1 绪论
4.2 shell 中的数据
4.2.1 存储的数据
4.2.2 应用数据存储目录结构
4.2.3 数据如何存储
4.3 内存类型
4.4 文件系统
4.4.1 rootfs、devpts、sysfs和cgroup 文件系统
4.4.2 proc
4.4.3 tmpfs
4.4.4 扩展文件系统
4.4.5 FAT32VFAT
4.4.6 YAFFS2
4.5 挂载的文件系统
4.6 本章小结
4.7 参考资料
第5章 Android终端设备、数据与应用安全
5.1 绪论
5.2 数据窃取目标和攻击向量
5.2.1 以Android终端设备作为目标
5.2.2 以Android终端设备作为攻击向量
5.2.3 数据存储
5.2.4 用于记录的终端设备
5.3 安全考虑
5.3.1 安全的哲学原理
5.3.2 美国的计算机犯罪法律与规定
5.3.3 开放源码与封闭源码
5.3.4 NAND 闪存加密
5.4 个人安全策略
5.5 企业安全策略
5.5.1 安全策略
5.5.2 密码、模式和个人识别号锁
5.5.3 终端设备远程清除
5.5.4 升级到最新版软件
5.5.5 终端设备的远程管理功能
5.5.6 应用软件与终端设备审计
5.6 应用开发安全策略
5.6.1 移动应用安全测试
5.6.2 应用安全策略
5.7 本章小结
5.8 参考资料
第6章 Android取证技术
6.1 绪论
6.1.1 取证调查的类型
6.1.2 逻辑技术与物理技术的区别
6.1.3 修改目标终端设备
6.2 操作Android终端设备的程序
6.2.1 终端设备的安全保护
6.2.2 网络隔离
6.2.3 如何绕过口令
6.3 Android USB 大容量存储终端设备映像
6.3.1 SD 卡与 eMMC
6.3.2 如何获得 SD卡或eMMC 的取证映像
6.4 逻辑技术
6.4.1 adb pull
6.4.2 备份分析
6.4.3 AFLogical
6.4.4 供应商
6.5 物理技术
6.5.1 基于硬件的物理技术
6.5.2 基于软件的物理技术和权限
6.5.3 AFPhysical 技术
6.6 本章小结
6.7 参考资料
第7章 Android应用与取证分析
7.1 绪论
7.2 分析技术
7.2.1 时间序列分析
7.2.2 文件系统分析
7.2.3 文件雕复
7.2.4 strings命令
7.2.5 十六进制:取证分析师的好朋友
7.2.6 Android目录结构
7.3 FAT 取证分析
7.3.1 FAT 时间序列分析
7.3.2 更多的 FAT 分析
7.3.3 FAT 分析师说明
7.4 YAFFS2 取证分析
7.4.1 YAFFS2 时间序列分析
7.4.2 YAFFS2 文件系统分析
7.4.3 YAFFS2 文件雕复
7.4.4 YAFFS2 的strings分析
7.4.5 YAFFS2 分析师注意事项
7.5 Android应用分析与参考
7.5.1 Messaging(短信与彩信)
7.5.2 多媒体消息帮助应用
7.5.3 浏览器
7.5.4 联系人
7.5.5 媒体扫描仪
7.5.6 YouTube
7.5.7 Cooliris 多媒体展厅
7.5.8 谷歌地图
7.5.9 Gmail
7.5.10 Facebook
7.5.11 Adobe Reader
7.6 本章小结
7.7 参考资料
|
內容試閱:
|
第1章
Android与移动取证
本章要点
Android平台
Linux、开源软件与取证
Android开放源码项目
Android平台的国际化
Android市场
Android取证
1.1绪论
数字取证是一个令人兴奋且高速发展的技术领域,可对诸如公司内部调查分析、民事诉讼、刑事调查、情报收集以及涉及国家安全等众多方面产生巨大的影响。作为快速发展及变化的领域,移动取证给人们带来了巨大的商机以及严峻的挑战。虽然Android取证所涉及的从移动终端设备中获取数据并对其加以分析本身非常有趣,但是首先对Android平台以及取证分析需要使用的工具进行全面了解尤为重要。全面掌握此方面的知识能够使取证分析师和安全工程师成功地对Android终端设备进行取证分析。
提示:针对本书内容所做的更正、更新以及相关软件
所有针对本书内容所做的更正、更新,甚至软件实例都将在线提供,通过以下网址进行访问:http:viaforensics.comeducationandroid-forensics-mobile-security-book。希望读者经常访问以上网站,随着时间推移,它会给读者提供更多有价值的信息。除了内容上的更正与更新,本书中用到的某些软件也可以通过此网站进行下载。
1.2Android平台
Android是一个基于Linux2.6内核的开源移动终端设备平台,并通过电信服务提供商、移动设备和元部件制造商以及软件开发商联合成立的开放手机联盟(OpenHandsetAlliance)进行管理。
Android已经对智能手机市场产生了巨大影响,对于取证领域来说也将如此。在第一部Android终端设备于2008年10月推出的两年零一个月之后,Android就成为全球第二大智能手机平台,占领了美国6.15亿部智能手机市场中26%的份额(comScore报告)。表1.1是由comScore公司提供的2010年11月美国智能手机市场占有份额数据。
表1.12010年11月美国智能手机占用份额(13周岁及以上用户)
平台智能手机用户占有市场份额(%)
RIM33.5
谷歌(Google)26.0
苹果(Apple)25.0
微软(Microsoft)9.0
奔迈(Palm)3.9
然而,Android的影响力已不仅限于美国市场。根据高德纳咨询公司(Gartner,Inc.)的市场分析报告,Android操作系统(OS)在2010年第三季度已经成为第二最受欢迎的操作系统,在全球智能手机市场占有25.5%的份额(Gartnersays,n.d.),如表1.2所示。
表1.22009—2010年第三季度全球的智能手机销售量,按照操作系统分类
公司2010年第三季度销售量(千台)2010年第三季度市场占有率(%)2009年第三季度销售量(千台)2009年第三季度市场占有率(%)
塞班(Symbian)29480.136.618314.844.6
Android20500.025.51424.53.5
iOS13484.416.77040.417.1
Researchinmotion11908.314.88522.720.7
微软(Microsoft)
Windowsmobile2247.92.83259.97.9
Linux1697.12.11918.54.7
其他操作系统1214.81.5612.51.5
总计80532.6100.041093.3100.0
引用GoogleInvestor网站上所发布的谷歌首席执行官EricSchmidt的报告,2011年2月每天就有超过350000部Android终端设备投入使用(Googleinvestor,n.d.)。以上数据只是智能手机市场的情况,而智能手机仅仅是市场上应用Android系统的众多终端设备中的一类。
Android的开放源码特性不但为工业界开辟了一个新的发展方向,而且能够让开发者、精通代码的取证分析师以及高水平的犯罪团伙(非常不幸)对终端设备进行深入透彻的了解。随着核心的平台技术快速成熟(同时可以继续免费使用),网络服务提供商及各类硬件生产商能够把更多的精力放在如何提供专门的、个性化的服务和功能上,以留住他们所拥有的客户。
1.2.1Android的发展历程
在过去30年间,企业在手持计算设备的研发上投入了巨资,希望培育出新的市场。与传统计算机的发展情况相似,用于制造手持计算设备的核心硬件元部件在技术上取得了巨大的进步,为手持计算设备提供了一个体积虽小但功能强大的移动平台。
对Android的发展起到关键作用的核心人物当属AndyRubin,他曾经任职于几家研发机器人的公司,还有苹果公司、WebTV及DangerInc.公司。其在任职DangerInc.公司期间开发出了一款智能手机以及相应的操作系统,即人们熟知的T-MobileSidekick。这个叫做DangerOS的操作系统使用Java进行开发,提供软件开发套件,并具有现代智能手机的部分功能。2004年,Rubin离开了DangerInc.公司,在尝试了几个新的想法后,又回到了智能手机开发行业,与几个志同道合的工程师进行合作,于2003年成立了Android公司(Android,Inc.)。
在合作团队进行开发的同时,Rubin积极地向潜在的投资人和无线通信服务提供商宣传Android,其中就包括谷歌公司,随后谷歌公司在2005年7月收购了Android公司。对Android公司的收购以及随之而来的申请专利、提供涉及移动通信的服务以及投标获得无线通信频谱使市场推测谷歌正在开发属于自己的智能手机并有可能将公司发展成为一个无线通信服务提供商。
然而,2007年11月5日,AndyRubin在谷歌官方博客上宣布了一个更加宏伟的计划(OfficialGoogleblog,n.d.):
Android是第一款真正开放的综合移动开发平台,包含一个操作系统、用户界面以及应用程序,即包括运行移动电话所需要的所有软件,但却不会是一个阻碍移动创新的私有财产。Android由我们与开放手机联盟(OpenHandsetAlliance)合作开发,该联盟由30多家高科技公司和主要移动通信服务公司组成,包括摩托罗拉公司(Motorola)、美国高通公司(Qualcomm)、宏达国际电子股份有限公司(HTC,HighTechComputerCorporation)和TMobile。通过与无线通信服务提供商、设备制造商、开发商及其他相关公司建立全面的合作伙伴关系,我们希望推出一个标准的、开放的移动软件平台,为移动通信界打造一个基于开放的生态系统。我们相信最终结果将会更好地加快创新的步伐,给移动通信用户提供超乎想象的应用和性能。
一周后,谷歌向开发商发布了早期版的Android软件开发套件(SDK)。此次发布也让谷歌在2008年的1月至4月间发起了第一波Android开发挑战(AndroidDeveloperChallenge)。谷歌为此投入了100万美元,奖励最具创新的Android应用。50个获得此荣誉的Android应用登载在以下网站:http:code.google.comandroidadcadc_gallery。
2008年8月,谷歌宣布推出Android市场(AndroidMarket),任何应用开发商都可以将自己为移动终端设备开发的软件上传到Android市场,供移动用户浏览、下载及安装。最初的版本不支持对下载的应用程序进行收费。随后,在2009年年初,谷歌为Android市场增加了收费功能。最后,2008年10月,谷歌正式发布了官方版本的Android开放源码项目(AOSP)(Bort,n.d.),并正式向市场推出第一款Android智能手机T-MobileG1。
一经推出,Android生态系统就经历了一个高速的增长,目前拥有来自于众多领域的贡献者。表1.3总结了Android平台的重要发展里程碑。
表1.3Android的发展里程碑
时间事件
2005年7月1日谷歌收购Android公司
2007年11月12日Android系统正式推出
2008年8月28日Android市场正式推出
2008年9月23日Android1.0平台正式推出
2008年10月21日Android正式成为开放源码软件
2009年2月13日Android市场:美国开始接受收费应用
2009年3月12日Android市场:英国开始接受收费应用
2009年4月15日Android1.5Cupcake平台正式推出
2009年9月16日Android1.6Donut平台正式推出
2009年10月5日Android2.02.1Eclair平台正式推出
2010年5月20日Android2.2Froyo平台正式推出
2010年5月23日Android2.2NexusOne版手机正式推出
2010年12月6日Android2.3Gingerbread平台正式推出
2011年2月2日Android3.0Honeycomb预览版正式推出
1.开放手机联盟
开放手机联盟(OpenHandsetAlliance,OHA)是一个由移动技术公司组成的共同合作实体,包括无线通信服务提供商、手机和零部件制造商、软件开发商及其他技术支持商和系统集成商。此联盟成立于2007年11月5日,最初有34个成员。然而,到2011年1月,此联盟已经发展到拥有近80个成员。
开放手机联盟(OHA)的宗旨是“加速移动技术创新,为消费者提供功能丰富、价格低廉、服务优质的移动体验”(AllianceFAQ,n.d.),其工作重点是协调、开发及推出Android终端设备。谷歌是OHA和AOSP的主要幕后推动者。因此,有人抱怨说此联盟只不过是一个市场销售机制,没有为联盟成员和消费者提供任何实质性的价值。然而,在2010年,新的成员继续加入此联盟,OHA毫无疑问将继续存在。表1.4列出截至2011年2月3日OHA成员的名单,按照移动通信服务提供商、手机制造商、半导体生产商、软件开发公司、市场推广公司进行分类(联盟成员Alliancemembers,n.d.)。
表1.4开放手机联盟成员
成员类型公司
移动通信服务提供商BouyguesTelecom
中国移动通信公司
中国电信公司
中国联通
日本KDDI公司
日本NTTDoCoMo公司
软银移动公司(SoftbankMobileCorp.)
SprintNextel
T-Mobile
意大利电信(TelecomItalia)
Telefo''nica
Telus
沃达丰(Vodafone)
手机制造商宏碁公司(AcerInc.)
阿尔卡特移动电话(AlcatelMobilePhones)
华硕电脑(ASUSTeKComputerInc.)
CCI
戴尔公司(Dell)
富士康国际(FIH)
海尔电信(青岛)有限责任公司
宏达国际电子股份有限公司(HTCCorporation)
华为科技公司
京瓷株式会社(Kyocera)
联想移动通信技术公司
LG
摩托罗拉公司(Motorola)
日本NEC公司
三星电子(Samsung)
夏普公司(SharpCorporation)
索尼爱立信公司(SonyEricsson)
东芝公司(ToshibaCorporation)
中兴通讯股份有限公司(ZTECorporation)
半导体生产商AKMSemiconductorInc.
听众(Audience)
ARM
AtherosCommunications
博通公司(BroadcomCorporation)
半导体生产商CSRPlc.
赛普拉斯半导体公司(CypressSemiconductorCorp.)
飞思卡尔(FreescaleSemiconductor)
金雅拓(Gemalto)
英特尔公司(IntelCorporation)
MarvellSemiconductor,Inc.
联发科技(MediaTek,Inc.)
MIPS科技公司(MIPSTechnologies,Inc.)
英伟达(NvidiaCorporation)
美国高通公司(Qualcomm)
瑞萨电子公司(RenesasElectronicsCorp.)
ST-Ericsson
Synaptics,Inc.
德州仪器(TexasInstrumentsInc.)
威睿电通(ViaTelecom)
软件开发公司爱可信公司(AccessCo.,Ltd)
埃森德公司(AscenderCorp.)
Cooliris,Inc.
eBayInc.
谷歌公司(GoogleInc.)
LivingImageLtd
Myriad
MotoyaCo.,Ltd
Nuance通信公司(NuanceCommunications,Inc.)
NXPSoftware
OMRONSoftwareCo.,Ltd
PacketVideoPV
SkyPop
SONiVOX
SVOX
VisualOnInc
市场推广公司埃森哲(Accenture)
AplixCorp.
播思国际控股公司(Borqs)
LTInfotech
NoserEngineeringInc.
SaskenCommunicationTechnologiesLimited
市场推广公司SQLStartInternationalInc.
TATTheAstonishingTribeAB
TelecaAB
WindRiverSystems
WiproTechnologies
2.Android的特性
我们将在第2章讨论各种类型的Android终端设备,本节先介绍几个不同类型的大多数Android终端设备所具有的共同特性。
首先,Android从一开始的设计目标就是支持与互联网的连接,不论是通过无线蜂窝网络,如GSMCDMA(GlobalSystemforMobileCommunicationsCodeDivisionMultipleAccess)或无线通信网络(Wi-Fi)。无论采取何种方式,支持与互联网连接是所有Android终端设备的核心功能。不错,许多Android终端设备的确是智能手机,因此可以支持拨打和接听电话、发送和接收短信以及其他无线蜂窝网络所能提供的服务。用户与终端设备实现交互通常通过一个触摸界面,但是很多终端设备也可以通过连接键盘或其他外围输入设备来支持终端设备与用户之间的交互。
Android终端设备的第二个核心特性是可以从Android市场上下载应用软件并进行安装。对众多的用户来说,这是一个非常重要的功能,因为此功能可以使用户无限扩展终端设备提供的服务功能。这些下载的应用软件对于取证分析师来说也将成为一个丰富的信息来源。
Android终端设备的最后一个核心特性是允许用户在终端设备上存储他们的个人数据。这自然是本书将要详细讨论的取证工作的基础。大多数Android终端设备自身都带有基于闪存技术(NAND)的内存以及用于存储大量数据的便携式外接SD卡。宏达国际电子股份有限公司近期销售的某些终端设备还提供虚拟影射功能,可以将一个具有独立USB识别号的虚拟SD卡影射到NAND上而呈现为一个独立的SD卡加以使用。此类虚拟SD卡通常按照微软的FAT32文件系统进行格式化。
3.对无线蜂窝网络的支持
由于Android终端设备中的最大一类终端是智能手机,了解Android目前都支持哪些类型的无线蜂窝通信技术尤为重要。
作为第一批推出的Android终端设备,HTCDREAM100或T-MobileG1是一款GSM手机。GSM是目前世界上使用最普遍并得到最广泛支持的无线蜂窝通信系统。在美国,提供基于GSM无线通信服务的运营商包括ATT和T-Mobile。GSM系统使用一个SIM(SubscriberIdentityModule)模块或USIM(UniversalSubscriberIdentityModule)模块对用户进行识别。
Android支持的第二类无线蜂窝通信系统是CDMA(CodeDivisionMultipleAccess)。CDMA是一个CDMA手机用来编码,以及发送通话、数据和控制信号的技术,在美国比在世界上其他国家或地区更加流行,目前使用的技术标准是CDMA2000。使用此技术的主要无线通信服务运营商包括Verizon无线公司(VerizonWireless)、Sprint、U.S.Cellular和CricketCommunications。
Android支持的最后一类无线蜂窝通信系统是iDEN,其主要的吸引力是对美国的SprintNextel公司提供的流行的PTT(push-to-talk)功能进行支持。在美国,目前也就只有SprintNextel(同时拥有BoostMobile)这一家主要的无线通信服务运营商支持iDEN。iDEN的开发者摩托罗拉公司也是支持iDEN的第一款Android手机Motorolai1的生产厂商。
1.2.2谷歌的策略
显而易见,Android是一个强大但耗费巨资开发出的移动终端设备平台。那么,为什么谷歌会心甘情愿地提供免费的Android呢?
答案始于谷歌给公司清楚定义的使命(公司信息:about,n.d.):
谷歌的使命是将世界上所有的信息有效地进行组织,并使这些信息在任何地方都可以被访问到而且有用。
手机已经成为眼下最流行的电子消费产品,在全世界已经超过40亿部。因此,通过提供一个先进且免费的移动平台,谷歌相信它正在实现其使命中“(信息)在任何地方都可以被访问到”的部分。当然,这一切对谷歌来说还必须能够实现实际的商业利益。当更多的用户连接到互联网上,就有更多的用户需要搜索信息,最终将驱动作为谷歌主要收入的广告营业额的增长。在2009年3月的一次采访中,AndyRubin说道:
谷歌有一个很好的基于广告的商业盈利模式。同时,开放源码与基于广告的商业盈利模式存在着一个自然的联系。开放源码基本上是一个发布策略,它可以从根本上去除被接纳的障碍。
Krazit,n.d.
对Android的批评之一是谷歌对设备制造商发布Android系统的管理方式不当造成了目前市场非常混乱,充斥着不同版本以及各有差异的Android系统。这与其他诸如iPhone的终端设备情况形成了鲜明的对比,因为苹果公司完全主导了iPhone硬件和操作系统的开发,同时又对第三方开发的应用软件具有显著影响。但是Rubin为谷歌的策略进行了辩解。在同一次的采访中,Rubin就此问题进行了以下阐述(Krazit,n.d.):
对终端设备进行控制的想法虽然很好,(但是)我们面对的是40亿部手机。当你具有对整个终端设备进行控制的能力,由一个厂商快速进行创新的能力将变得非常有限。你仍然可以激励创新,你可以严格要求企业,可以在技术上精益求精,也可以引领整个手机行业,但是你无论如何是无法做好所有事情的。你可以总是在某些小的方面具有特色。但是我们在这里讨论的是如何摆脱那些小的方面,而按照用户期望的方式让用户去访问互联网。我们不想在某些方面造成互联网的改变,不想只拥有部分互联网,不想站在某个角落里使用一个落后版本的互联网,我们想“站在”整个互联网上。
因此,通过推出一款能够同时满足消费者需要以及设备制造商和无线通信服务提供商需要的移动操作系统,谷歌为其基于搜索和广告的盈利模式提供了一个绝佳的发布平台。
1.应用
除了提供一个核心移动开发栈,Android支持创新的另一个重要方式是给予进行应用开发的第三方为Android开发和发布应用程序的权利。截至2011年1月,已经有超过20万项Android应用程序被开发出来。虽然此策略看起来与苹果公司的策略相似,但是在方式方法上有着本质区别。苹果严格控制着推出的应用商店,任何开发者提交应用程序后需要经历一个漫长的审核过程,而苹果公司对每一款应用程序都具有最后的审批权利。提交的应用程序会因为诸多原因被拒绝,尤其是应用程序包含有任何苹果不喜欢的内容。谷歌的不同之处在于不对提交并发布在Android市场上的应用程序进行任何审核。虽然谷歌拥有禁止某个开发者、从Android市场上删除某个应用程序,甚至从某个Android终端设备上进行远程卸载某个应用程序的权利,但通常采用的方式是放手。
2.Nexus手机
2010年1月,谷歌正式推出了自有品牌的智能手机NexusOne(即N1,见图1.1)。N1由宏达电子(HTC)生产,从整体上看,给手机制造商开发和生产手机树立了一个典范。N1采用高速处理器(1GHz),运行最新版本的Android系统,有很多创新之处,例如使用了2个对讲话筒对周边的背景噪声进行综合并与用户的话音进行有效融合以达到技术上可以实现的最佳通话。
大多无线通信服务提供商销售的是被完全封装的手机,以迫使消费者必须与其签署两年的服务合同才能以一定的折扣价买到手机。N1由谷歌公司自行销售,出售的手机本身没有被封装住,此举被许多市场分析师认为是对前者的直接挑战。N1同时通过T-Mobile以折价方式出售,只要购买者同意与该公司签署一个长期服务合同。然而,最终的结果显示,N1的销售没有预期的那样火爆,由此引起市场猜测谷歌没有能够成功地实现N1(参见图1.1)。
与此同时,谷歌公司试图展示应该如何按照他们认为最好的方式推出和维护Android手机。让很多人跌破眼镜的是,一年之后,谷歌又推出了由三星公司(Samsung)生产的智能手机NexusS,如图1.2所示。NexusS有一个诱人的功能是它运行的Android2.3版本支持通过互联网拨打电话(VoiceoverIP,VoIP)。只要一个手机通过Wi-Fi或者是其他方式与互联网实现连接,此手机就可以使用任何现有的VoIP服务拨打或接听电话。在美国,此款手机只通过BestBuy商店进行销售,通信服务的提供商是T-Mobile(参见图1.2)。
人们不清楚的是谷歌推出Nexus系列智能手机的总体目标是什么。然而,能够清楚的是谷歌试图推出自有品牌智能手机的最终目的是给消费者在购买和使用手机上提供更多的选择及灵活性。
1.3Linux、开源软件与取证
开源软件对数字取证领域已经产生了巨大的影响。以免费、开源方式推出的软件取证工具与不公开代码的解决方案相比具有以下优势:
能够通过熟读代码而了解所采用的具体步骤;
能够改进软件能力并将改进的部分与同行们共享;
价格优势。
虽然许多免费的开源软件没有商业化的技术支持模型,还是有一些专门提供技术支持的公司存在。例如,红帽公司(RedHat)通过为Linux操作系统(LinuxOS)提供技术支持和服务已经发展成为一个有一定规模的公司。此外,许多为免费的开源软件包提供维护的人员通常都能够随时联系到并及时回复询问的问题,而且由于他们直接对软件进行维护而能够提供非常优质的服务。
Linux操作系统(LinuxOS)是最知名的一款免费开源软件。Linux不仅是Android的一个关键部分,还可以作为一个功能强大的取证工具加以使用。
Linux发展历史简介
目前已经出版了很多关于Linux技术的书籍,因此只是通过有限的篇幅试图对这样一个重要的操作系统进行清楚的介绍非常困难。网络上也有非常多的有关Linux取证方面的资源,其中很多涉及如何将Linux作为一个取证工具进行使用。
1991年,当时还是芬兰赫尔辛基大学本科生的LinuxTorvalds决定开发一个终端仿真器,用以与学校的计算机系统进行连接。他专为他的个人计算机(处理器为Intel386)编写了代码。但是当他完成了代码开发以后,他意识到他所编写的代码可以作为一个操作系统的基础。因此,他在Usenet新闻小组Usenetnewsgroupcomp.os.minix上发布了以下这条著名的信息(Torvalds,1991):
在读到上面这条信息后,很多热心的Linux使用者更加渴望去了解、修改、创建,甚至去摆弄复杂系统(通常被称为黑客心理)。这条消息被Linux发布在专为Minix操作系统(MinixOS)设置的新闻小组上,此操作系统当时是很多热心人试图用于测试和开发出一个类似UNIX操作系统(UNIXOS)的首选。然而,Linux想冲破Minix操作系统在许可证方面的限制以及克服此系统在技术上的局限性。
在过去的20多年间,Linux得到了很大的完善,并且已经在数量众多的个人计算机和服务器以及当前的移动终端设备上运行。目前已经有成千上万种功能强大的工具可以使用,并为许多编程语言完善了开发环境。目前也已经推出了非常多的版本,以适合不同的需要,如服务器、工作站、笔记本电脑、嵌入式设备、安全套件等。
1.在VirtualBox中安装Linux
Linux真的是一款非常棒的操作系统,我们会将它的强大功能贯穿于本书的所有举例中,便于读者领会和完成。本书的所有举例都在一个以虚拟机(VirtualMachine,VM)方式运行的Ubuntu10.1064位台式机上完成。虽然不同开发商提供的虚拟机软件相互兼容(包括运行在MacOSX上的VMWareFusion),本书的重点是选择免费和开放的软件。因此,VirtualBox这款既开放又可以免费得到的软件成为我们的首选。
说明
在本书的举例中会大量使用Ubuntu虚拟机(UbuntuVM)。以后的章节将会在已有的基础之上加入更多的工具和脚本程序。在此建议读者建立一个Ubuntu虚拟机,独自重复所有的举例,以得到最大的收获。所有的Android取证实例也将直接使用Ubuntu虚拟机。
VirtualBox目前的拥有者是Oracle公司,通过GPLv2许可证发布。甲骨文公司的官方网站上专门有回答有关如何取得许可证的问题的专题。
读者可以通过http:www.virtualbox.org下载VirtualBox,它可以安装在包括微软视窗操作系统(Windows)、苹果Mac操作系统(MacOSX)和Linux(2.4及2.6)操作系统在内的很多操作系统上。在安装了VirtualBox后,用户会看到OracleVMVirtualBoxManager(见图1.3),随后就可以创建和管理虚拟机。
图1.3OracleVMVirtualBoxManagerforOSX
在创建了一个新的虚拟机后,用户必须确认磁盘上有足够的存储空间(建议至少有20GB)以及在内存中有尽可能多的可分配空间。对于Android系统,谷歌建议至少要有1536MB(1.5GB)磁盘空间(获得Android源代码,n.d.)。
通过VirtualBoxManager图形化用户界面(GraphicalUserInterface,GUI)去设置一个新的虚拟机非常简单。然而,如果使用的是一台64位UbuntuLinux工作站或服务器但是又没有运行应用软件的权限,则应该按照以下的步骤去创建、配置及运行一个新的虚拟机(VirtualBox3.2.10)。
从一个ssh对话命令行开始,最好执行screen程序,这样即使失去了与服务器的连接,创建的虚拟机也能够保持在运行状态。然后,完成以下步骤:
完成以上步骤后,虚拟机开始运行,并可以通过任何一个RDP(RemoteDesktopProtocol,远程桌面协议)浏览界面进行访问,如在微软的Windows上使用RemoteDesktopConnection,在Linux上使用rdesktop,在苹果的Mac上使用Microsoft’sRemoteDesktopConnectionClientforMac。要顺利连接到虚拟机,需要与运行虚拟机服务器的3392端口(即服务器IP地址:3392)进行连接。然后,按照提示命令进行操作,直至系统开机。
系统在运行时如遭遇关机或重启,本次的VBoxHeadless运行将结束。可以反复使用下面的命令开启服务器备份。然后,RDP就会被恢复并安装openssh服务器,用户进而可以使用ssh来取代效率较低的RDP。
现在可以通过执行ifconfig命令,并通过找到eth的“inetaddr”而获得虚拟机的IP地址。然后就可以使用最心仪的ssh程序(如果使用Windows,可以使用特别好的免费客户端Putty)ssh到虚拟机。
Sleuth套件
本节介绍由BrianCarrier开发的一款叫做TSK(TheSleuthKit,TSK)的非常好用的开源取证套件。本书的很多举例中都会广泛地涉及TSK。Brian开发了TSK并继续进行维护,他为取证领域提供了大量而出色的服务。如果尚不熟悉TSK的话,可以访问网站http:sleuthkit.org并考虑使用此程序。此网站上有大量的关于TSK的信息以及许多取证方面的微博文章和书籍。如果想要深入领会本书中的举例,应该考虑使用下面的命令在Linux工作站上安装TSK:
希望他人能够向Brian学习,踏着他的足迹,向取证社区提供类似的重要工具套件与服务。
2.禁止automount(自动挂载)
一个非常关键的要求是,用于进行取证的工作站不能启用automount。这是因为,就像它的名称表达的那样,automount会主动将所连接的终端设备上的任何文件系统自动挂载。在Ubuntu上,禁止automount必须由每一个用户自行选择完成。因此,如果工作站上存在有两个或以上的用户账号,则必须确认使用下面的命令对每一个用户账号进行以上的改变设置:
然后进入apps→nautilus→preferences,并确定“media_automount”和“media_automount_open”两个选项均没有被选取,如图1.4所示。
图1.4在Ubuntu上禁止automount
此后就可以关闭Gnome配置编辑器(即gconfeditor)。此时automount已经被禁止。对于普通用户来说,也许需要做许多其他工作。但是,对于取证分析师来说,这一步是必须要求做的(同样的要求适用于硬件写阻止器)。
3.Linux与取证—基本命令
在对取证用Linux工作站进行设置和配置之前,有必要对Linux与取证的关联性进行一下简要介绍。由于支持很多不同的文件系统、有大量的先进工具可供使用,又允许自由开发和编译源代码,Linux工作站成为一个功能强大的取证分析工具。但是,由于很多取证分析师对Linux系统不太熟悉,因此,以下章节中将常用的Linux命令进行描述,描述的内容包括命令本身的介绍、通常用法以及一个或多个如何应用命令的实例。
(1)man
“man”命令将所提交的命令的使用手册显示在终端屏幕上。使用手册包含对命令的详细说明以及命令的用法(包括此命令所有的可用选项或“标记”)。
下面的第一个实例用于显示mount命令的用户手册起始页,第二个实例用于查找所有包含字符串grep的用户手册,man是一个功能强大的查找工具。
(2)help
与man相似,help命令将所提交的命令的有关信息显示在终端屏幕上,包括用法和实例。使用的方式为--help,也可以简单地使用-h或-help。
(3)cd
此命令用于改变当前所在的目录(文件夹)。在Linux中,~是一个特殊字符,用于代表当前正在使用的用户的主目录(文件夹)。例如,在Linux系统中,用户ahoog的主目录(文件夹)是homeahoog。在文件系统的任何地方,都可以用~代表homeahoog。这种表达方式在文档里非常好用。因此,在本书的整个篇幅中,我们都会使用~来表达。即使对于设置的其他用户名,此表达方式依然有效。
(4)mkdir
除非特别指出,此命令用于在当前的目录(文件夹)中创建一个新的子目录(文件夹)。
(5)rmdirrm
根据所使用的不同选项或标记,此命令用来删除文件或目录(文件夹)。rmdir命令只能用于删除内容为空的目录(文件夹)。如果目录(文件夹)里有文件存在,文件必须首先被删除,然后才能使用rmdir命令删除目录(文件夹)。rm命令则可以用于删除文件和目录(文件夹),用户会在实际删除执行之前得到进行确认的提示。使用选项-f则可以越过或省略提示步骤,因此,建议用户谨慎使用,常用语就叫做rmminusrf或rm-rf。
(6)nano
此命令用于在终端上使用编辑器创建和修改文本文件。当需要创建一个文件时,直接输入此命令。
输入nano后在终端屏幕上或运行ssh期间打开文本编辑器,使用户可以输入内容,如图1.5所示。
图1.5使用nano创建文件
当完成内容输入以后,按ControlX将终止编辑器,系统将提示用户是否需要将内容进行存储。此时,我们指定文件名为newfile.txt。
如果需要修改一个已经存在的文件,在nano命令之后加上文件名,如果文件存在于不同的目录(文件夹)中,则使用完整的路径和文件名:
(7)ls
此命令用于罗列出一个目录(文件夹)中的文件以及子目录(文件夹)。当不使用任何选项时,ls命令只罗列出当前所在目录(文件夹)中的文件子目录。使用-lh选项将会出现很长的表,包含很多诸如访问权限、文件拥有者、文件大小以及日期和时间方面的信息。
(8)tree
此命令用于显示出指定目录(文件夹)中子目录(子文件夹)的层次结构。如果没有使用任何参数,则当前所在的目录(文件夹)即为指定目录(文件夹)。在Linux中,当
前所在目录(文件夹)用“.”表示,当前所在目录(文件夹)的上一层目录(文件夹)则用..表示。在下面所举例的输出中,使用的是当前所在目录(文件夹),同时也正好是当前用户的主目录(文件夹)。用户可以使用-L标记来指定所要显示的子目录(文件夹)的层级数。在第一个实例中,只显示一层。在第二个实例中,则显示两层的所有目录(文件夹)和文件。值得提醒的是,关于任何命令的详细信息可以通过man页面(mantree)获得,也可以通过使用命令中的help参数(tree--help)获得。
(9)less
此命令用于一页一页地显示指定的文件。它通常与其他的命令一同使用来一页一页地显示输出结果。以下使用less命令来一屏一屏地在终端窗口显示文件sanitize-csv.sh的内容。当使用less命令显示内容后,以下是一些很重要的、值得记住的指令:
h:读取help菜单;
q:退出help菜单;
spacebar:显示下一屏一页;
b:显示前一屏一页;
:查找一个字符串;
Enter:向下移动一行;
y:向上移动一行。
还有更多的在使用less这个功能强大的命令的过程中可以使用的指令。因此,为了记得使用并读取help屏幕或man页面,也可以在互联网上查找丰富的帮助信息。
(10)cat
此命令将一个文件的内容输出到屏幕,或者写入另外一个指定的文件(无法确保文件的原有格式)。
此命令还可以用于将多个文件合并进一个文件(通常称之为串接文件)。
(11)find
此命令用于在一个目录(文件夹)层次结构中查找文件。以下命令将列出在指定用户的主目录(文件夹)中所有查找到的文件,同时包含这些文件的完整路径。
find命令的输出同时也可以应用在另外一个命令中。以下实例是关于如何将find命令查找到的文件使用在md5sum命令中。此例使用了几个参数:
find:命令;
~:在当前用户的主目录(文件夹)里查找文件;
-typef:只列出普通文件(不列出目录(文件夹));
-exec:执行以下命令;
sha256sum:计算一个文件的sha256散列值的应用包;
{}\;:退出shell的方法与表示法。
如果使用一个命令使用了对由很多文件得出的结果进行操作,也许会出问题。在这种情况下,应该应用一个叫做xargs的应用程序将find命令的结果通过管道的方式输出。
对于许多Linux命令来说,一个命令的输出结果也可以存储到一个文件中。举例来说,以上同一个命令的输出结果可以存储于用户主目录(文件夹)下的一个名称为md5.txt的文件中。
ahoog@ubuntu:~$find~-typef-execmd5{}\;~md5.txt
将find命令使用md5共享程序执行的结果作为find命令的输入,再将此命令产生的输出重定向(存储)到用户主目录(文件夹)下的md5.txt文件中。
(12)chmod
此命令是“改变模式”的缩写,用于改变用户对文件或目录(文件夹)的访问权限。以下是几个应用实例。需要说明的是这些命令必须在textfile.txt所在目录(文件夹)为当前目录(文件夹)时执行,或者需要明确给出通向这个文件的整个路径。
chmod也可用于对一组文件或一个目录(文件夹)进行操作。
(13)chown
chown命令用于改变一个指定文件或目录(文件夹)的拥有人或所隶属的组。在以下举例中,textfile.txt文件的原来拥有人和所隶属的组均是ahoog。使用chown命令将此文件的拥有人变为root。执行此命令要求使用sudo指令。
(14)sudo
在任何命令之前添加sudo用于提升用户的访问权限,使用户可以作为超级用户或另外一个用户执行紧跟其后的命令。运行某些命令要求使用sudo,如apt-get(进行软件安装)、chown(如果目前不是拥有者的话,则改变为拥有者)、挂载、访问原态磁盘设备,以及很多其他命令(取决于具体被访问的文件)。使用sudo的方法就是在某个命令之前加上sodu,系统将会要求输入密码。然后系统会在sodu的日志中记录此命令。
(15)apt-get
apt-get命令中的apt部分是高级包装工具(AdvancedPackagingTool)的缩写,允许用户进行软件安装及卸载、升级,甚至整个系统的升级。执行此命令要求sodu访问权限。
(16)grep
此命令用于在一个文件或一组文件和目录(文件夹)中查找一个指定的词组,类似于使用find在一个打开的文档中查找一个词组。查找的词组区分大小写字母,因此,如果不确定一个字母是大写还是小写的话,就要使用-i选项(不区分大小写)。执行时间取决于文件的大小,使用-i选项会延长命令的完成时间。
命令的一般使用方法为:
以下是几个grep命令的应用实例:
下面的命令用于在用户台式机上所有的文件中查找词组unnecessary。查找的结果显示,这个词组在textfile.txt文件被找到,也存在于WXP-PRO-OEM.iso中。因为后一个文件是一个二进制文件,需要运用其他的技术来显示其内容:
在使用Linux进行取证调查和分析时,grep命令是一个不可缺少的公用工具。
(17)管道与重定向(|和)
管道字符|(在大多数键盘上位于回车键的上方)用于将一个命令的输出结果作为另外一个命令的参数进行进一步处理。输出结果也可以通过使用重定向至另外一个文件。
以下命令将catfile.txt的结果通过管道的方式交由less命令执行,使用户可以在屏幕上逐页浏览文件的内容。
以下命令首先使用grep命令在chl.xml文件中查找字符串android,然后从得出的结果中查找区分大小写的字符串forensics。最终得到的查找结果再使用less命令一页一页地显示出来。
将执行一个命令得到的输出结果重定向也非常有用。以下命令得到文件chl.xml的输出(使用cat命令),然后将其复制到用户台式机的一个文件名为~Desktopnew-ch1.xml的文件。
当针对一个特定的文件甚至针对整个磁盘空间映像执行strings命令时,重定向非常有用。我们将在第7章进一步讨论此应用。
1.4Android开放源码项目
Android的开放策略自然导致Android源代码在2008年10月28日通过Android开放源码项目(AndroidOpenSourceProject,AOSP)进行发布。AOSP网站发布的声明如下(得到Android源代码,n.d.):
我们创造了Android是为了将我们在移动应用方面的经验进行共享。我们的目标就是始终要为移动通信服务提供商、原始设备制造商[Originalequipmentmanufacturers,OEM]以及开发商提供一个使创新想法成为现实的开放平台。我们的目标是确保系统不存在单点失灵的情况,即允许一个厂家有能力限制或控制任何其他厂家所做的创新。我们的方案就是一个开放以及开放源码的平台。
谷歌的开发策略注重在开发一流的设备上(如Nexus系列智能手机),使谷歌能够吸纳一个新平台所带来的风险。同时,在AOSP开发下一版Android系统时,制造商们可以在他们生产的终端设备上使用当前最新版本的Android系统。
1.4.1AOSP使用许可
AOSP通过使用以下两种软件使用许可进行管理:Apache软件使用许可2.0(Apache2.0,即ASL2.0)和GNU公共使用许可v2(GPLv2)。GPLv2是一个要求比较严格的使用许可,它要求所有代码的贡献者使用同一使用许可免费发布所开发的新代码。由于谷歌认为此种方式将会影响Android的商业化的支持,GPLv2主要涵盖在Android系统中的Linux内核部分。
Apache2.0使用许可更加容易被商业实体所接受,因为它附加的制约比较少,而且不要求公司开放他们开发的相关软件的源代码。以下是AOSP关于为什么要采用Apache2.0使用许可的说明(Licenses,n.d.):
有时会有人问我们为什么Android宁愿采用Apache软件使用许可2.0。对于用户层(即非内核)软件,我们确实在事实上倾向于使用ASL2.0(或者类似的使用许可,如BSD、MIT等),而不是其他方式的使用许可,如LGPL。
Android就是倡导自由和选择。Android的目标就是在移动世界中推崇开放,但是我们并不认为可以预测或主导安装我们的软件的人们如何去使用。因此,在鼓励每一个人去生产开放及可修改的终端设备的同时,我们并不认为我们有权利去强迫人们这么做。使用LGPL代码库将会强迫人们这样去做。
我们的具体顾虑如下:
1)LGPL(使用简单化的语言)要求满足以下的任意一个条件:将源代码发往具体应用;对源代码书面出价;与LGPL化的代码库实现动态链接,使用户可以通过手动方式对代码库进行升级及更新。由于Android软件通常以静态的系统镜像方式发布,遵守这些要求会制约OEM的设计。(例如,用户在只读闪存(read-onlyflashstorage)上很难更新一个代码库。)
2)LGPL要求允许用户进行修改以及为这些修改进行程序调试所做的反向工程。大多数终端设备制造商不愿意受到这些条件的约束。因此,为了尽可能地降低给这些公司带来的负担,我们尽可能在用户空间不使用LGPL。
3)在历史上,对下游的设备开发商和应用开发商而言,LGPL代码库是造成大量的遵守使用许可方面问题的根源。很不幸,让工程师们了解这些问题也非常困难并且是一个很漫长的过程。Android成功的关键在于使终端设备制造商尽可能容易地遵守使用许可。
以上观点就是我们为什么宁愿对源代码使用ASL2.0的原因。但我们并不是要批评LGPL或其他使用许可。我们对此议题有很强的感受,以至于达到了最大限度地使用ASL2.0。然而,我们喜欢所有的免费及开源的使用许可,同时也充分尊重他人的意见和选择。只是我们断定ASL2.0是达到我们所追求的目标的正确使用许可。
1.4.2开发过程
AOSP是一个非常成熟且复杂的开放源码项目,需要对全球众多开发商进行协调。因此,AOSP为此项目的贡献者定义了一套必须严格遵守的角色和过程。以下是所定义的角色:
贡献者开发者:为这个项目贡献代码的个人和企业;
验证者:对被改变的代码进行测试的个人;
审批者:具有开发经验、能够决定改变的代码是否可以被接受的个人;
项目负责人:通常为负责对AOSP项目进行管理的谷歌员工。
任何人随时都可以下载、编译及改进AOSP项目。开发过程如图1.6所示。
图1.6AOSP开发流程
1.4.3开源在取证中的价值
取证检查者不需要对AOSP项目直接做任何贡献。但是,下载此软件却有着巨大的价值。例如,当检查一个来自于Android1.5终端设备的YetAnotherFlashFileSystem2YAFFS2物理映像,使用字符串去提取ASCII内容时,发现词组sillyoldname反复出现。对于大多数文件系统来说,检查者需要推测词组sillyoldname是否适宜。但是,通过下载源代码,检查者可以快速找到此词组,获得相应代码并进行检查已获得其他信息。在以上例子中,当一个YAFFS2个体(比如一个文件)的物理头部被更新时,在某些情况下,名称字段被设置为sillyoldname。
在AOSP的文件kernelfsyaffs2yaffs_guts.c中,有一个叫做yaffs_UpdateObjectHeader的函数。在此函数的代码及函数头中的注释如下:
定义变量oldName,并赋予内容sillyoldname:
当先前的ChunkId值大于0时,正在被更新的客体头部中的名称字段被设置成oldName:
代码中还检查是否最初对函数调用时对客体使用了一个新的名字,如果函数调用没有使用新的名字,则使用数值oldName(还是旧的名称sillyoldname):
也许并不是每一个检查者都愿意去阅读和理解程序员写的代码(在这里是C语言),那么很显然,此类信息在取证检查中就变得非常有用。当然,还可以使用其他很多手段给检查者带来巨大的价值,比如如何给SMS消息加上时间戳、如何去实现地理标记等。
1.4.4AOSP下载和编译
希望上述的YAFFS2实例能够很清楚地展示出应用Android源代码的价值。本节重点讲述下载及编译最新版AOSP所需要的步骤。Android2.2及以前版本可以在32位机器上进行编译,但是最新版的AOSP(Android2.3)及后续版本要求使用64位的机器进行编译。
如果使用我们先前构建的Ubuntu虚拟机,我们就可以开始对Ubuntu的安装进行更新,以源代码为基础来构建Android:
恭喜你,你已经完成了用源代码构建Android(或者已经在开始构建,可能会需要一些时间才能完成)。
现在,如果要对任何Android内部进行更深入的了解,则可以对源代码进行搜索。表1.5为Android核心项目的清单,基本上对应于Android源代码的目录(文件夹)。AOSP项目信息可以从以下网站获得:https:sites.google.comaandroid.comopensourceprojects,在那里有对每一个项目函数的简单介绍。
表1.5Android核心项目
项目描述
bionicC运行时:libc,libm,libdl,动态连接器
bootiosderlegacy初始启动加载程序参考代码
build构建系统
dalvikDalvik虚拟机
development高级程序开发及调试工具
frameworksbase核心Android应用框架程序库
frameworkspoliciesbase框架配置策略
hardwarelibhardware硬件抽象定义库
hardwareril无线接口层
kemelLinux内核
prebuilt用于构建Linux和MacOS系统的二进制代码
recovery系统修复环境
systembluetooth蓝牙工具
systemcore最基本的初始启动环境
systemextrss底层调试检查工具
systemwiantiTI1251无线局域网驱动程序及工具
1.5Android平台的国际化
Android平台广泛支持多种国际及区域语言设置。这不但使手机可以用各种语言显示菜单、网站以及用户界面中的其他部分,而且支持使用各种国际键盘格式进行输入。
1.5.1Unicode
Android能够支持众多语言的关键是将所有的字符都用Unicode格式进行编码和解码。Unicode是一个支持超过600种不同语言的国际编码标准。(Languagesandscripts,n.d.)。
提示:对楔形文字的支持
对于好奇和追求新鲜感的读者来说,Unicode的确支持楔形文字,虽然我们还必须等待Android的用户界面支持阿卡得语楔形文字那一天的到来。我们可以从网址http:unicode.orgreposcldr_tmptrunkdiffsupplementallanguages_and_scripts.html上获得关于Unicode目前对所有语言和脚本提供支持的信息。
1.5.2输入键盘
Android支持很多种不同的输入键盘,有时称为输入方式。例如,当运行一个Android虚拟终端设备(AndroidVirtualDevice,AVD)时,仿真器允许你改变通过键盘输入所使用的语言,如图1.7所示。
对不同语言提供支持的功能AVD系统中得到实现。这一点对于取证调查有着非常重要的影响,考虑到某些数据可能会使用完全没有预料到的语言进行编码,取证分析师必须时刻保持警惕。
以上在AVD已经实现的功能在很多实际的Android终端设备中也已经实现。例如,在美国由VerizonWireless销售的HTCIncredible中,有一个叫做语言与键盘(LanguageandKeyboard)的设置。用户可以通过此设置为用户界面选择两种语言:英语和西班牙语。然后,在文本(Text)设置下,用户可以选择触摸输入(TouchInput)设置。之后,用户可以指定键盘类型(QWERTY、电话键盘(PhoneKeypad)或简捷版QWERTY(CompactQWERTY))、选择超过20种不同的国际键盘、具体的中文文字输入选项(繁体字或简体字)以及很多其他选项。最新版的Android系统(Gingerbread,2.3)目前支持57种语言(Android2.3platform,n.d.)。
图1.7在Android虚拟终端设备上显示的中文数字键盘
最后,Android支持用户安装的第三方键盘。有一个叫做Swype的日渐流行的键盘允许用户将放在键盘上的手指从一个字符连续地划向另外一个字符。键盘软件可以比较准确地确定用户敲入的字。此软件支持多种语言,是一个很好的即插即用式的键盘实例。
1.5.3个性化分支
由于Android按照开放源码的方式进行发布,任何人(包括你,只要按照以上的步骤操作即可!)都可以下载并对Android源代码进行个性化修改。虽然很多人最终会将他们修改过的部分返回给谷歌并被融入Android,但也有些人会开发出Android代码的个性化分支并发布个性化版本的Android。
1.售后市场固件
也许最具有典型代表性的Android个性化分支(也叫做Mods、固件或ROMs)产生于Android业余爱好者及追捧者社区。此社区由人数众多、背景复杂的个人组成,他们对Android的开发、实验或者叫做业余爱好抱有极大的热情。他们做的某些工作需要获得Android终端设备的超级用户访问权限、激活新的功能或者只是为了炫耀他们最新实现的个人化代码。此社区非常活跃、充满热情、富有创造力,是一个非常好的信息来源(以及错误信息),他们也响应他人提出的帮助请求。严肃的Android研究人员绝对不应该无视此社区的存在。然而,大量的信息需要研究人员耗费更多的精力。
最流行的一个社区叫做XDA开发者,自称为是“最大的面向Android和Windows移动平台的智能手机追随者和开发者的互联网社区”(xda-developers,n.d.)。此社区的网站有超过320万注册用户,运行着一个让人印象深刻的论坛。
很多个性化的Mods通过XDA发布,开发者们通常在此互联网社区中异常活跃。最流行的售后市场固件也许要数CyanogenMod。此固件基于AOSP开发,除了加入了新的功能,与由制造商和服务提供商直接提供的基于Android的ROMs相比,此固件还试图提高终端设备的性能和可靠性(CyanogenMod,n.d.)。目前CyanogenMod支持由Commitva、戴尔、HTC、摩托罗拉、三星和Viewsonic6个生产商生产的17种不同的智能手机和平板终端设备。这些售后市场固件在终端设备上允许超级用户访问权限,并正如将要在第6章中讨论到的那样,这是真正获取终端设备的关键。
2.OPhoneOS
OPhoneOS(OpenMobilePhoneOS,开放移动电话OS)是一款基于Android的、由一个叫做Borqs的中国软件开发公司开发的。OPhoneOS是由中国政府监管的,拥有超过5亿用户而成为全球最大的移动服务提供商的中国移动开发。2010年6月,OPhoneOS2.0在北京发布。虽然Borqs及OPhoneOS在中国以外并不为人们所熟知,但是它在Android的生态系统中却扮演着一个日趋重要的角色。在中国,Borqs公司首席执行官声明该公司只同一个服务提供商进行合作,也就是中国移动,因为在中国“你无法同时为两个主人服务”(China抯OPhone,n.d.)。
因此,Borqs将软件名称OPhoneOS专门保留给中国移动使用。然而,根据该公司网站的消息,该公司还开发出另外一款叫做Android+Android+的软件China抯OPhone,n.d.。在该公司的新闻发布中,Borqs解释说戴尔Aero(DellAero)是在Android+的基础上开发出的一款软件,包含了一个类似苹果(Apple-esque)的用户界面。此软件目前由戴尔公司在巴西和墨西哥市场上发布。
3.面向iPhone的Android(及其他非Android终端设备)
目前最受争议的一款黑市固件也许就数能够在iPhone上运行的Android。由于很多移动终端设备都使用ARM处理器,软件移植是可以实现的。这就能够使Android也运行在为其他诸如Windows移动、Symbian、iOS等操作系统而设计的终端设备上。没有任何事情能够比拟于向苹果粉丝演示在漂亮的iPhone上也能运行Android!
1.6Android市场
Android市场是第三方开发者向任何拥有Android终端设备的用户发表他们所开发的应用的通道。Android市场最早于2008年8月28日在谷歌开发者博客上发布,被描述为“一个开放的内容发布系统,帮助终端用户找寻、购买、下载及在他们的Android终端设备上安装各种类型的内容”(Androiddevelopersblog,n.d.)。当Android市场在2008年10月首次推出时,它不支持收费的软件应用。然而,进入2009年,Android市场开始在美国和英国支持对软件应用进行收费。截至2011年1月,Android市场在29个国家支持对软件应用进行收费(Supportedlocations,n.d.)。其他一些国家,特别值得一提的是印度,可以使用Android市场,但是目前无法安装收费软件应用。
谷歌对Android市场所采用的松散的管理与苹果公司对苹果商店的严格管理形成了鲜明的对比。虽然Android市场面向用户有服务条例(TermsofService)(AndroidMarketterms,n.d.),以及面向开发者有Android市场开发者销售协议(AndroidMarketDeveloperDistributionAgreement)(AndroidMarketdeveloper,n.d.),软件应用在市场上进行销售不需要经过审批流程。但是,谷歌相信,对软件应用的排名会将有问题的软件和价值低劣的软件清除出去。
开发者如果要通过Android市场推销软件,必须支付25美元注册费,并用私钥对软件应用进行签名以便能在市场中被唯一识别。当一个用户购买一个软件应用,支付款的70%归开发者,30%归谷歌(有时也会涉及服务提供商)。最初,谷歌允许用户可以在购买后的48小时内退货。但是到2010年12月,谷歌将退货时间缩短到15分钟。
谷歌能够远程从Android市场甚至直接从Android终端设备上删除任何一款软件应用。这个远程应用删除特色(RemoteApplicationRemovalFeature)是Android的一个安全控制功能,能够将任何一个活跃的危险软件应用在大范围内迅速删除,以防止其影响更多的用户(Androiddevelopersblog:exercising,n.d.)。这项安全控制功能第一次使用是在2010年6月,删除了一款由信息安全研究者发布的概念验证型软件,但实为在终端设备上下载和安装另一款应用软件的软件(Mills,n.d.)。
按照Android的开放性精神,谷歌也不会禁止用户从他们所使用的手机的开发商的网站上直接下载并安装应用软件,同时也不会禁止形成另外一个与其竞争的软件应用市场。目前已经有几个可供用户选择的市场,但是相比之下,大多数的规模都很小。另外,已经有好几家大公司宣布或表示有意愿建立可供用户选择的软件应用商店,包括亚马逊(Amazon)、百思买(BestBuy)和Verizon。
1.6.1应用软件安装
当从Android市场上下载并安装一个软件应用程序,用户首先必须运行Market应用程序,并使用Gmail邮箱账号登录,如图1.8所示。登录账号使用户可以通过已经在谷歌设立的具有地址和信用卡信息的付款账号去购买应付费的软件应用。谷歌近期已经与某些通信服务提供商达成了合作,允许用户可以将购买软件的应付款与通信服务提供商的每月账单一起进行支付,而不一定需要通过谷歌的支付信用卡付款。
谷歌的Market软件允许用户在Android市场中查找应用软件程序,并可以根据主题和流行程度进行浏览。一旦某个应用软件程序被选择,一个用户安装应用软件程序的专门页面将显示出来。这个专门页面同时还有此应用软件程序的具体信息,如软件描述、下载次数、平均排名、详细评价、其他相关的应用程序、开发者信息,最后还允许用户对此应用软件进行反馈,评估软件的适用性。
正如我们在后续章节中将要讨论的那样,访问权限是Android系统安全的核心部分。一旦某个用户决定安装一款应用软件,一个如图1.9所示的页面将显示并告诉用户此应用软件所要求的访问权限。此时,用户可以决定是否接受提出的访问权限要求并继续进行安装或者是决定放弃而返回到此前的显示屏幕。
在应用软件程序下载、安装后,结果会显示在终端设备顶部的通知栏中。然后,用户就可以在终端设备上运行此应用软件,或者通过应用软件程序列表对它进行访问。
如要删除一个应用软件程序,用户可以访问终端设备的设置(Settings)并进行应用(Application)设置。然后,用户就可以对应用软件进行管理(Manage)(如图1.10所示),屏幕会显示应用软件程序列表以及诸如已下载、正在运行、在SD卡上等各种特性。
通过选择某个应用软件程序,用户就可以在应用(ApplicationInfo)信息屏幕看到各种关于此应用软件程序的信息,并可以选择以下操作:强制停止(Forcestop)、清理数据(Cleardata)、清理缓存(Clearcashe)、卸载(Uninstall),如图1.11所示。
1.6.2应用情况统计
Android市场成长非常迅猛。在推出的6个月后,T-Mobile首席技术官ColeBrodman评论说:用户需要更好地过滤程序来从Android市场近2300款应用软件程序中成功地选择应用软件(Lawson,n.d.)。截至2011年1月,Android市场中已经有超过20万款应用软件,仅2010年11月就增加了27227款(AndroidMarketstatistics,n.d.)。Android市场中的应用软件程序的下载次数估计已超过25亿。
很显然,应用软件程序是安全和取证关注的一个核心领域。在第4章中,我们将详细探讨应用软件程序如何在Android终端设备中植入永久数据、信息存储于何处以及如何恢复信息并进行分析。
1.7Android取证
很显然,Android取证非常必要。通常,智能手机也许是知道个人信息最多的电子产品。大多数人与智能手机几乎形影不离,包括睡觉。此终端设备内存有个人和公司信息,并存储包括文字消息、电子邮件、GPS位置信息、照片、视频等大量的数据。人们总是对他们的智能手机比对其他人或设备更加诚实。为什么呢?因为人们感觉此终端设备是安全的,能够对他们不愿意与其他任何人共享的问题进行回答。曾经有不少取证分析师讥讽地说:“谷歌是什么样,你就是什么样”,直接表达了人们对于他们所使用的智能手机的忠诚度。
面临的挑战
当然,值得做的事情都不会是很容易的,尤其是移动取证和Android取证具有非常多的必须克服的挑战。
数字取证的一个基本目标是预防取证检查师对被检查的终端设备进行修改。然而,移动电话缺少像传统计算机那样关闭磁盘、将其连接到一个写阻止器,并按照满足取证要求的方式进行映像的能力。与智能手机的任何交互都会在某种程度上改变此终端设备。正因为如此,取证检查师在检查移动终端设备时必须运用他们的判断,而当任何改变发生时,他们也必须解释清楚改变是如何发生的以及为什么他们做出了此选择。
有些取证检查师没有按照以上的方式去做,因而引发接连不断的争论。然而,因取证检查的需要而对目标计算机进行更改的技术已经由来已久。例如,在调查恶意软件攻击时,对内存的分析通常是必要的。同样,如果磁盘已加密,取证检查者必须在系统还在运行时就获得磁盘的映像,否则也许再也没有机会获取磁盘上的数据。再如,由于复杂的环境而必须始终与网络保持连接的系统,其具有代表性的是大公司的服务器。虽然每一个取证检查者都需要尽量不要对调查的终端设备造成任何改变,但是在移动领域中非常难做到。因此,如果不能对终端设备进行改变,剩下的选择就只能是不去检查此设备了。很显然,这种选择是不可取的,因为通过移动取证获得的证据是很多调查的重要组成部分,在过去也帮助破解了很多犯罪案件。
给Android取证带来更多困难的是大量不同类型的终端设备、不同版本的Android系统以及应用。终端设备与Android版本的组合就已经至少达到数千种,而每一个终端设备与平台相结合又有其独特性。虽然对每一个Android终端设备进行逻辑分析是可以达到的,但是以上的大量的组合使对每一个Android终端设备进行完整的物理获取几乎是无法实现的。即使Android版本上一个非常微小的区别,对于关注度高的案件都需要大量的测试与验证。
1.8本章小结
Android是一个快速发展、特征鲜明以及令人兴奋的移动平台。特征、连结性以及流行程度相结合自然产生对Android取证的需求。在移动取证难度增长的同时,取证的价值也在增长。Android的开放源码状态可以最大程度地帮助取证分析师获得所需要的对Android的了解,使Android成为一个理想的工作平台。
1.9参考资料
第2章
Android硬件平台
本章要点
核心部件概述
终端设备类型概述
只读内存和启动加载程序
制造商
具体的终端设备
2.1绪论
Android的设计是为了与尽可能多的硬件实现兼容。此目标在很大程度上依赖于Linux内核来实现,因为Linux内核经过多年的发展已经能够做到支持大量不同的硬件。这是Android平台的一个重要特点,因为它可以让制造商有很大的自由度去设计、采购和集成最理想的Android终端设备的部件。此策略允许开发能力强大的、能够进行大量数据处理的双核终端设备以及入门级终端设备以满足入门级无线服务计划。虽然硬件兼容性对制造商和无线通信服务提供商以及最终对消费者都是一件好事,但硬件的多样性对取证分析师和安全工程师提出了很多挑战。了解Android的硬件部件、设备类型以及启动过程对于全面了解Android将会有很大帮助。
2.2核心部件概述
Android的设计就是要支持尽可能多的终端设备和制造商。因此,任何主要部件一经生产就可能已经过时。然而,在众多Android终端设备中,始终存在一些能够长期持续的部件值得在此讨论。以下讨论的部件是构成Android终端设备的核心部件。
2.2.1中央处理器
中央处理器(CPU)对很多取证分析师来说是一个非常熟悉的术语,毋庸置疑,它在Android终端设备中扮演着重要的角色。CPU负责执行操作系统(OS)和应用程序代码,并负责协调或控制系统中包括网络、存储、显示及输入设备等在内的其他核心部件。
从一开始,大多数(即使不是全部)的Android终端设备都使用ARM处理器作为其CPU,对于移动平台来说已经具有足够的处理能力,而同时又是按照低能耗要求设计,是延长电池续航时间的关键。
然而,很多公司以及Android爱好者已经将Android移植到其他的平台。在公司方面,英特尔(Intel)已经将Android移植到它的Atom处理器上。同样,谷歌也已经将Android移植到基于Android的谷歌TV产品上。还有其他一些项目,比如Androidx86(Android-x86,n.d.),也推出了可以运行在英特尔x86架构上的Android版本。所支持的部分平台包括很多EeePC型号个人计算机以及联想ThinkPadx61平板电脑。
2.2.2基带调制解调器无线电
基带调制解调器以及无线电给Android终端设备提供连接到无线蜂窝网络的硬件和软件,使用终端设备进行语音通话和数据通信。
为了不使CPU被这一类的活动所占据,终端设备的设计者通常使用一个专用部件来管理复杂的无线蜂窝通信。因此,虽然CPU可以对终端设备内的所有活动进行直接控制,而实际上是基带调制解调器在对无线蜂窝通信进行管理。
在全书的讨论中,我们会交换地使用术语基带调制解调、基带调制解调器、无线电。虽然系统很复杂,以上的定义也可能存在某些细微差别,然而这些区别对于取证分析来说是微不足道的。
2.2.3内存(RAM与NAND闪存)
简单地说,Android终端设备在某种意义上就是计算机,他们的运行需要各种类型的内存。目前所需要的两种内存是易失性内存(随机访问内存,RAM)和非易失性内存(NAND闪存)。
系统使用RAM来装载、执行、控制操作系统、应用程序或数据的核心部分。RAM属于易失性内存,也就是说没有电源供应就无法保住内存的状态。
然而,NAND闪存内存(以下简称NAND闪存)是非易失的,因此,即使在终端设备断电后,里面的数据依然存在。NAND闪存用来存储启动加载软件、操作系统和用户数据。因此,它成为任何取证调查的关键部件,就类似于磁盘之于笔记本电脑、台式电脑或服务器的取证调查那样重要。NAND闪存还有一些独特的性质使它特别适合于移动终端设备,但同时也给编程人员带来很多挑战(常常也会给取证分析师带来难得的机会)。这些特性将在第4章中进行详细讨论。
从硬件角度来看,移动终端设备受到体积的制约。通常,RAM和NAND闪存被放置在同一个叫做多芯片组装(MCP)的部件上。当对Android终端设备的部件进行检查时,一般来说,NAND闪存和RAM会被组装成为一个MCP。
图2.1显示的是一个由叫做Hynix的内存厂商生产的内存(用在戴尔Streak和其他Android终端设备上),它的总体架构是对MCP部件的一个很好的描述,它不但包含了NAND闪存和RAM,而且包含了为适合不同终端设备的各种组装方式。
图2.1MCP架构(MobileMemory,n.d.)
2.2.4GPS
毫无疑问,自从移动终端设备具备了无线蜂窝通信功能,最重要的创新之一就是将全球定位系统(GPS)集成到核心功能中。这个功能不但能够通过使用GPS卫星识别终端设备的位置,而且支持诸如点到点方向指示、基于位置的服务等应用,以及将来必将出现的更多有用的服务。
2.2.5无线(Wi-Fi与蓝牙)
在无线蜂窝网络之外,大多数终端设备还具有其他无线通信技术,比如用于高速通信连接的Wi-Fi技术以及用于与诸如耳机、键盘、打印机等外部终端设备进行连接的蓝牙技术。实际上,某些终端设备可能忽略与无线蜂窝网络的连接,这样不但可以降低终端设备的成本和复杂度,而且可以节省用户缴纳的月费。这些终端设备也许只为家居应用而设计(例如,家用电话或多媒体设备),或在没有Wi-Fi连接时可以离线使用(如平板电脑或电子阅读器(e-reader))。
2.2.6安全数字卡
大多数Android终端设备在出厂时都有一个可取出的叫做SD(安全数字卡)的存储卡。与在终端设备中的NAND闪存一样,SD卡属于非易失类型存储,使用的是NAND闪存技术。然而,因为SD卡的设计就是为了达到移动目的,他们必须满足各种物理上和通信方面的规范,使他们能够在大多数终端设备上进行使用。
SD卡也是大多数Android终端设备和流行的苹果iPhone在设计上的一个明显区别。在设计上,iPhone有一个内置的4~32GB的NAND闪存,不支持SD卡。虽然更加昂贵,但这样的设计可以使终端设备制造商(即苹果)对终端设备实施更多的控制。对于Android来说,大的用户文件应该存储在SD卡上。这样不但给消费者提供了一个廉价且容易对内存进行升级的选择,而且SD卡可以随时取出、移走。因此,当用户购买了一款新的手机,他们可以很容易地通过使用SD卡实现数据的迁移。
近期推出的HTC手机(特别是HTCIncredible)提供一个标准的SD卡接口,但是手机出厂时没有携带一个SD卡。取而代之的是,在此款手机上可以设置使用一部分内置的NAND内存来模拟一个SD卡,并将其呈现为一个SD卡。但这却给取证分析带来了额外的复杂性,因为分析师首先必须确定是否存在一个SD卡或者模拟的SD卡,或者是否使用了其他类型的用户数据存储方式(除了内置的NAND闪存之外)。
2.2.7显示屏
Android终端设备上的显示屏很显然是一个关键部件。它是与用户实现交互的主要界面,不但通过显示屏与用户交互,而且对用户的触摸进行响应。显示屏背后的技术是目前紧张开发的核心。早期的交互技术包括一个液晶显示屏以及显示屏上的另外一层对用户输入进行检测。近期的改进包括更高的显示分辨率、更明亮的屏幕、更敏感和复杂的用户触摸交互以及低能量损耗。事实上,某些近期推出的Android智能手机,如三星的SuperAMOLED技术,主要就是因为显示屏提供的功能而受到消费者的欢迎。
2.2.8摄像机
照相机在智能手机上最初只是用来照相。这在当时是一个让人非常振奋的发展,此后,在该领域的发展又取得了重大的创新。大多数终端设备目前还可以支持摄像功能(有些还具有很高的清晰度)。当然,照相机的质量也有很大的提高,目前通常都集成了闪光灯。
近期,有些终端设备包含两个照相机。在终端设备背面的第一个照相机用于对外部进行照相和摄像。在终端设备正面的第二个照相机用于如视频会议这样的应用。
多数Android终端设备还把照相机功能和GPS功能相结合;从此,用户不但可以记录相片的日期和时间,还可以记录相片的GPS坐标。然后用户就可以很容易地上传并通过网络实现共享,也可以通过无线蜂窝服务提供商的多媒体消息服务(MultimediaMessagingService,MMS)进行发送。
此领域中的一个有趣的发展是使用照相机读取条形码。某些专业化的服务利用照相机对条形码进行拍照,然后对数据进行分析。通过获得条形码可以查询产品介绍、确定最好价格或者可以让用户在餐厅的申请表上进行自动登记并根据相关记录进行分级。也许在不久的将来,这一类的应用还会允许用户对有意购买的产品进行支付。
早期的这一类应用当属谷歌推出的叫做Goggles的服务。用户可以对任何实物进行拍照,然后此应用试图对实物进行识别。谷歌提供的一个有趣的应用实例是观光旅客运用此应用对所处地标进行识别。
2.2.9输入键盘
你也许认为在键盘上鲜有创新,然而,情况绝对不是这样。归功于触摸技术的进步,大多数Android终端设备都有一个在显示屏上的输入键盘。很多终端设备同时还有一个基于硬件的输入键盘。
软件输入键盘的强大功能使输入键盘的显示能够按照显示屏的方向进行自我调整(例如,如果显示屏被旋转90度,输入键盘也跟着旋转),并支持多种语言。
还有一些公司正在开发更加高效的文本输入技术。有一个叫做SwypeInc.的公司开发了一款输入键盘,用户不需要对每一个字符都选择一个键。取而代之的是,对每一个需要输入的字符,用户只要选择第一个字符,然后在输入键盘上来回移动手指(不需要离开输入键盘)去选择后续的字符,直到完成。Swype输入键盘来决定可能的字并将其完成(或者提出建议)。这种方式已被证明是非常成功的,所以我们期待看到更多的Swype技术(或者是类似的创新)被集成到Android键盘中。
2.2.10电池
电池的续航时间对智能手机用户一直是一个关注重点。用户也许非常喜欢他们的手机,但是却憎恨所使用的电池。人们使用终端设备以及使其功能强大的部件越多,对电池的消耗就越多。电池消耗的最小化已经受到极大的关注。然而,大多数用户仍然发现他们必须每天都对电池进行充电。
随着时间的流逝,硬件、软件和电池技术的进步将意味着对电池的充电不再需要那么频繁。目前在此领域中有一些非常有趣的研究倡议,比如对手机进行无线充电、利用人体的运动对手机连续进行充电,或者简单地去制造能量更强的电池。无论是何种改进都将受到消费者的欢迎。
对于取证分析师来说,首先需要牢记的是SD卡通常装配在电池的下面。因此,要获取SD卡(以确定终端设备的类型和身份),用户一般都需要首先将电池取出(因此会关闭终端设备)。这里有很多需要考虑的方面,我们将会在第6章中予以讨论。
2.2.11通用串行总线
大多数Android终端设备支持通用串行总线(USB)接口,使其能够通过计算机进行访问。虽然用在不同的终端设备上的连接用电缆可能有所不同,但是一般来说,USB接口能够使大多数操作系统实现与终端设备相连接。以下是Android终端设备上一些常见的对外接口:
1)充电专用:终端设备可以通过此USB接口进行充电;
2)磁盘接口:终端设备的部分(包括SD卡、模拟SD卡以及其他的磁盘接口)对操作系统来说可以被表现为一个大规模存储设备(MassStorageDevice),并且可以按照一个大规模存储设备进行访问;
3)厂商特设的接口:这一类接口包括定制同步协议、用以进行软件安装的模拟CD只读内存(ROM)驱动程序以及用于共享电话上与互联网实现连接的特殊接口;
4)Android程序调试桥(ADB):是一个让用户访问终端设备上shell命令行以及其他最新功能的接口。
我们将在第3章中讨论磁盘接口和ADB接口,这两类接口对于Android终端设备进行取证调查来说都是非常关键的部件。
2.2.12加速仪陀螺仪
根据终端设备如何被手持或被旋转,Android能够检测并相应改变用户界面。这个功能通常是通过使用一个加速仪去检测终端设备被加速(或被定位)的尺寸和方向。通常,这个结果用于将显示屏在横向显示还是竖向显示之间进行变化。
最新的Android版本(本书撰写时为2.3)支持使用比加速仪更加敏感及更加成熟的陀螺仪。陀螺仪能够对终端设备的移动进行更好的响应以及更精确的测量,这是高级游戏开发的关键。
2.2.13音响麦克风
最后,没有收听和生成音乐的功能,智能手机或平板电脑将不会那么诱人。像其他部件一样,音响和麦克风技术随着产品更新换代继续成熟。举例来说,某些Android终端设备拥有两到三个麦克风,再与Android软件相结合,具备了检测并抵消背景噪声的能力,以提供更好的音响质量。也许作为本世纪最令人震惊的技术发展,对讲电话已经发展到可以被实际应用到真实的交谈中。
2.3终端设备类型概述
以上一节所介绍的核心部件为基础,设计者们已经创造出了大量不同类型的终端设备。当T-MobileG1(HTCDream100)在2008年被推向市场时,对Android终端设备及类型很容易进行跟踪。那时只有G1,唯一的终端设备类型就是智能手机。当然,当时也有很多关于新类型终端设备的博客帖子,但也都是一些推测。
然而,到2010年年底,Android终端设备的数量不仅大幅增长,而且种类也大幅增多。很多网站试图跟踪Android终端设备的增长,但是,大多数的数据都不完整。PDAdb.net是一个还不错的可以用于了解新的Android终端设备的参考,跟踪并提供很多关于当前及将来的终端设备的信息。当前,超过300种运行Android的终端设备被跟踪,可以通过PDAdb.net的主页面进行搜索(MainPage,n.d.)。
智能手机和平板电脑目前是主要的Android终端设备,然而成长快速的是超薄型计算机(我们将其称为上网本电脑)以及电子阅读器(e-readers)。在技术创新方面,谷歌TV(GoogleTV)终端设备(运行Android)正在推向市场,很多汽车制造商已经宣布将在他们的媒体和导航系统中运行Android。最后,还有很多的终端设备可以统一归为“其他”这个类,这一类终端设备也许目前还不够成熟,但将来肯定会成为主流。这一类终端设备包括家用电器、游戏机、GPS接收器、家居电话和音响设备、相框、打印机等。下一节将对其中某些类型的终端设备进行详细介绍。
2.3.1智能手机
智能手机是最流行的Android终端设备。它们包含了上面介绍到的几乎所有的部件,也是知名度最高的终端设备。截至2010年10月,Android智能手机占有美国智能手机市场22%的份额(NielsenWire,n.d.),并继续快速增长。Android已经被广泛接受,将超越iPhone并最终成为最流行的智能手机平台。
2.3.2平板电脑
虽然平板计算机已经存在了好几十年,看来硬件、软件、移动网络以及应用对其产生的影响也许最终会催生一个有活力的市场。虽然目前市场上已经有数款Android平板电脑,最新、广泛宣传的平板电脑当属三星GalaxyTabTM。此平板电脑拥有一个7英寸显示屏,几乎包含了Android智能手机的所有部件,是一个放大版。虽然平板电脑可以支持无线通信(正如GalaxyTab那样),却通常局限于数据和短信通信(MMS),不支持无线语音通信。然而,随着语音通信与数据通信的进一步融合,我们相信平板电脑很快就会支持互联网电话(VoIP)以及视频电话。
2.3.3上网本电脑
上网本电脑是移动性更强、能耗低的笔记本电脑,是Android很好的候选设备。特别需要提出的是,Android与谷歌的另外一个叫做ChromiumOS有所不同,后者是“一个开放源码项目,目的是开发一款为花费大量时间在互联网上的用户提供快速、简单及安全的用户体验的操作系统”(ChromiumOS,n.d.)。Android在先开发,也比ChromiumOS更加成熟。
除了拥有一个完整的硬件输入键盘以及较大的可旋转的显示屏以外,很多Android上网本电脑与平板电脑具有很大的相似性。通常,上网本电脑的主要数据存储介质为NAND闪存。然而,没有任何理由能够说明为什么不能使用更传统的磁盘驱动程序。
2.3.4谷歌TV
像过去很多其他的公司一样,谷歌也正在试图缩小用户观看播放的电视节目与互联网内容之间的差距。此类终端设备涵盖面从完全使用Android的电视机到连接到现有电视机的机顶盒。但是关键就是要使用Android作为基础的操作系统、将互联网与电视节目进行集成以及给开发商提供一个为新的传输媒体创造应用的框架。
2.3.5车辆(内置)
还有一个令人期待的领域,是将Android集成进汽车,并作为驾驶警示显示或娱乐系统的一部分。迄今为止,这一类的系统由汽车制造商各自开发,造成系统之间在功能、性能、稳定性和有效性方面具有很大差异。如果汽车制造商将持续发展的Android操作系统的功能完全进行集成,他们就可以将主要精力放在用户体验方面,而不是放在基础的功能模块方面。用户也将从不同的汽车上和Android终端设备上获得一致的体验。开发商可以专心开发针对汽车需要的应用,并具有更大的销售市场。最后,还有很多其他对此感兴趣的商家,如保险公司、律师、研究机构、取证分析师等,可以从很多方面对这些系统里的信息进行分析。
荣威350是正在生产的第一款使用Android的汽车,由上海汽车工业公司在中国生产和销售。此外,很多美国的汽车生产商也已经宣布支持使用Android,应用范围从与智能手机实现连接到完全将Android操作系统集成进他们所生产的汽车。
2.3.6GPS设备
如前所示,大多数Android终端设备都有内置的GPS硬件。当GPS首次推向消费者时,对其进行管理的操作系统是由生产商自行开发的。虽然很多制造商仍然坚持这种方式,但有一些已经走向Android操作系统。因此,取证分析师将会遇到运行Android的专用GPS终端设备。
2.3.7其他终端设备
在数量上大幅增长的Android终端设备中,很多设备一经出世就面临被淘汰。Android对于制造商来说是一个无法放弃的大好选择。Android操作系统免费、成熟,而且允许进行个性化开发。Android还通过自身以及第三方为应用开发提供操作机制。因此,越来越多的制造商摒弃昂贵的操作系统开发、维护和支持而转向在Android基础上进行开发。以下是部分其他类的Android终端设备:
家电,如洗衣机和微波炉;
电子阅读机,如BarnesandNoble图书经销商推出的Nook;
多媒体播放机;
办公设备,如复印机;
家用电话、音响和视频(如相框)终端设备;
专用游戏机;
打印机。
正如我们所见,制造商有很多可以充分使用Android的方法,肯定也会使取证分析师的工作变得更加有趣(如果目前还不是这样的话)。
2.4只读内存及启动加载程序
像其他计算机一样,Android终端设备有一个比较标准的启动过程,使终端设备向内存里装载需要的固件、操作系统以及用户数据,对设备的完全运行予以支持。虽然启动过程已经定义得非常清楚,固件和ROM仍然随着制造商和终端设备的不同而有所不同。本节的目的就是对Android的启动过程进行总体概述,因为本书后续章节中介绍的技术会与终端设备的不同层次相呼应。此概述只能在总体层面,因为对Android或Linux启动过程的深入介绍本身就可以形成一本完整的书籍。
本节内的大多数信息来源于一个题目为“Android从开启电源开始的启动过程”(TheAndroidbootprocessfrompoweron)的帖子,作者是Android专业技能中心(AndroidCompetenceCenter)的MattiasBjornheden(Bjornheden,n.d.)。在这个帖子中,Mattias指出了Android启动过程需要经历的7个关键步骤:
1)开启电源和片上启动ROM代码执行;
2)启动加载程序;
3)Linux内核;
4)init进程;
5)ZygoteandDalvik;
6)系统服务器;
7)启动完成。
以下对上面罗列的步骤进行详细介绍。
2.4.1开启电源和片上ROM代码执行
当一个Android终端设备的电源被开启,一段特殊的与CPU相配对的启动ROM代码被执行。1)对终端设备硬件进行初始化;2)找到启动媒介。ROM代码与终端设备所使用的CPU相对应。启动过程的这一步与用于启动计算机的输入–输出系统相似。
例如,在硬件黑客社区中十分流行的一款叫做德州仪器(TexasInstrument)OMAP3530ARM-compatible计算机中的CPU公开发行的技术参考手册(TechnicalReferenceManual)就有3444页(PublicVersionofOMAP35xx,2010)。虽然并不是人人都可以读懂此技术手册,此手册提供了非常多的关于CPU如何初始化并加载操作系统的细节和内幕。在第3373页,此手册提供了一个详细的总体启动程序的流程图。启动整个过程的ROM代码被硬式编码在地址0x00014000上,结果是当终端设备的电源开启时,CPU可以准确地找到启动ROM,并开始执行整个启动流程。
一旦终端设备的硬件初始化完成,ROM代码通过扫描发现启动媒介(由Android终端设备保存在NAND闪存上),并将初始化启动加载程序(initialbootloader)复制到可读写内存(RAM)。然后,程序的执行将从启动ROM跳至内存中刚加载的代码,如图2.2所示。
2.4.2启动加载程序(初始程序加载第二阶段程序加载)
从启动媒介复制到可读写内存(RAM)的启动加载程序被执行。这一步骤与启动计算机
……
|
|