推荐序 V
译者序 VII
作者简介 IX
前言 XI
致谢 XXI
第一部分 iOS 基础
第1 章 iOS 安全模型 2
安全启动 3
沙盒机制 3
数据保护和全盘加密 4
加密密钥的层级 5
钥匙串API 7
数据保护API 7
防御代码漏洞:ASLR、XN 和其他机制 8
越狱检测 9
苹果商店的审查是否有用 10
WebKit 桥接 11
动态修复 11
故意植入不安全的代码 12
内嵌解释器 12
小结 12
第2 章 Objective-C 简明教程 13
关键的iOS 编程技术 14
消息传递 14
剖析Objective-C 程序 15
声明一个接口 15
具体实现 16
使用block 指定回调 18
Objective-C 如何管理内存 19
自动引用计数 19
委托和协议 20
should 消息 20
will 消息 21
did 消息 21
声明并遵守协议 21
category 的潜在问题 23
方法swizzling 24
小结 26
第3 章 iOS 应用剖析 27
对plist 文件进行处理 29
设备目录 32
Bundle 目录 34
Data 目录 35
Documents 和Inbox 目录 35
Library 目录 36
tmp 目录 38
Shared 目录 38
小结 39
第二部分 安全性测试
第4 章 构建测试平台 42
拆掉辅助轮 42
推荐几个测试设备 43
使用设备测试与使用模拟器测试 44
网络和代理设置 45
绕过TLS 验证 45
用stunnel 绕过SSL 47
设备上的证书管理 49
在设备上设置代理 50
Xcode 和构建设置 53
为生活增加点挑战 53
启用完整的ASLR 55
Clang 和静态分析 56
Address Sanitizer 和动态分析 57
使用Instruments 监控程序 58
激活工具 59
用Watchdog 监视系统活动 61
小结 62
第5 章 使用lldb 和其他工具进行调试 63
lldb 中有用的特性 64
操作断点 64
查看帧和变量 66
可视化查看对象 70
操作变量和属性 71
断点行为 73
使用lldb 进行安全分析 75
错误注入 75
追踪数据 77
查看核心框架 77
小结 78
第6 章 黑盒测试 79
安装第三方应用程序 80
使用.app 目录安装 80
使用.ipa 程序包安装 82
解密二进制文件 82
启动设备上的debugserver 83
定位加密字段 86
转储应用程序内存 90
逆向解密后的二进制文件 93
使用otool 检查二进制文件 93
使用class-dump 获得类信息 95
使用Cycript 从运行程序中提取数据 96
使用Hopper 反汇编 97
绕过证书锁定 99
使用Cydia Substrate 工具 100
使用Introspy 自动拦截 104
小结 107
第三部分 Cocoa API 的安全怪癖
第7 章 iOS 网络通信 110
使用iOS 自带的URL 加载系统 110
正确使用传输层安全协议 111
NSURLConnection 的基本身份验证策略 113
在NSURLConnection 中实现TLS 认证 115
修改重定向行为 117
TLS 证书锁定 117
使用NSURLSession 120
NSURLSession 配置 120
执行NSURLSession 任务 121
如何绕过NSURLSession 的TLS 验证 122
NSURLSession 中的基本身份验证 123
管理已存储的URL 凭证 125
使用第三方网络API 的风险 126
如何正确使用AFNetworking 126
ASIHTTPRequest 的错误使用方式 128
多点连接 129
使用NSStream 操作底层网络 131
使用CFStream 操作更加底层的网络 133
小结 134
第8 章 进程间通信 135
URL scheme 和openURL 方法 135
定义URL scheme 136
发送和接收URL/IPC 请求 137
验证URL 和发送者 138
劫持URL scheme 140
通用链接 141
使用UIActivity 共享数据 143
应用程序扩展 145
检查应用程序是否实现了扩展 146
限制和验证可共享的数据 147
禁止应用和扩展交互 148
失败的IPC 技巧:剪贴板 149
小结 150
第9 章 适用于iOS 的Web 应用 151
使用(并滥用)UIWebView 151
UIWebView 的使用方式 152
在UIWebView 中执行JavaScript 代码 153
桥接JavaScript-Cocoa 的收益和风险 154
应用与JavaScriptCore 交互 155
使用Cordova 执行JavaScript 代码 159
使用WKWebView 163
WKWebView 的使用方式 163
WKWebViews 的安全性优势 164
小结 166
第10 章 数据泄漏 167
揭秘NSLog 和苹果系统日志 167
在发布版本中禁用NSLog 169
使用断点行为来记录日志 170
敏感数据如何通过剪贴板泄漏 171
不受限制的系统剪贴板 171
命名剪贴板的风险 172
剪贴板数据保护策略 174
查找并修复HTTP 缓存泄漏 176
缓存管理 177
如何删除缓存数据 179
HTTP 本地存储和数据库中的数据泄漏 182
按键记录及自动纠错数据库 183
用户偏好设置的错误用法 185
处理截屏中的敏感数据 186
屏幕遮挡策略 187
遮挡原理解析 190
隐藏视图的常见问题 191
阻止应用挂起,从而避免截屏 191
状态保存导致的泄漏 192
安全的状态保存 194
远离iCloud 196
小结 197
第11 章 C 语言的遗留问题 198
格式化字符串 199
预防传统的C 格式化字符串攻击 200
预防Objective-C 格式化字符串攻击 201
缓冲区溢出及栈空间 202
strcpy 缓冲区溢出 203
预防缓冲区溢出 204
整数溢出和堆 206
malloc 引发的整数溢出 206
预防整数溢出 208
小结 208
第12 章 注入攻击 209
客户端的跨站脚本攻击 209
输入审查 210
输出编码 212
SQL 注入攻击 213
断言注入攻击 214
XML 注入攻击 216
通过XML 外部实体实现注入攻击 216
第三方XML 库的问题 217
小结 218
第四部分 保证数据安全
第13 章 加密与认证 220
使用钥匙串 220
用户备份中的钥匙串 221
钥匙串保护属性 221
钥匙串基础用法 223
封装钥匙串 226
共享钥匙串 227
iCloud 同步 228
数据保护API 228
保护等级 229
DataProtectionClass 权限 232
检查保护数据是否可用 233
使用CommonCrypto 加密 235
避免弱算法 236
正确使用初始化向量 236
破碎的熵 237
弱密钥 237
执行散列操作 238
使用HMAC 确保消息的可靠性 239
使用RNCryptor 封装CommonCrypto 240
使用TouchID 进行本地验证 241
指纹是否足够安全 242
小结 242
第14 章 移动端隐私问题 243
唯一设备标识符隐患 243
官方解决方案 244
使用唯一标识符的规则 246
移动端Safari 及请勿追踪header 标签 246
Cookie 接受策略 247
位置和行动监控 249
地理位置定位的工作原理 249
存储位置数据的风险 250
限制定位精度 250
请求位置数据 251
健康与运动信息管理 252
通过HealthKit 读写数据 252
M7 协处理器 254
申请收集数据 254
使用iBeacon 追踪距离 255
iBeacon 监测功能 256
将iOS 设备变为iBeacon 258
iBeacon 注意事项 259
建立隐私策略 259
小结 260
· · · · · · (
收起)