前言 在5G时代,移动终端的应用场景及应用深度将进一步提升,移动应用已经完全渗透到人们的工作和生活中。随着移动终端的发展,移动应用所隐含的安全问题逐渐浮出水面并对人们的生活产生越发深远的影响。 据统计,全球每年至少新增150万种移动端恶意软件,至少造成了超过1600万件的移动恶意攻击事件。近年来,工业和信息化部针对移动应用长期存在的违规收集用户个人信息、违规获取终端权限、隐私政策不完整等行为进行了多次综合整治行动,国家“等级保护2.0”标准中也增加了移动安全拓展条款,移动安全将会成为未来我国网络安全人才培养的一个核心内容板块。 笔者作为移动安全一线的资深工程师,将通过简洁干练的语言、理论与实战结合的讲解、案例化分析的逻辑,全面展现移动安全攻防的魅力。 本书内容及结构 本书分为4篇,共13章。 基础篇 基础篇包括第1章和第2章,目的是让读者快速建立对Android应用安全分析的基本概念。第1章简单介绍了构建Android应用安全分析环境的一些基本方法与工具。通过第1章的学习,能够掌握如何给Android手机刷机,虽然在日常生活中我们已经不需要给Android手机刷各种第三方ROM,但无论是Android开发还是Android逆向分析,有一个具有Root权限的真机能避免许多由模拟器导致的麻烦。 第2章通过对一个简单的Android应用Apk文件的反编译,简单修改Smali代码文件,再重编译并签名的过程的介绍,帮助读者进入Android应用逆向分析的大门。这个过程是Android应用逆向工程的一个基本操作。读者跟着第2章的内容实践一遍,就可以建立起对于Android应用逆向的整体概念。 理论篇 理论篇包括第3章和第4章,目的是通过介绍Android操作系统常见的安全漏洞,帮助读者树立Android应用安全开发的意识,从而构建Android应用安全的一个具体框架。 第3章主要介绍移动应用安全基线,包括应用的评估思路,Android系统的安全问题与常见漏洞。读者通过本章的学习,既可以掌握Android应用逆向分析的常见切入点,也可以从中得到警示,在开发移动应用的时候规避这些安全问题。 第4章主要对MobSF移动应用安全测试框架进行分析。该框架是面向移动应用静态逆向和动态调试的自动化分析调试框架,通过对该框架的拆解,使读者全面了解Android应用逆向分析全过程中的关注点,掌握在逆向一个具有多个功能模块的复杂应用时应该注意应用的哪些行为容易导致应用遭到恶意攻击,哪些代码实现使用了不安全的API,进而造成数据的泄露或者文件被篡改等。通过对MobSF框架的二次开发改造,可以帮助我们快速对上万行代码的App进行安全概况排查,以便后续有的放矢地进行深度分析。 工具篇 工具篇包括第5~8章的内容。俗话说: “工欲善其事,必先利其器”。工具虽然不是解决问题的唯一决定因素,但是一个合适的工具往往能达到事半功倍的效果。 第5章介绍静态逆向所使用的工具。静态逆向是最简单、最直接的逆向方式,主要的目的是将Apk软件包进行解包,将包内的文件逐一进行解码,最关键的是将保存着代码的二进制文件反编译成我们能直接阅读的源代码形式。 第6章介绍动态调试所使用的工具。这些工具和开发环境中的断点调试功能类似,可以让我们看到程序运行过程中的各种变化,只不过在开发环境中我们面对的是自己编写的源代码,逆向时我们面对的是反编译的伪源代码,甚至是汇编代码。 第7章主要介绍两种最常见的Hook工具。Hook是一种可以在不直接修改程序源代码的前提下改变程序运行逻辑的手段,能够避免为了动态调试而将Apk拆得七零八落又费尽心思组装回去的复杂操作,提高动态调试的效率。 第8章介绍针对Native层的C++代码的调试手段。Unicorn Engine是一个神奇的工具,它可以模拟各种CPU平台、内存与堆栈。逆向工程师不需要运行整个App,使用Unicorn就可以单独运行调试so文件的一部分汇编代码,而且可以随意设置寄存器与堆栈的值。 实战篇 实战篇包括第9~13章,是整本书的重点内容。读者在这部分将运用前面理论篇与工具篇的知识点进行实操,在操作的过程中加深对Android应用逆向分析与安全开发的理解。 第9章的主要内容是脱壳实战。本章也是移动应用逆向攻防色彩最重的一章。我们在进行Android应用逆向分析的时候通常通过反编译的手段来获取代码逻辑,从代码逻辑中找到程序的漏洞或者恶意行为,而Android应用加固会将App的代码逻辑隐藏起来,虽然加固手段本身是一种安全性保护,但是这种保护是不会分辨应用本身是否存在恶意行为的。因此,如果需要通过逆向分析判断应用是否是木马,就需要对加固壳进行破解。本章针对两种Java代码加固方案以及C++混淆方案探讨对抗破解的方法。 第10章的主要内容是逆向实战,介绍了针对Android应用中Java层与Native层的逆向手段,包括逆向分析Smali代码并进行篡改重编译、逆向分析so文件等。本章结合两个经典的CTF比赛题目进行实战讲解。 第11章的主要内容是Hook实战,介绍了在不改变Android应用程序代码的情况下修改程序逻辑,使用工具篇介绍的两种主流Hook框架——Xposed框架和Frida框架进行具体的攻防实战。本章结合一个经典的CTF比赛题目进行分析讲解。 第12章的主要内容是调试实战,本章将使用网络上已发布且功能复杂的App作为例子,使用静态逆向和动态调试两种方式分析该App的具体业务逻辑。同时也会在本章介绍使用一个基于Unicorn的代码调试工具Unidbg,通过该工具来对Native层逻辑进行逆向调试实战。 第13章的主要内容是IoT(物联网)安全分析实战。当前大量的物联网设备采用Android操作系统,本章通过对物联网移动应用进行逆向调试分析实战,介绍如何使用抓包的方式截取应用的互联网请求。读者在本章中将了解到物联网应用安全的重要性。 什么人适合阅读本书 本书主要讲解与Android移动安全逆向分析与攻防实战相关的技术,需要读者具有一定的Java编程语言基础和Android开发基础。由于本书包含“攻”和“防”两部分实战内容,故在安全攻防和软件开发领域有不同的读者定位。 在“安全攻防”领域,适合阅读本书的读者包括: 高校信息安全相关专业的学生; 软件安全研究员; 软件逆向工程师。 在“软件开发”领域,适合阅读本书的读者包括: 高校信息安全相关专业的学生; 高校软件工程相关专业的学生; Android应用开发工程师。 实例代码与勘误 为方便读者高效学习,快速掌握Android移动安全理论与逆向分析的实践,作者精心编辑了参考学习电子资料(超过500页)、完整的教学课件PPT(共13章,超过400页)、参考开源项目源代码(超过70万行)及丰富的配套视频教程(21个微课视频,见正文)等资源。请访问清华大学出版社官网本书页面下载地址。 虽然笔者在Android操作系统安全攻防领域从业超过7年,但是由于知识储备、技术能力、时间等限制,书中难免会有疏漏和错误的地方,欢迎读者反馈斧正,也请同行给予宝贵的建议。 请关注微信公众号“移动安全攻防”(微信号: mobsecx),单击菜单“更多”→“书籍勘误”,在本书勘误页面提交你的宝贵意见。 叶绍琛2021年9月1日