第1章 Android简介 1
1.1 Android的发展历史 1
1.2 Android系统进化史 1
1.2.1 Nexus系列 3
1.2.2国产定制系统 3
1.2.3 Android的开放与安全 4
1.2.4移动互联网的趋势 4
1.3 Android和iOS系统对比 5
1.3.1系统架构对比 6
1.3.2 Android和iOS安全对比 6
第2章 Android地下产业链分析 8
2.1钱从哪里来 8
2.1.1恶意吸费 9
2.1.2广告、恶意推广 9
2.1.3诱骗欺诈 10
2.1.4隐私窃取 10
2.1.5安装包分析 10
2.2安全的发展趋势 11
2.2.1系统级别的杀毒 11
2.2.2应用市场的监管 11
2.2.3智能硬件安全 12
第3章 理解Android系统 13
3.1 Android系统的层级架构 13
3.1.1应用层 14
3.1.2框架层 14
3.1.3核心库与运行环境层 14
3.1.4 Linux内核层 15
3.1.5 Android系统的分区结构 15
3.2启动过程 16
3.2.1 Boot Loader加载阶段 17
3.2.2加载Kernel与initrd阶段 17
3.2.3初始化设备服务阶段 17
3.2.4加载系统服务阶段 18
3.2.5虚拟机初始化阶段 18
3.2.6启动完成阶段 18
3.3系统关键进程与服务 18
3.3.1系统第一个进程init详解 18
3.3.2 ADB进程 19
3.3.3存储类守护进程Vold 20
3.3.4进程母体Zygote 21
3.3.5服务管理器ServiceMananger 21
3.3.6进程复制Android Fork 22
3.3.7进程间通信Binder机制 22
3.3.8匿名共享内存机制Ashmem 24
3.3.9日志服务Logger 24
3.4 APK生成 25
3.4.1编译过程 26
3.4.2打包过程 26
3.4.3签名优化过程 26
3.5系统安全执行边界 26
3.5.1沙箱隔离机制 27
3.5.2权限授予机制 28
3.5.3数字签名机制 31
3.6系统的安全结构 34
3.6.1 Android应用程序安全 34
3.6.2主要的应用组件 34
3.6.3四大组件模型 36
3.6.4 Android框架层 37
3.6.5 Dalvik虚拟机 38
3.7 Android 5.0(Lollipop)的安全架构 38
3.7.1加强型内核SEAndroid 39
3.7.2安全的锁屏 39
3.7.3充分的加密 40
3.7.4 Android5.0安全总结 40
第4章 Root你的设备 41
4.1获取 Root权限原理 41
4.1.1 su源码分析 42
4.1.2 Root后手机对比 43
4.1.3 Root思路 43
4.1.4 Root漏洞 44
4.1.5已经发现的Root漏洞 46
4.1.6 SuperUser分析 46
4.1.7 Root安全 48
4.2 Root的分类 48
4.2.1临时Root 48
4.2.2永久Root 50
4.2.3删除Root 52
4.2.4免Root 52
4.3 Root之后 52
4.3.1静默安装 53
4.3.2删除预装 58
4.3.3键盘监控 60
4.3.4短信拦截与静默发送 64
4.3.5电话监控 66
第5章 APK静态分析 69
5.1什么是静态分析 69
5.2常用分析利器 69
5.2.1资源逆向工具AXMLPrinter 2 70
5.2.2查看源码工具dex2jar、jd-GUI 70
5.2.3 APK逆向工具APKTool 71
5.2.4 Android逆向助手 71
5.2.5反汇编工具IDA PRO 72
5.2.6超级编辑器UltraEdit 73
5.3认识APK文件 73
5.3.1 App的种类 73
5.3.2反编译前结构 75
5.3.3反编译后结构 76
5.4分析DEX文件 78
5.4.1认识DEX 79
5.4.2虚拟机指令Smali简介 79
5.4.3 Smali与Java对比 79
5.4.4 Smali语法基础 81
5.4.5常用的Smali注入代码 82
5.5分析SO文件 83
5.5.1 NDK开发流程 84
5.5.2开始反汇编 87
5.5.3尝试修改SO文件逻辑 90
5.6收集信息定位关键代码 92
5.6.1 AndroidManifest.xml突破 92
5.6.2特殊关键字突破 94
5.6.3资源索引突破 94
5.7开始篡改代码 95
5.7.1尝试篡改逻辑 96
5.7.2广告植入与去除 97
5.7.3收费限制破解 101
5.7.4应用程序汉化 102
5.7.5篡改逻辑小结 103
第6章 ARM汇编速成 104
6.1抽象层次 104
6.1.1计算机体系结构 104
6.1.2常见嵌入式处理器 105
6.1.3 Android支持处理器情况 106
6.2逆向工程 107
6.2.1计算机层级 107
6.2.2汇编语言 108
6.2.3反汇编的理解 111
6.2.4 ARM汇编语言模块的结构 111
6.2.5简单的ARM程序 111
6.3 ARM体系结构 113
6.3.1 ARM微处理器的工作状态 113
6.3.2 ARM体系结构的存储器格式 113
6.3.3指令长度及数据类型 114
6.3.4处理器模式 114
6.3.5 ARM状态下寄存器组织 114
6.3.6 Thumb状态下的寄存器组织 116
6.4 ARM微处理器的指令集概述 117
6.4.1 ARM指令的助记符 118
6.4.2程序状态寄存器 118
6.4.3指令的条件域 120
6.4.4 ARM指令的寻址方式 121
6.5 Thumb指令及应用 123
6.5.1 Thumb指令集特点 124
6.5.2 ARM与Thumb状态切换 124
6.5.3 Thumb指令集格式 125
6.5.4 Thmub指令的十六进制值计算 126
6.6快速识别ARM汇编中的C/C++逻辑 127
6.6.1识别if-else判断逻辑 127
6.6.2识别while-do循环逻辑 129
6.6.3识别for循环逻辑 130
6.6.4识别switch-case分支逻辑 132
第7章 APK动态分析 135
7.1应用体系架构 135
7.1.1代码安全分析 135
7.1.2组件安全分析 136
7.1.3存储安全分析 136
7.1.4通信安全分析 136
7.2 DDMS调试 137
7.2.1使用Log进行逻辑跟踪 138
7.2.2不安全的本地存储 140
7.2.3使用TraceView进行方法跟踪 141
7.3网络抓包 145
7.3.1抓包工具Fiddler简介 145
7.3.2抓包的原理 145
7.3.3如何在Android上进行抓包 146
7.3.4设置断点修改请求 148
7.4使用AndBug断点调试 150
7.4.1配置AndBug环境 150
7.4.2 AndBug常用命令 152
7.4.3 AndBug调试步骤 152
7.4.4开始断点调试 153
7.5使用IDA Pro进行动态调试 158
7.5.1使用IDA动态调试原生库so 158
7.5.2使用IDA动态调试dex 162
7.6调试WebViewApp 164
7.6.1 Chrome插件调试 164
7.6.2 WebView已知漏洞 165
7.6.3 HTML安全 166
7.6.4网络钓鱼 166
7.6.5 SQL注入攻击 167
第8章 动态注入技术 169
8.1什么是Hook技术 169
8.1.1 Hook原理 170
8.1.2 Hook的种类 173
8.1.3 Hook的危害 174
8.2常用的Hook工具 174
8.2.1 Xposed框架 174
8.2.2 CydiaSubstrate框架 176
8.2.3 ADBI/DDI框架 177
8.3 HookAndroid应用 178
8.3.1尝试Hook系统API 179
8.3.2 Hook指定应用注入广告 181
8.3.3 App登录劫持 184
8.4 Hook原生应用程序 188
8.4.1 CydiaSubstrate框架针对Native层Hook的支持 188
8.4.2通过JNI改变系统颜色 190
8.4.3 Hook后替换指定应用中的原生方法 193
8.4.4使用Hook进行广告拦截 196
8.5 Hook检测/修复 198
8.5.1 Hook检测 198
8.5.2 Hook修复 201
8.5.3 Hook检测小结 203
第9章 应用加固与渗透测试 204
9.1防止利用系统组件漏洞 204
9.1.1 Activity编码安全 205
9.1.2 Brocast Recevier编码安全 212
9.1.3 Service编码安全 218
9.1.4 Provider编码安全 226
9.2防止逆向 236
9.2.1代码混淆 236
9.2.2 DEX保护 241
9.2.3 SO文件保护 243
9.2.4防止jd-GUI查看代码 244
9.2.5防止二次打包 245
9.3防止动态分析 250
9.3.1检测运行环境 251
9.3.2防止进行动态注入 252
9.4 Android渗透测试 252
9.4.1渗透测试步骤 253
9.4.2渗透测试工具 253
9.4.3应用程序渗透测试 258
第10章 系统安全措施 260
10.1启动验证 260
10.2磁盘加密 261
10.2.1加密模式 262
10.2.2密钥的生成 262
10.3屏幕安全 262
10.3.1图形同虚设的屏幕锁 264
10.3.2密码锁 265
10.3.3 PIN锁 265
10.4 USB调试安全 265
10.4.1 ADB概况 266
10.4.2为什么ADB需要安全 267
10.4.3 ADB安全 267
10.4.4 ADB的安全措施 268
10.4.5 ADB认证秘钥 268
10.5增强型内核SELinux/SEAndroid 269
10.5.1 SELinux架构 269
10.5.2传统的Linux的不足之处 270
10.5.3 SELinux的特点 271
10.5.4 SELinux的运行模式 272
10.5.5 SELinux的启动、关闭与观察 273
第11章 内核攻击与防护 277
11.1 Rootkit是什么 277
11.1.1 Rootkit概述 278
11.1.2 Linux可加载的内核模块 280
11.1.3剖析内核模块 281
11.1.4了解内核模块对象 282
11.1.5 LKM的生命周期 282
11.1.6系统调用机制 283
11.1.7 SWI中断 283
11.1.8 Linux系统调用规范 284
11.1.9系统接口重定向 284
11.1.10虚拟文件系统 285
11.2 Android电话系统 287
11.2.1 Android电话子系统体系结构 287
11.2.2 Android电话子系统工作流程 288
11.2.3内核级Rootkit攻击位置 290
11.3开始攻击内核 290
11.3.1环境搭建 290
11.3.2第一个自定义内核程序 293
11.3.3隐藏潜伏模块 296
11.3.4操纵内核模块 301
11.3.5信息收集模块 303
11.4内核级Rootkit检测 303
11.4.1常用的Rootkit检测方法 303
11.4.2 Android Rootkit检测系统模型 304
11.4.3 LKM模块检测 305
11.4.4电话子系统攻击检测 307
11.5 Rootkit的植入与启动 308
11.5.1 Rootkit的植入 308
11.5.2 Rootkit的启动 308
11.5.3 Rootkit小结 308
附录A ARM指令集 309
A.1跳转指令 309
A.1.1 B指令 309
A.1.2 BL指令 310
A.1.3 BLX指令 310
A.1.4 BX指令 310
A.2数据处理指令 310
A.2.1 MOV指令 311
A.2.2 MVN指令 311
A.2.3 CMP指令 311
A.2.4 CMN指令 312
A.2.5 TST指令 312
A.2.6 TEQ指令 312
A.2.7 ADD指令 313
A.2.8 ADC指令 313
A.2.9 SUB指令 313
A.2.10 SBC指令 314
A.2.11 RSB指令 314
A.2.12 RSC指令 314
A.2.13 AND指令 315
A.2.14 ORR指令 315
A.2.15 FOR指令 315
A.2.16 BIC指令 315
A.3乘法指令与乘加指令 316
A.3.1 MUL指令 316
A.3.2 MLA指令 316
A.3.3 SMULL指令 317
A.3.4 SMLAL指令 317
A.3.5 UMULL指令 317
A.3.6 UMLAL指令 318
A.4程序状态寄存器访问指令 318
A.4.1 MRS指令 318
A.4.2 MSR指令 318
A.5加载/存储指令 319
A.5.1 LDR指令 319
A.5.2 LDRB指令 320
A.5.3 LDRH指令 320
A.5.4 STR指令 320
A.5.5 STRB指令 321
A.5.6 STRH指令 321
A.6批量数据加载/存储指令 321
A.7数据交换指令 322
A.7.1 SWP指令 322
A.7.2 SWPB指令 323
A.8移位指令(操作) 323
A.8.1 LSL(或ASL)操作 323
A.8.2 LSR操作 324
A.8.3 ASR操作 324
A.8.4 ROR操作 324
A.8.5 RRX操作 324
A.9协处理器指令 325
A.9.1 CDP指令 325
A.9.2 LDC指令 325
A.9.3 STC指令 326
A.9.4 MCR指令 326
A.9.5 MRC指令 326
A.10异常产生指令 326
A.10.1 SWI指令 327
A.10.2 BKPT指令 327
附录B ARM伪指令集 328
B.1符号定义伪指令 328
B.1.1 GBLA、GBLL和GBLS指令 328
B.1.2 LCLA、LCLL和LCLS指令 329
B.1.3 SETA、SETL和SETS指令 329
B.1.4 RLIST指令 329
B.2数据定义伪指令 330
B.2.1 DCB指令 330
B.2.2 DCW、DCWU指令 330
B.2.3 DCD、DCDU指令 331
B.2.4 DCFD、DCFDU指令 331
B.2.5 DCFS、DCFSU指令 331
B.2.6 DCQ、DCQU指令 332
B.2.7 SPACE指令 332
B.2.8 MAP指令 332
B.2.9 FILED指令 332
B.3汇编控制伪指令 333
B.3.1 IF、ELSE、ENDIF指令 333
B.3.2 WHILE、WEND指令 333
B.3.3 MACRO、MEND指令 334
B.3.4 MEXIT指令 334
B.4其他常用的伪指令 335
B.4.1 AREA指令 335
B.4.2 ALIGN指令 336
B.4.3 CODE16、CODE32指令 336
B.4.4 END指令 337
B.4.5 EQU指令 337
B.4.6 EXPORT、GLOBAL指令 337
B.4.7 IMPORT指令 338
B.4.8 EXTERN指令 338
B.4.9 GET、INCLUDE指令 338
B.4.10 INCBIN指令 339
B.4.11 RN指令 339
B.4.12 ROUT指令 339