第1章 iOS安全机制  1
         1.1 应用的安装源  1
         1.2 沙盒  2
         1.3 代码签名  3
         1.4 用户权限隔离  4
         1.5 数据执行保护  4
         1.6 地址随机化  5
         1.7 后台程序  5
         第2章 越狱环境开发工具的准备  8
         2.1 越狱与Cydia  8
         2.2 文件管理工具  10
         2.2.1 iFile:在手机上管理文件  10
         2.2.2 AFC2:通过USB管理手机文件  10
         2.3 命令行工具  11
         2.3.1 MTerminal:手机中执行命令行  11
         2.3.2 OpenSSH:在电脑上执行命令行  12
         2.4 代码注入测试工具  13
         2.5 远程调试工具  14
         2.5.1 debugserver的配置与启动  14
         2.5.2 LLDB连接debugserver及其调试  15
         2.5.3 通过USB连接SSH进行调试  17
         2.6 反汇编工具  18
         2.6.1 IDA  18
         2.6.2 Hopper  21
         2.7 其他工具  22
         第3章 ARM汇编基础  30
         3.1 ARMv7  30
         3.1.1 编写32位汇编代码  30
         3.1.2 寄存器与栈  32
         3.1.3 基础指令  32
         3.1.4 条件跳转与循环  33
         3.1.5 函数参数的调用过程  34
         3.1.6 Thumb指令  35
         3.2 ARM64  36
         3.2.1 编写64位的汇编代码  36
         3.2.2 寄存器与栈  36
         3.2.3 函数参数的调用过程  37
         3.3 在Xcode中使用内联汇编  38
         3.3.1 C/C++/Objective-C调用汇编函数  39
         3.3.2 直接编写内联汇编  39
         第4章 应用逆向分析  41
         4.1 寻找main函数的入口  41
         4.1.1 编写一个测试程序  41
         4.1.2 ARMv7的main函数入口  42
         4.1.3 ARM64的main函数入口  43
         4.2 动态调试  44
         4.2.1 反汇编  44
         4.2.2 添加断点  45
         4.2.3 打印数据  50
         4.2.4 读写数据  51
         4.2.5 修改程序的执行流程  52
         4.2.6 查看信息  54
         4.2.7 执行到上层调用栈  56
         4.2.8 临时修改变量的值  57
         4.2.9 使用帮助与搜索  57
         4.3 静态分析  58
         4.3.1 通过字符串定位到代码的引用位置  58
         4.3.2 查看函数被调用的位置  62
         4.3.3 重设基地址  63
         4.3.4 修改代码并保存文件  64
         4.3.5 使用IDA Python脚本  65
         4.4 逆向分析实例  65
         第5章 Tweak编写技术  76
         5.1 Theos开发环境的使用  76
         5.1.1 编写第一个Tweak  76
         5.1.2 Theos工程文件  80
         5.2 逆向分析与编写Tweak  83
         5.2.1 逆向分析  83
         5.2.2 编写Tweak  91
         第6章 注入与hook  94
         6.1 注入动态库  94
         6.1.1 编写动态库  94
         6.1.2 DynamicLibraries目录  95
         6.1.3 DYLD_INSERT_LIBRARIES环境变量  95
         6.1.4 不越狱注入动态库  96
         6.2 hook  97
         6.2.1 Cydia Substrate  97
         6.2.2 Symbol Table  100
         6.2.3 Method Swizzing  102
         第7章 Mach-O文件格式解析  104
         7.1 Mach-O文件格式  104
         7.1.1 Fat头部  106
         7.1.2 Mach头部  108
         7.1.3 Load command  109
         7.1.4 符号表与字符串表  122
         7.2 CFString的运行过程  124
         7.2.1 编写测试代码  124
         7.2.2 CFString的数据结构  125
         7.2.3 调试运行过程  126
         7.3 Mach-O ARM函数绑定的调用过程分析  127
         7.3.1 编写测试代码  127
         7.3.2 分析ARMv7函数绑定的调用过程  128
         7.3.3 分析ARM64函数绑定的调用过程  136
         7.3.4 总结  140
         7.4 静态库文件格式  142
         7.5 class-dump导出头文件的原理  143
         7.6 关于Bitcode  147
         7.6.1 Bitcode的作用  148
         7.6.2 在Xcode中如何生成Bitcode  148
         7.6.3 通过命令行编译Bitcode  150
         7.6.4 将Bitcode编译成可执行文件  152
         7.6.5 编译器相关参数  153
         第8章 唯一设备ID  154
         8.1 UDID与设备ID  154
         8.2 IDFA  157
         8.3 IDFV  157
         8.4 OpenUDID  158
         8.5 SimulateIDFA  159
         8.6 MAC地址  160
         8.7 ID的持久化存储  163
         8.8 DeviceToken  167
         第9章 刷量与作弊  168
         9.1 越狱环境下获取root权限  168
         9.2 修改手机信息  169
         9.2.1 修改基本信息  169
         9.2.2 修改Wi-Fi信息  176
         9.2.3 修改DeviceToken  177
         9.2.4 修改位置信息  178
         9.3 清除应用数据  179
         9.4 清除Keychain  181
         9.5 清除剪贴板  183
         9.6 发布应用  183
         9.6.1 将App打包成deb  183
         9.6.2 制作Cydia源发布应用  184
         9.7 权限的切换  185
         9.8 变化IP地址  186
         9.9 反越狱检测  188
         9.10 不用越狱修改任意位置信息  190
         9.11 在两个手机上同时登录同一微信  192
         9.12 微信的62数据  193
         第10章 重要信息获取与取证  195
         10.1 通讯录  195
         10.2 短信  196
         10.3 通话记录  197
         10.4 位置信息  197
         10.5 网络信息  199
         10.6 传感器信息  206
         10.7 系统信息  210
         10.8 硬件ID信息  214
         10.9 已安装的应用列表  216
         10.10 使用idb分析泄露的数据  218
         10.11 重要的文件与目录  223
         10.12 libimobiledevice获取手机信息  226
         第11章 应用破解  228
         11.1 重打包应用与多开  228
         11.1.1 重打包应用  228
         11.1.2 多开  235
         11.2 应用重签名  238
         11.2.1 代码签名  238
         11.2.2 授权机制  241
         11.2.3 配置文件  243
         11.2.4 重签名  244
         11.3 抓包和改包  245
         11.3.1 tcpdump抓包  245
         11.3.2 Wireshark抓包  248
         11.3.3 Charles抓取HTTPS数据包  250
         11.3.4 Charles修改数据包与重发  254
         11.3.5 突破SSL双向认证  257
         11.4 文件监控  258
         11.5 破解登录验证  259
         11.5.1 得到HTTP传输的数据  259
         11.5.2 得到解密的数据  260
         11.5.3 破解方法  261
         第12章 应用保护  262
         12.1 函数名混淆  262
         12.2 字符串加密  262
         12.3 代码混淆  265
         12.3.1 inline内联函数  265
         12.3.2 obfuscator-llvm编译器  266
         12.3.3 Xcode集成配置obfuscator-llvm  268
         12.3.4 Theos集成配置obfuscator-llvm  270
         12.4 越狱检测  270
         12.4.1 判断相关文件是否存在  270
         12.4.2 直接读取相关文件  271
         12.4.3 使用stat函数判断文件  271
         12.4.4 检查动态库列表  272
         12.4.5 检查环境变量  272
         12.4.6 检查函数是否被劫持  272
         12.5 反盗版  273
         12.5.1 检查Bundle identifier  273
         12.5.2 检查来源是否为App Store  273
         12.5.3 检查重签名  276
         12.5.4 代码校验  277
         12.6 反调试与反反调试  278
         12.6.1 反调试方法  279
         12.6.2 反反调试  281
         12.7 反注入与反反注入  285
         第13章 代码入口点劫持  287
         13.1 实现原理  287
         13.2 编写ShellCode  287
         13.2.1 编写ARM汇编  288
         13.2.2 计算main函数的跳转地址  292
         13.2.3 最终的ShellCode  294
         13.3 插入代码  295
         13.4 修改入口点  296
         13.4.1 关于指令切换  296
         13.4.2 ARMv7入口点  297
         13.4.3 ARM64入口点  297
         13.5 重签名  298
         第14章 写壳内幕  300
         14.1 判断文件格式类型  300
         14.2 代码的插入  301
         14.3 修改程序入口点  303
         14.4 Shellcode如何调用函数  304
         14.5 编写和调试Shellcode  308
         14.5.1 ARMv7 Shellcode  309
         14.5.2 ARM64 Shellcode  316
         14.6 总结  329
         第15章 系统相关  331
         15.1 Cydia的相关问题及修复方法  331
         15.2 降级传说  334
         15.3 访问限制密码的安全隐患  335
         15.4 扫码在线安装应用  338
         15.5 CVE-2018-4407远程溢出漏洞  344
         15.6 解决磁盘空间不足的问题  345
         附录A 书中用到的工具列表  347
      · · · · · ·     (
收起)