第一部分 iOS基础 2
第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
Obj ective-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
第二部分 安全性测试 42
第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的安全怪癖 110
第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
使用NS Stream操作底层网络 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
第四部分 保证数据安全 220
第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