第1篇 基础知识篇 2
第1章 Android系统介绍 2
1.1 纵览智能设备系统 2
1.1.1 昨日皇者——Symbian(塞班) 2
1.1.2 高贵华丽——iOS 2
1.1.3 全新面貌——Windows Phone 3
1.1.4 高端商务——BlackBerry OS(黑莓) 4
1.1.5 本书的主角——Android 5
1.2 分析Android成功的秘诀 6
1.2.1 强有力的业界支持 6
1.2.2 研发阵容强大 6
1.2.3 为开发人员“精心定制” 6
1.2.4 开源 7
1.3 剖析Android系统架构 7
1.3.1 底层操作系统层(OS) 8
1.3.2 各种库(Libraries)和Android运行环境(RunTime) 8
1.3.3 Application Framework(应用程序框架) 9
1.3.4 顶层应用程序(Application) 9
1.4 核心组件 9
1.4.1 Activity界面 9
1.4.2 Intent和Intent Filters 10
1.4.3 Service服务 10
1.4.4 Broadcast Receiver发送广播 11
1.4.5 用Content Provider存储数据 11
1.5 进程和线程 11
1.5.1 什么是进程 12
1.5.2 什么是线程 12
第2章 搭建Android开发环境 13
2.1 准备工作 13
2.2 安装JDK 13
2.3 获取并安装Eclipse和Android SDK 16
2.4 安装ADT 20
2.5 验证设置 21
2.5.1 设定Android SDK Home 22
2.5.2 验证开发环境 22
2.6 Android虚拟设备(AVD) 23
2.6.1 创建AVD 24
2.6.2 启动AVD 26
2.6.3 启动AVD模拟器的基本流程 26
2.7 分析Android应用工程文件 27
2.7.1 src程序目录 28
2.7.2 设置文件AndroidManifest.xml 28
2.7.3 常量定义文件 29
2.7.4 UI布局文件 29
第2篇 系统安全架构篇 32
第3章 Android系统的安全机制 32
3.1 Android安全机制概述 32
3.1.1 Android的安全机制模型 33
3.1.2 Android具有的权限 33
3.1.3 Android的组件模型(Component Model) 34
3.1.4 Android安全访问设置 34
3.2 Linux系统的安全机制 35
3.2.1 root用户、伪用户和普通用户 35
3.2.2 超级用户(权限) 36
3.2.3 文件权限 36
3.2.4 使用su命令临时切换用户身份 38
3.2.5 进程 39
3.3 沙箱模型 41
3.3.1 Java中的沙箱模型 42
3.3.2 Android系统中的沙箱机制 42
3.4 Android应用程序的安全机制 43
3.4.1 AndroidManifest.xml文件的权限机制 43
3.4.2 发布签名机制 43
3.5 分区加载机制 44
第4章 Android通信安全机制 46
4.1 进程和线程安全 46
4.1.1 进程安全 46
4.1.2 线程安全 47
4.1.3 实现线程安全方法 47
4.2 远程过程调用机制(RPC) 48
4.3 Binder安全机制基础 48
4.3.1 Binder中的安全策略 49
4.3.2 Binder机制更加安全 49
4.3.3 Binder安全机制的必要性 50
4.4 Binder机制架构基础 50
4.5 Service Manager管理Binder机制的安全 51
4.5.1 入口函数 52
4.5.2 操作设备文件 53
4.5.3 Binder驱动程序函数 54
4.5.4 红黑树节点结构体 55
4.5.5 管理内存映射地址空间 58
4.5.6 保护进程 61
4.5.7 获得线程信息 64
4.5.8 在循环中等待Client发送请求 66
4.5.9 Service Manager服务保护进程 68
4.6 MediaServer安全通信机制分析 70
4.6.1 MediaServer的入口函数 71
4.6.2 调用ProcessState 71
4.6.3 返回IServiceManager对象 73
4.6.4 注册MediaPlayerService 80
4.6.5 StartThread Pool和joinThreadPool 92
第5章 内存安全和优化 95
5.1 Ashmem系统详解 95
5.1.1 基础数据结构 95
5.1.2 初始化处理 96
5.1.3 打开匿名共享内存设备文件 98
5.1.4 内存映射 100
5.1.5 实现读写操作 101
5.1.6 锁定和解锁机制 103
5.1.7 回收内存块 108
5.2 内存优化机制详解 109
5.2.1 sp和wp简析 109
5.2.2 智能指针基础 111
5.2.3 轻量级指针 112
5.2.4 强指针 115
5.2.5 弱指针 128
5.3 Android内存系统的安全机制分析 132
5.3.1 Ashmem匿名共享内存的原理 132
5.3.2 使用Low Memory Killer机制实现安全和高效 133
5.3.3 Low Memory Killer机制和OOM的对比 133
5.4 常用的垃圾收集算法 134
5.4.1 引用计数算法 134
5.4.2 Mark Sweep算法 134
5.4.3 垃圾回收的时机 136
5.5 Android的内存泄漏 137
5.5.1 什么是内存泄漏 138
5.5.2 为什么会发生内存泄漏 138
5.5.3 shallow size、 retained size 140
5.5.4 查看Android内存泄漏的工具——MAT 140
5.5.5 查看Android内存泄漏的方法 143
5.5.6 Android (Java)中常见的容易引起内存泄漏的不良代码 145
5.5.7 使用MAT根据heap dump分析内存泄漏的根源 146
第6章 文件加密 153
6.1 Dmcrypt加密机制介绍 153
6.1.1 Linux密码管理机制 153
6.1.2 Dmcrypt加密机制分析 158
6.1.3 使用dmcrypt机制构建加密文件系统 166
6.2 Vold机制介绍 168
6.2.1 Vold机制基础 169
6.2.2 Vold的主要功能 173
6.2.3 Vold处理SD/USB的流程 179
6.2.4 Vold的加密机制 205
第7章 电话系统的安全机制 207
7.1 Android电话系统详解 207
7.1.1 电话系统简介 207
7.1.2 电话系统结构 208
7.1.3 驱动程序介绍 210
7.1.4 RIL接口 212
7.1.5 分析电话系统的实现流程 215
7.2 分析Android音频系统 220
7.2.1 音频系统结构 220
7.2.2 分析音频系统的层次 221
7.3 Android电话系统的安全机制 229
7.3.1 防止电话监听 229
7.3.2 VoIP语音编码和安全性分析 233
7.3.3 SIP协议控制 236
7.3.4 在Android平台实现SIP协议栈 239
7.3.5 通话加密技术 241
第8章 短信系统的安全机制 242
8.1 Android短信系统详解 242
8.1.1 短信系统的主界面 242
8.1.2 发送普通短信的过程 245
8.1.3 发送彩信的过程 257
8.1.4 接收短信 267
8.2 短信加密机制的设计模式 273
8.2.1 短信编码设计模式 273
8.2.2 DES短信息加密/解密算法 273
第9章 Android应用组件的安全机制 276
9.1 设置组件的可访问性 276
9.2 Intent组件的安全机制 276
9.2.1 Intent和IntentFilter简介 276
9.2.2 Intent组件的通信安全机制 277
9.2.3 过滤器的安全机制 278
9.3 Activity组件的安全机制 279
9.3.1 Activity劫持漏洞 280
9.3.2 针对Activity的安全建议 280
9.4 Content Provider组件的权限机制 281
9.4.1 Content Provider在应用程序中的架构 281
9.4.2 提供不同的权限机制 283
9.5 Service组件的安全机制 284
9.5.1 启动Service 284
9.5.2 4种操作Service的权限 296
9.6 Broadcast Receiver组件的安全机制 296
9.6.1 Broadcast基础 297
9.6.2 intent描述指示 298
9.6.3 传递广播信息 298
9.6.4 封装传递 299
9.6.5 处理发送请求 300
9.6.6 查找广播接收者 300
9.6.7 处理广播信息 304
9.6.8 检查权限 313
第3篇 安全攻防篇 318
第10章 编写安全的应用程序 318
10.1 开发第一个Android应用程序 318
10.1.1 新建Android工程 318
10.1.2 编写代码和代码分析 319
10.1.3 调试 320
10.1.4 运行项目 321
10.2 声明不同的权限 322
10.2.1 AndroidManifest.xml文件基础 322
10.2.2 声明获取不同的权限 323
10.2.3 自定义一个权限 327
10.3 发布Android程序生成APK 327
10.3.1 什么是APK文件 328
10.3.2 申请会员 329
10.3.3 生成签名文件 331
10.3.4 使用签名文件 336
10.3.5 发布到市场 339
第11章 APK的自我保护机制 340
11.1 分析DEX文件的结构 340
11.1.1 DEX文件的基本结构 340
11.1.2 隐藏DEX中的特定方法 343
11.2 完整性校验 344
11.2.1 DEX完整性校验 345
11.2.2 APK完整性校验 345
11.3 Java反射 346
11.4 动态加载 347
11.5 字符串处理 348
11.6 代码乱序操作 349
11.7 模拟器检测 351
11.8 APK伪加密 353
11.9 调试器检测 354
11.10 代码混淆 355
11.10.1 字符串加密 355
11.10.2 assets加密 356
第12章 常用的反编译工具 357
12.1 反编译基础 357
12.1.1 使用dex2jar和jdgui.exe进行反编译 357
12.1.2 使用Smali指令进行反编译 359
12.2 防止APK文件被反编译 360
12.3 IDA Pro反编译工具详解 361
12.3.1 IDA Pro介绍 361
12.3.2 常用的快捷键 361
12.4 其他常用的反编译工具 362
12.4.1 ApkDec介绍 362
12.4.2 jdgui.exe介绍 363
12.4.3 APKTool详解 364
12.4.4 APK Multi-Tool详解 365
12.5 Android NDK 367
12.5.1 Android NDK介绍 367
12.5.2 使用Android NDK 367
12.6 Smali语法介绍 369
12.6.1 Smali简介 369
12.6.2 Smali语法基础 371
第13章 dex2jar、 jdgui.exe和Apktool工具反编译实战 374
13.1 反编译APK文件 374
13.2 分析反编译后的文件 376
13.2.1 分析主Activity 376
13.2.2 分析类 377
13.2.3 定位程序的核心代码 377
13.3 分析Smali文件 377
13.3.1 一段演示文件 378
13.3.2 分析演示文件 385
13.4 分析内部类 387
13.5 分析监听器 392
13.5.1 Android监听器介绍 392
13.5.2 分析反编译后的监听器 393
13.6 分析注解类 394
13.7 Android独有的自动类 396
第14章 IDA Pro实战——反编译和脱壳 398
14.1 使用IDA Pro工具反编译Android文件 398
14.2 脱壳实战 401
14.2.1 在工作窗口中打开 401
14.2.2 使用IDC静态分析 402
14.2.3 静态脱壳 404
第15章 反编译实战——Smali文件分析 421
15.1 分析循环语句 421
15.1.1 创建Android工程 421
15.1.2 分析Smali文件中的循环语句 422
15.2 分析switch语句 435
15.2.1 创建Android工程 435
15.2.2 分析Smali文件中的switch语句 436
第16章 ARM汇编逆向分析 444
16.1 ARM处理器概述 444
16.1.1 ARM基础 444
16.1.2 ARM处理器的特点 445
16.2 Android和ARM 445
16.2.1 Android支持处理器 445
16.2.2 ARM是Android的首选 446
16.3 ARM的指令系统 446
16.3.1 ARM指令集概述 447
16.3.2 ARM指令的寻址方式 448
16.3.3 ARM指令集 450
16.4 ARM程序设计基础 463
16.4.1 ARM汇编器所支持的伪指令 463
16.4.2 汇编语言的语句格式 472
16.4.3 汇编语言的程序结构 475
16.5 实战演练 479
第17章 加壳技术详解 485
17.1 常用的APK保护技术 485
17.2 什么是加壳 486
17.3 Android加壳的原理 487
17.3.1 解壳数据位于解壳程序文件尾部 487
17.3.2 解壳数据位于解壳程序文件头 499
17.4 第三方工具——APK Protect 500
17.4.1 APK Protect的功能 500
17.4.2 使用APK Protect 500
17.4.3 实战演练——APK Protect加密分析 501
17.5 第三方工具——爱加密 511
第18章 动态分析和调试 513
18.1 常用的动态分析行为 513
18.2 Android中的动态调试 513
18.3 DDMS动态调试 515
18.3.1 DDMS界面介绍 515
18.3.2 从模拟器导出文件 520
18.3.3 使用DDMS获取内存数据 521
18.3.4 Logcat动态调试 523
18.4 MAT动态调试 524
18.5 实战演练——IDA Pro动态调试 527
18.5.1 分析函数JNI OnLoad() 528
18.5.2 分析Java com_ apkprotect Init 532
第19章 常见病毒分析 550
19.1 常见病毒的入侵方式 550
19.2 OBAD木马 551
19.2.1 感染过程分析 551
19.2.2 360分析报告 552
19.2.3 Android的设备管理器漏洞 554
19.2.4 分析OBAD 557
19.3 “隐身大盗二代”木马 561
19.3.1 案例介绍 562
19.3.2 分析木马 562
19.4 广告病毒Android-Trojan/Midown 568
19.4.1 米迪广告平台介绍 568
19.4.2 分析Android-Trojan/Midown 569
第20章 常见漏洞分析 575
20.1 Android漏洞分析报告 575
20.2 fakesms漏洞 577
20.3 签名验证漏洞 579
20.3.1 Master Key漏洞介绍 579
20.3.2 ZIP格式的文件结构 580
20.3.3 分析Master Key漏洞 582
20.3.4 #9695860漏洞 585
20.3.5 LBE手机安全大师对#9695860漏洞的修复 590
第4篇 综合实战篇 596
第21章 网络防火墙系统 596
21.1 系统需求分析 596
21.2 编写布局文件 597
21.3 编写主程序文件 599
21.3.1 主Activity文件 599
21.3.2 帮助Activity文件 610
21.3.3 公共库函数文件 611
21.3.4 系统广播文件 621
21.3.5 登录验证 622
21.3.6 打开/关闭某一个实施控件 623
第22章 跟踪定位系统 627
22.1 背景介绍 627
22.2 系统模块架构 628
22.3 实现系统主界面 629
22.3.1 实现UI布局文件 629
22.3.2 处理登录数据 631
22.4 系统设置界面 632
22.4.1 设置主界面 632
22.4.2 系统设置二级界面 636
22.4.3 添加联系人 643
22.4.4 邮箱设置 646
22.4.5 系统数据操作 647
22.5 动画提示界面 655
22.5.1 实现界面UI布局 655
22.5.2 显示不同的动画提示信息 656
22.6 激活定位跟踪功能 659
22.6.1 实现UI界面布局 659
22.6.2 实现定位跟踪 660
22.6.3 发送求救邮件 666
22.6.4 位置监听 668
22.6.5 发送求救短信 669
22.6.6 发送信息到服务器网站 670