本书内容易于理解,可以让读者循序渐进、系统性地学习iOS安全技术。书中首先细致地介绍了越狱环境的开发与逆向相关工具,然后依次讲解了汇编基础、动态调试、静态分析、注入与hook、文件格式,最后为大家呈现了应用破解与应用保护、隐私获取与取证、刷量与作弊、唯一设备ID、写壳内幕等多个主题。
第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 14
4.2.5 修改程序的执行流程………………… 52 17
4.2.6 查看信息 …………………………………. 54
4.2.7 执行到上层调用栈……………………. 56
4.2.8 临时修改变量的值……………………. 57
4.2.9 使用帮助与搜索……………………….. 57
第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 检查Bundleidentifier…………..273
12.5.2 检查来源是否为AppStore…..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
关于本书遇到的问题可以在论坛发贴,作者会尽力回复,同时与广大读者一起交流学习。
iOS安全技术交流论坛
圈内多位安全专家为本书写的推荐语
工欲善其事,必先利其器。本书前7章侧重入门知识,讲解了越狱环境会用到各种工具、ARM汇编基础以及应用逆向的常见方法等,后面8章侧重攻防实战和技巧。全书连贯,初学者几乎不用跳章节阅读。正如本书的书名昭示的那样,这是一本极负盛名的“武功秘籍”。我强烈推荐各位iOS安全爱好者阅读这本书,相信它会让你功能大增。
———— 易小峰,iOS安全研究员
我和陈德相识已经7年,他在攻防和安全方向有着10年以上的从业经历。这是一本由安全行业一线老兵编写的图书,书中条分缕析地讲解了iOS安全和应用逆向,披露了“羊毛党”使用的各种作弊和刷量的方法,揭秘了iOS平台鲜为人知的写壳技术。本书内容实用、通俗易懂,非常有助于广大iOS安全爱好者入门和提高。
———— 李明政,7年安全从业者
本书详述了目前iOS平台最流行的软件攻防技术,是iOS安全领域不可多得的力作。书中的内容集合了前沿安全技术与作者多年的实战经验,我相信大家在阅读本书时会有所收获。
———— 非虫,资深软件安全专家,《macOS软件安全与逆向分析》作者
网友评论