前言

近几年,Android在国内的发展极其迅猛,这除了相关产品强大的功能与丰富的应用外,更是因为它优良的性能表现吸引着用户。2011年可谓是Android的风光年,从手机生产商到应用开发者都纷纷捧场,短短几个月的时间,Android在国内红遍了大街小巷,截止到2012年的第一个季度,Android在国内的市场份额就超过60%,将曾经风靡一时的塞班系统远远的甩在了身后,与此同时,它也带动了国内移动互联网行业的发展,创造了更多就业的岗位,国内IT人士为之雀跃欢呼。

随着Android在国内的兴起,基于Android的平台应用需求也越来越复杂。形形色色的软件壮大了Android市场,也丰富了我们的生产生活,越来越多的人从起初的尝试到享受再到依赖,沉浸在Android的神奇海洋中。事情有利也总有弊,即使Android如此优秀也会有怨声载道的时候,各种信息泄露、恶意扣费、系统被破坏的事件也屡见不鲜,Android系统的安全也逐渐成为人们所关注的话题。

如今市场上讲解Android开发的书籍已经有很多了,从应用软件开发层到系统底层的研究均丰富涵盖,其中不乏一些经典之作,然而遗憾的是,分析Android软件及系统安全的书籍却一本也没有,而且相关的中文资料也非常匮乏,这使得普通用户以及大多数Android应用开发者对系统的安全防护及软件本身没有一个全面理性的认识。因此,笔者决定将自身的实际经验整理,编写为本书。

内容导读

本书主要从软件安全和系统安全两个方面讲解Android平台存在的攻击与防范方法。

第1章和第2章主要介绍Android分析环境的搭建与Android程序的分析方法。

第3章详细介绍了Dalvik VM汇编语言,它是Android平台上进行安全分析工作的基础知识,读者只有掌握了这部分内容才能顺利地学习后面的章节。

第4章介绍了Android平台的可执行文件,它是Android软件得以运行的基石,我们大多数的分析工作都是基于它,因此这部分内容必须掌握。

第5章起正式开始了对Android程序的分析,对这部分的理解与运用完全是建立在前面章节的基础之上。这一章详细讲述了Android软件的各种反汇编代码特征,以及可供使用的分析工具,如何合理搭配使用它们是这章需要学习的重点。

第6章主要讲解ARM汇编语言的基础知识,在这一章中,会对ARM汇编指令集做一个简要的介绍,为下一章的学习做铺垫。

第7章是本书的一个高级部分,主要介绍了基于ARM架构的Android原生程序的特点以及分析它们的方法,读者需要在这一章中仔细的体会并实践,鉴于此类程序目前在市场上比较流行,读者在阅读时需要多进行实践操作,多动手分析这类代码,加强自己的逆向分析能力。

第8章介绍了Android平台上软件的动态调试技术,动态调试与静态分析是逆向分析程序时的两大主要技术手段,各有着优缺点,通过动态调试可以让你看到软件运行到某一点时程序的状态,对了解程序执行流程有很大的帮助。

第9章详细介绍了Android平台软件的破解方法。主要分析了目前市场上一些常见的Android程序保护方法,分析它们的保护效果以及介绍如何对它们进行破解,通过对本章的学习,读者会对Android平台上的软件安全有一种“恍然大悟”的感觉。

第10章介绍了在面对软件可能被破解的情况下,如何加强Android平台软件的保护,内容与第9章是对立的,只有同时掌握了攻与防,才能将软件安全真正地掌握到位。

第11章从系统安全的角度出发,分析了Android系统中不同环节可能存在的安全隐患,同时介绍了面对这些安全问题时,如何做出相应的保护措施。另外,本章的部分小节还从开发人员的角度出发,讲解不安全代码对系统造成的危害,读者在掌握这部分内容后,编写代码的安全意识会明显提高。

第12章采用病毒实战分析的方式,将前面所学的知识全面展示并加以应用,让读者能彻底地掌握分析Android程序的方法。本章的内容详实、知识涵盖范围广,读者完全掌握本章内容后,以后动手分析Android程序时,便能够信手拈来。

为了使读者对文中所讲述的内容有深刻的认识,并且在阅读时避免感到乏味,书中的内容不会涉及太多的基础理论知识,而更多的是采用动手实践的方式进行讲解,所以在阅读本书前假定读者已经掌握了Android程序开发所必备的基础知识,如果读者还不具备这些基础知识的话,请先打好基础后再阅读本书。

适合的读者

本书适合以下读者:

Android应用开发者、Android系统开发工程师、Android系统安全工作者。

本书约定

为了使书中讲述的知识更加容易理解,思路更加清晰,本书做了如下约定:

  • 本书在讲解部分内容时,可能会对Android系统与内核的源码加以引用,如文中无具体说明系统版本,则统一为Android 4.1的系统, Linux 3.4的内核。
  • 本书不介绍Android系统源码的下载方法,假定读者已经自行下载好了Android系统源码。
  • 本书在引用Android系统源码时,为了避免代码占用过多篇幅及影响主体的分析思路,在不影响理解的情况下,对摘抄的内容进行了适量的删减。
  • 本书在列举实例代码时,为了方便读者阅读与理解,对代码中的关键部分采用加粗显示。
  • 本书中在给出命令的格式用法时,为了醒目起见,采用斜体显示。
  • 对于部分操作容易发生错误或理解上造成歧义的地方,本书会在下面加上文本框注解。如:

注意 Smali代码的语法与格式会在本书第3章进行详细介绍。

本书源代码

下载地址:

http://www.ituring.com.cn/book/1131

点击“随书下载”即可看到本书源代码的下载链接。

本书正文中提到的“随书的附图x”也一并打包在源代码中。

致谢

首先,要感谢本书的编辑陈冰先生。在编写本书时,陈冰先生对书中每个章节的细节都严格把关,并多次耐心地教导我写作的技巧,是他对书稿质量的严格要求,以及对工作的一丝不苟,才使得本书得以顺序出版。

感谢我的父母,是他们养育了我,给了我生命,他们永远是我心中最伟大的人。

写作本身是一件很辛苦的事,尤其是每天还要被生活中的琐事困扰。在这里,我要感谢这半年多来对我无言支持的大哥与大嫂,大嫂可口的饭菜补充了我每天写作所需的营养,而大哥更是帮助我解决了很多烦心的琐事,让我在写作时无后顾之忧。

好书总能给人带来心灵上的震撼。感谢美女作家李沉嫣,是她那扣人心弦的文字感染了我,给了我创作的最初源动力。

感谢那些共享Android安全技术的组织与个人,如果没有他们前期的奉献,笔者现在可能还处在独自探索的阶段,不可能有机会与大家分享如此前沿的技术。

看雪学院是国内最具权威性的软件安全研究论坛。感谢看雪学院站长段钢先生对本书内容上的肯定与支持。

最后,感谢那些关注本书、为本书提过意见的朋友,你们的支持是我写作本书最大的动力。

作者:丰生强

2012年11月2日

目录