首页>参考读物>计算机科学与技术>计算机网络

Android应用安全防护和逆向分析
作者 : 姜维 编著
出版日期 : 2017-11-21
ISBN : 978-7-111-58445-2
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 431
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书由出色的360公司Android安全研究员编写,介绍Android中现阶段主流的开发中用到的新技术,以及Android中开发过程中需要注意的一些安全防护,同时也介绍一下Android中逆向的相关知识,能够帮助读者更好的开发应用,理解安全知识。
书的主要内容包括:Android安全分析、Android应用开发安全性分析、Android中对应用进行安全保护、Android中逆向方式分析、Android中使用静态方式逆向apk、Android中使用动态方式逆向apk、解析Android中的几种文件格式、Android中的插件化开发中的安全问题等。

图书特色

本书全面介绍Android应用的安全防护方法与逆向分析技术,分为四篇:基础篇、防护篇、工具篇、操作篇,共26章。基础篇包括第1~7章,主要介绍移动应用安全的基础知识,如Android中的NDK开发知识、逆向中需要用到的命令、编译之后的apk包含的四类主要文件格式解析等。防护篇包括第8~14章,主要介绍移动应用安全防护的相关技术,如混淆、签名校验、反调试检测等安全策略,Android应用升级权限、降低权限等,配置文件中的问题,应用签名机制,apk的加固策略,so文件的加固策略等。工具篇包括第15~19章,主要介绍逆向分析常用的工具以及使用场景,包括如何开启设备的总调试开关,反编译利器apktool、Jadx、Xposed和Cydia Substrate等。操作篇包括第20~26章,主要介绍Android中的逆向分析技巧,包括静态方式和动态方式,介绍Android中开发会遇到的系统漏洞及修复方式,最后分析了Android中一个非常经典的文件加密病毒样本。

移动应用安全已经是个不可忽视的问题,本书结合多个案例进行实际操作讲解,介绍很多实用工具和命令,是一本非常好的安全逆向工具书籍。姜维研究安全逆向这么久,将自身多年的丰富经验用书本的形式展现给读者也是非常不易。
—— 周鸿祎 360公司创始人、董事长兼CEO、知名天使投资人

本书有非常详细的案例讲解,也提供了大量的工具源码,是Android开发人员逆向学习研究的极好工具手册,可以帮助Android开发者成为更全面的Android高手。
—— 蒋涛 CSDN创始人,极客帮基金创始人

本书在实际操作讲解的同时,还特别重视一些原理的讲解,可以帮助读者快速提升Android安全技术水平。
—— 段钢 看雪学院创始人

本书章节安排精心合理,技术点循序渐进,使用了大量带有标注的配图,清晰且直观,属于难得一见的用心之作。
—— 泮晓波 顶象技术移动安全实验室负责人、合伙人

本书作者在信息安全领域有多年经验,加上他纯粹的技术分享精神,注定了这是一本值得广大安全爱好者期待的好书。
—— 丰生强(网名:非虫) 国内知名安全专家

本书既涵盖了入门者所必须掌握的基础知识,又精选了安全领域中的许多典型实例并对它们展开了详细讲解。
—— 邓凡平

·作者简介·
姜维 某知名互联网公司开发者,参与过多个移动App开发项目,对Android安全问题情有独钟,深入分析过Android源代码和各类移动应用病毒,逆向分析实战经验丰富,发表过多篇有价值的软件安全文章,广受好评,座右铭是:生命不息,逆向不止。

图书前言

随着移动应用的广泛使用,不可忽视的一个问题就是信息安全。本书从Android应用安全和逆向两个方面来介绍移动开发中如何做好安全。
我本来不是从事安全逆向工作的,但是一个偶然的机会使我发现逆向研究非常有趣,因为在逆向出别人的App那一刻会觉得无比自豪。
第一次逆向是因为遇到一个问题需要去解决,记得当时想查看一个App的内部资源信息,尝试使用apktool反编译程序,惊奇地发现原来别人的App反编译之后会有这么多东西,逆向真的很有趣。而后在开发中无法实现或者没有相应的资源时就去反编译别人的App,查看对应的代码怎么实现。后来就反编译那些有阻碍的应用,慢慢摸索,克服困难,每研究成功一个案例,便是对自身技能的一次提高。从第一次使用apktool工具,到使用Jadx可视化工具,再到用IDA工具调试,一步一个脚印走过来,经验逐渐丰富,技能也慢慢提升了。
逆向研究需要一种逆向思维,我没有接受过专业训练,只是在业余时间看相关书籍,找几个样本研究,从简单到难,在这个过程中慢慢学到很多技术。本书就是我这几年学习与探索的总结。
本书涉及内容有点多,但是没有一章是多余的,每章内容都是干货。本书包括26章,分为四篇。
基础篇
基础篇包括第1~7章,主要介绍Android技术中与逆向相关的基础知识,为后续章节的学习做准备。
第1章通过对Android中锁屏密码加密算法的分析,带领读者进入安全世界,这方面内容不算复杂,但是需要阅读Android源码来得到算法分析,其中一个知识点是如何通过查看Android源码来帮助解决开发过程中遇到的问题,这是所有Android开发人员必备的技能。通过找到锁屏密码入口,一步一步跟踪最终得到密码加密算法,以及加密之后的内容存放在哪里。这是进入安全逆向分析世界的大门。
第2章主要介绍Android中NDK开发知识。为了安全考虑,现在很多应用把一部分功能做到了Native层,所以如果不知道NDK开发技巧,就无法进行后续的逆向操作。这一章从搭建环境到每个方法的使用,详细讲解了Android中NDK开发的技巧。
第3章主要介绍Android中开发以及逆向需要用到的命令,每个命令都有特定的案例和用法,这些命令不仅仅用于逆向,也能够帮助开发人员提升开发效率,所以了解和掌握这些命令是至关重要的。
第4~7章主要剖析Android中编译之后的apk包含的四类主要文件格式,这部分内容可能有点枯燥,但是至关重要,因为在安全防护或者逆向分析中都有很重要的意义。
防护篇
防护篇包括第8~14章,主要介绍安全防护的相关内容,是本书的核心内容之一。
第8章介绍现在一些应用主要用到的安全防护策略,如混淆、签名校验、反调试检测等,每个安全策略都给出了详细介绍。
第9章介绍Android开发中经常用到的一些权限,介绍如果对这些特殊权限操作不当会带来什么样的安全问题,以及如何预防。
第10章介绍Android中的run-as命令以及如何分析系统安全策略,详细介绍了App、shell、system这三种身份,并介绍了一些技巧,比如如何对应用进行升级权限、降低权限等操作。
第11章讲解Android配置文件中的allowBackup属性引发的安全问题,以及如何应对。本章用一个案例来分析如何导出沙盒数据查看应用中的密码信息,修改密码信息然后再进行还原,全程无需root权限即可完成。
第12章介绍Android中的应用签名机制,讲解应用的签名信息是如何保存的、如何验证的,签名机制的流程,以及如何预防安全问题。
第13章介绍在Android中对apk进行加固的策略,以及如何对恶意者分析apk文件的操作进行防护,还涉及Android中的动态加载机制,并通过动态加载技术实现apk文件的解密功能。
第14章介绍在Android中如何对so文件加固,如何做到安全防护功能。
工具篇
工具篇包括第15~19章,主要介绍逆向分析需要用到的几个工具,本书从实际应用出发,详细介绍每个工具的具体用法,特别是在使用的过程中遇到问题时的处理方法。
第15章介绍逆向工作中用到的工具,以及如何开启设备的调试总开关,这个技能在逆向调试的时候非常重要。
第16章主要介绍Android中反编译神器apktool和Jadx,详细介绍了这两个工具如何使用,以及使用过程中遇到问题时的处理方法。
第17章主要介绍Android中一款Hook神器Xposed,详细介绍这个工具的用法,以及遇到问题时的处理方法。
第18章主要介绍一款脱壳工具,它是基于Xposed工具编写的,可以自动脱壳。
第19章主要介绍Android中另外一款Hook神器Cydia Substrate,详细介绍了这个工具的用法以及遇到问题时的处理方法。
操作篇
操作篇包括第20~26章,主要介绍Android中的逆向操作技巧,包括静态方式和动态方式逆向,用一个经典的加固应用作为逆向案例分析了现阶段脱壳的大致流程,还介绍了Android开发中会遇到的系统漏洞,并分析了一个经典的病毒样本。
第20章主要介绍如何利用静态方式逆向应用,用一个案例讲解了静态防护逆向应用的流程。
第21章主要介绍如何使用Eclipse动态调试smali代码来逆向应用,用一个案例分析整个操作流程。
第22章主要介绍使用IDA工具动态调试so源码,同时也介绍了一些应对反调试检测的方法。
第23章主要介绍如何逆向那些经过加固的应用,用一个案例详细介绍了每一步操作,最后总结了现在脱壳操作的大致流程。
第24章主要总结之前介绍的逆向知识,用一个经典案例作为收尾,讲解了现阶段逆向应用的大体流程和思路。
第25章介绍Android开发中会遇到的系统漏洞——一个是解压文件漏洞,一个是录屏授权漏洞。如果这两个漏洞不做修复,会导致应用沙盒数据篡改以及用户隐私数据的丢失等。该章详细介绍了漏洞的产生原因以及如何进行修复。
第26章介绍Android中一个非常经典的文件加密病毒样本,通过静态方式分析了该病毒样本的工作原理,总结了处理该类病毒的方法。
什么人适合阅读本书
阅读本书需要有一定的Android开发基础。有的读者可能会觉得第1章内容就有点深,本书第1章的目的在于把读者带入安全世界,看不懂没关系,可以从第2章开始看下去,毕竟应用开发领域和安全逆向领域有很多不一样的地方。本书最大的特点在于非常实用,用案例讲解详细操作步骤,跟着每一步具体操作,才能真正看明白。可以把本书作为一本参考书,没看懂不要急,多操作几遍试试。
欢迎联系我
本书用到了很多工具和案例样本、代码,几乎所有代码都给出了具体下载地址,如果在操作过程中发现下载失败或者链接失效,请联系我,可以加我的微信peter_ jw212,也可以关注微信公众号“编码美丽”进行留言,或者访问我的博客http://blog.csdn.net/jiangwei0910410003,
以及我的个人网站http://www.wjdiankong.cn。有任何问题都可以通过这些渠道联系我,我将尽力给出详细解答。
有的读者读完这本书之后,可能发现有些内容对新技术不再生效了,比如加固和脱壳技术。我在此要说明一下,这些技术是时刻都在变的,所谓道高一尺,魔高一丈,攻防技术每一天都可能改变。所以本书选择了最基本的入门技术进行讲解,因为只有掌握了这些技术,才能继续学习并产生灵感来应对日后变化的技术。我认为最基本的入门技术也是最重要的技术。
致谢
这本书的写作历时一年多,真心觉得很不容易。如果觉得本书写得好,就请推广点赞;如果发现本书有错误的地方,还请批评指正。毕竟第一次写书没有那么完美,期待读者的指正和批评。最后想感谢一些人,他们在我写书过程中给予了技术和精神上的支持。非常感谢非虫大神(《Android软件安全和逆向分析》等书作者)对本书第4章、第7章的so和dex文件格式解析技术的支持;感谢看雪论坛的MindMac大神对第5章的arsc文件格式解析技术的支持;感谢看雪论坛的ThomasKing大神对第14章加固技术的支持;感谢我的同学汪恒和殷传宝对我从开始写作到出版这一路上的陪伴和鼓励。

上架指导

计算机\安全

封底文字

移动应用安全已经是个不可忽视的问题,本书结合多个案例进行实际操作讲解,介绍很多实用工具和命令,是一本非常好的安全逆向工具书籍。姜维研究安全逆向这么久,将自身多年的丰富经验用书本的形式展现给读者也是非常不易。
——周鸿祎,360公司创始人、董事长兼CEO、知名天使投资人

本书有非常详细的案例讲解,也提供了大量的工具源码,是Android开发人员逆向学习研究的极好工具手册,可以帮助Android开发者成为更全面的Android高手。
——蒋涛,CSDN创始人,极客帮基金创始人

本书在实际操作讲解的同时,还特别重视一些原理的讲解,可以帮助读者快速提升Android安全技术水平。
——段钢,看雪学院创始人

本书章节安排精心合理,技术点循序渐进,使用了大量带有标注的配图,清晰且直观,属于难得一见的用心之作。
——泮晓波,顶象技术移动安全实验室负责人、合伙人

本书的作者在信息安全领域的多年经验,加上纯粹的技术分享精神,注定了这是一本值得广大安全爱好者期待的好书。
——丰生强(网名:非虫),国内知名安全专家

本书既涵盖了入门者所必须掌握的基础知识,又精选了许多安全领域中的典型实例并对它们开展了详细讲解。
——邓凡平

图书目录

对本书的赞誉
前言
基础篇
第1章 Android中锁屏密码加密算法分析 2
1.1 锁屏密码方式 2
1.2 密码算法分析 2
1.2.1 输入密码算法分析 2
1.2.2 手势密码算法分析 7
1.3 本章小结 9
第2章 Android中NDK开发 10
2.1 搭建开发环境 10
2.1.1 Eclipse环境搭建 10
2.1.2 Android Studio环境搭建 12
2.2 第一行代码:HelloWorld 14
2.3 JNIEnv类型和jobject类型 18
2.3.1 JNIEnv类型 19
2.3.2 jobject参数obj 19
2.3.3 Java类型和native中的类型映射关系 19
2.3.4 jclass类型 19
2.3.5 native中访问Java层代码 20
2.4 JNIEnv类型中方法的使用 21
2.4.1 native中获取方法的Id 22
2.4.2 Java和C++中的多态机制 24
2.5 创建Java对象及字符串的操作方法 27
2.5.1 native中创建Java对象 27
2.5.2 native中操作Java字符串 28
2.6 C/C++中操作Java中的数组 32
2.6.1 操作基本类型数组 32
2.6.2 操作对象类型数组 33
2.7 C/C++中的引用类型和ID的缓存 36
2.7.1 引用类型 36
2.7.2 缓存方法 37
2.8 本章小结 38
第3章 Android中开发与逆向常用命令
总结 39
3.1 基础命令 39
3.2 非shell命令 40
3.3 shell命令 45
3.4 操作apk命令 49
3.5 进程命令 50
3.6 本章小结 52
第4章 so文件格式解析 53
4.1 ELF文件格式 53
4.2 解析工具 54
4.3 解析ELF文件 57
4.4 验证解析结果 60
4.5 本章小结 61
第5章 AndroidManifest.xml文件格式解析 62
5.1 格式分析 62
5.2 格式解析 63
5.2.1 解析头部信息 63
5.2.2 解析String Chunk 63
5.2.3 解析ResourceId Chunk 68
5.2.4 解析Start Namespace Chunk 70
5.2.5 解析Start Tag Chunk 72
5.3 本章小结 82
第6章 resource.arsc文件格式解析 83
6.1 Android中资源文件id格式 83
6.2 数据结构定义 85
6.2.1 头部信息 85
6.2.2 资源索引表的头部信息 85
6.2.3 资源项的值字符串资源池 86
6.2.4 Package数据块 87
6.2.5 类型规范数据块 88
6.2.6 资源类型项数据块 89
6.3 解析代码 93
6.3.1 解析头部信息 93
6.3.2 解析资源字符串内容 94
6.3.3 解析包信息 96
6.3.4 解析资源类型的字符串内容 97
6.3.5 解析资源值字符串内容 98
6.3.6 解析正文内容 99
6.4 本章小结 105
第7章 dex文件格式解析 106
7.1 dex文件格式 106
7.2 构造dex文件 107
7.3 解析数据结构 108
7.3.1 头部信息Header结构 108
7.3.2 string_ids数据结构 112
7.3.3 type_ids数据结构 115
7.3.4 proto_ids数据结构 116
7.3.5 field_ids数据结构 118
7.3.6 method_ids数据结构 119
7.3.7 class_defs数据结构 120
7.4 解析代码 128
7.4.1 解析头部信息 128
7.4.2 解析string_ids索引区 129
7.4.3 解析type_ids索引区 130
7.4.4 解析proto_ids索引区 130
7.4.5 解析field_ids索引区 131
7.4.6 解析method_ids索引区 132
7.4.7 解析class_def区域 132
7.5 本章小结 134
防护篇
第8章 Android应用安全防护的基本策略 136
8.1 混淆机制 136
8.1.1 代码混淆 136
8.1.2 资源混淆 136
8.2 签名保护 138
8.3 手动注册native方法 140
8.4 反调试检测 144
8.5 本章小结 145
第9章 Android中常用权限分析 147
9.1 辅助功能权限 147
9.2 设备管理权限 148
9.3 通知栏管理权限 149
9.4 VPN开发权限 149
9.5 本章小结 150
第10章 Android中的run-as命令 151
10.1 命令分析和使用 151
10.2 Linux中的setuid和setgid概念 159
10.3 Android中setuid和setgid的使用
场景 162
10.4 run-as命令的作用 165
10.5 调用系统受uid限制的API 166
10.6 本章小结 168
第11章 Android中的allowBackup属性 169
11.1 allowBackup属性介绍 169
11.2 如何获取应用隐私数据 170
11.3 如何恢复应用数据 175
11.4 本章小结 175
第12章 Android中的签名机制 176
12.1 基本概念 176
12.2 Android中签名流程 182
12.3 Android中为何采用这种签名机制 191
12.4 本章小结 192
第13章 Android应用加固原理 193
13.1 加固原理解析 193
13.2 案例分析 195
13.3 运行项目 206
13.4 本章小结 208
第14章 Android中的so加固原理 209
14.1 基于对so中的section加密实现so加固 209
14.1.1 技术原理 209
14.1.2 实现方案 210
14.1.3 代码实现 210
14.1.4 总结 220
14.2 基于对so中的函数加密实现so加固 221
14.2.1 技术原理 221
14.2.2 实现方案 223
14.2.3 代码实现 224
14.3 本章小结 230
工具篇
第15章 Android逆向分析基础 232
15.1 逆向工具 232
15.2 逆向基本知识 233
15.3 打开系统调试总开关 233
15.4 本章小结 237
第16章 反编译神器apktool和Jadx 238
16.1 逆向操作惯例 238
16.2 反编译常见的问题 238
16.3 分析apktool的源码 240
16.4 解决常见问题 249
16.5 apktool的回编译源码分析 254
16.6 Jadx源码分析 256
16.7 本章小结 258
第17章 Hook神器Xposed 259
17.1 安装教程 259
17.2 环境搭建 259
17.3 编写模块功能 260
17.4 运行模块 264
17.5 本章小结 265
第18章 脱壳神器ZjDroid 266
18.1 ZjDroid原理分析 266
18.2 工具命令分析 268
18.3 工具日志信息 272
18.4 工具用法总结 272
18.5 工具使用案例 273
18.6 本章小结 276
第19章 Native层Hook神器Cydia Substrate 277
19.1 环境搭建 277
19.2 Hook Java层功能 277
19.3 Hook Native层功能 279
19.4 框架使用事项说明 283
19.5 本章小结 283
操作篇
第20章 静态方式逆向应用 286
20.1 smali语法 286
20.2 手动注入smali语句 288
20.3 ARM指令 288
20.4 用IDA静态分析so文件 290
20.5 案例分析 292
20.5.1 静态分析smali代码 292
20.5.2 静态分析native代码 300
20.6 本章小结 303
第21章 动态调试smali源码 304
21.1 动态调试步骤 304
21.2 案例分析 305
21.3 本章小结 324
第22章 IDA工具调试so源码 325
22.1 IDA中的常用快捷键 325
22.2 构造so案例 331
22.3 逆向so文件 332
22.3.1 获取应用的so文件 332
22.3.2 用IDA进行调试设置 336
22.3.3 IDA调试的流程总结 343
22.4 用IDA解决反调试问题 343
22.5 本章小结 355
第23章 逆向加固应用 356
23.1 逆向加固应用的思路 356
23.2 获取解密之后的dex文件 359
23.3 分析解密之后的dex文件内容 364
23.4 逆向方法 369
23.5 逆向测试 373
23.6 逆向加固应用的方法总结 374
23.7 本章小结 376
第24章 逆向应用经典案例分析 377
24.1 加壳原理分析 377
24.2 脱壳过程 380
24.3 如何还原应用 393
24.4 脱壳经验总结 394
24.5 本章小结 395
第25章 Android中常见漏洞分析 396
25.1 解压文件漏洞分析 396
25.1.1 漏洞场景 396
25.1.2 漏洞原因分析 398
25.1.3 漏洞案例分析 398
25.1.4 漏洞修复 399
25.1.5 漏洞总结 400
25.2 录屏授权漏洞分析 400
25.2.1 漏洞场景 400
25.2.2 漏洞原因分析 402
25.2.3 漏洞修复 402
25.2.4 漏洞总结 403
25.3 本章小结 403
第26章 文件加密病毒Wannacry样本分析 404
26.1 病毒样本分析 404
26.2 获取密码 405
26.3 文件解密 409
26.4 病毒分析报告 414
26.5 本章小结 414

教学资源推荐
作者: (美)Emad Aboelela 著
作者: 王志文,陈妍,夏秦
作者: 朱先强 杨国利 朱承 张维明 著
参考读物推荐
作者: (美)Jeff Johnson
作者: 朱河清 梁存铭 胡雪焜 曹水 等编著
作者: 谢型果 等著
作者: Johnny Long