《iOS应用逆向与安全》从顺向开发设计、专用工具的应用、反向实战及安全性维护等层面,对iOS运用的反向与安全性开展了解读。这书內容包含基本要素、反向自然环境的提前准备、常见反向剖析专用工具、类的构造、App签字、Mach-O格式文件、hook基本原理等,并根据在苹果越狱服务平台和非苹果越狱服务平台上的反向剖析案例,领着用户学习培训反向剖析的构思和方式 。在运用安全性及维护层面,这书內容涉及到数据传输、检测服务、代码混淆等。
1.15年添加网易网从业iOS安全性维护有关工程项目,开发设计了一整套iOS结构加固维护的专用工具2.16年从业手机端有关开发设计,并在网易云课堂视频录制了《iOS反向与安全性》的课程内容。3.17年上半年度从业前端工程师和手机端特性监控器工作中,现再次回安全部从业iOS结构加固维护的工作中。
目录
- 第1章 概述
- 1.1 逆向工程简介 1
- 1.1.1 iOS逆向学习基础 1
- 1.1.2 iOS逆向的流程 1
- 1.1.3 iOS逆向使用的工具 2
- 1.1.4 iOS逆向的应用场景 2
- 1.2 应用面临的安全风险 2
- 1.2.1 静态修改文件 3
- 1.2.2 动态篡改逻辑 3
- 1.2.3 协议分析 3
- 1.3 应用保护手段 3
- 1.3.1 数据加密 3
- 1.3.2 程序混淆 4
- 1.3.3 安全监测 4
- 1.4 本书工具 4
- 1.4.1 效率工具 4
- 1.4.2 实用工具 5
- 1.4.3 逆向工具 5
- 第2章 越狱设备
- 2.1 什么是越狱 6
- 2.2 Cydia 6
- 2.3 SSH 7
- 2.3.1 安装OpenSSH 8
- 2.3.2 配置dropbear 10
- 2.3.3 修改默认密码 11
- 2.3.4 公钥登录 11
- 2.3.5 通过USB登录 13
- 2.4 iOS系统结构 14
- 2.4.1 文件目录 15
- 2.4.2 文件权限 17
- 2.5 Cydia Substrate 18
- 2.5.1 MobileHooker 19
- 2.5.2 MobileLoader 19
- 2.5.3 Safe mode 20
- 2.6 越狱必备工具 21
- 2.6.1 adv-cmds 21
- 2.6.2 appsync 21
- 2.6.3 iFile 21
- 2.6.4 scp 22
- 第3章 逆向工具详解
- 3.1 应用解密 23
- 3.1.1 dumpdecrypted 23
- 3.1.2 Clutch 28
- 3.1.3 小结 30
- 3.2 class-dump 30
- 3.2.1 class-dump的使用 30
- 3.2.2 class-dump的原理 33
- 3.2.3 OC和Swift混编 40
- 3.3 Reveal 41
- 3.3.1 开发集成Reveal 41
- 3.3.2 越狱注入Reveal 42
- 3.4 Cycript 43
- 3.4.1 开发集成Cycript 44
- 3.4.2 使用Cycript越狱 45
- 3.4.3 使用Cycript分析应用 46
- 3.4.4 Cycript的高级用法 49
- 3.5 抓包 52
- 3.5.1 Charles抓包 53
- 3.5.2 修改网络请求 55
- 3.5.3 HTTPS抓包 59
- 3.5.4 Wireshark抓包 60
- 第4章 开发储备
- 4.1 App的结构及构建 66
- 4.1.1 获取应用包 66
- 4.1.2 应用包的格式 71
- 4.1.3 应用的构建过程 72
- 4.2 界面结构和事件传递 76
- 4.2.1 界面的组成 76
- 4.2.2 界面事件的响应 79
- 4.3 类与方法 83
- 4.3.1 类与方法的底层实现 84
- 4.3.2 运行时类的结构 89
- 4.3.3 消息机制 91
- 4.3.4 runtime的应用 94
- 4.4 App签名 98
- 4.4.1 配置Xcode签名 98
- 4.4.2 App签名的原理 100
- 4.4.3 重签名 107
- 第5章 分析与调试
- 5.1 静态分析 109
- 5.1.1 Hopper 109
- 5.1.2 IDA 118
- 5.1.3 静态库分析 125
- 5.2 动态调试 128
- 5.2.1 LLDB调试 128
- 5.2.2 LLDB解密 141
- 5.2.3 用Xcode调试第三方应用 144
- 5.2.4 LLDB的高级调试技巧 151
- 5.3 Theos 167
- 5.3.1 Theos的安装 168
- 5.3.2 Theos的基本应用 168
- 5.3.3 Theos的高级应用 172
- 5.4 MonkeyDev 177
- 5.4.1 安装MonkeyDev 178
- 5.4.2 Logos Tweak 179
- 5.4.3 CaptainHook Tweak 181
- 5.4.4 Command-line Tool 185
- 第6章 逆向进阶
- 6.1 程序加载 186
- 6.1.1 dyld简介 186
- 6.1.2 dyld加载流程 187
- 6.2 Mach-O文件格式 206
- 6.2.1 Mach-O文件的基本格式 206
- 6.2.2 Mach-O头部 208
- 6.2.3 Load Command 210
- 6.2.4 虚拟地址和文件偏移 214
- 6.2.5 懒加载和非懒加载 217
- 6.2.6 Code Signature 223
- 6.3 ARM汇编 228
- 6.3.1 ARM架构和指令集 228
- 6.3.2 AArch64寄存器 229
- 6.3.3 指令集编码 231
- 6.3.4 AArch64指令 233
- 6.3.5 栈和方法 236
- 6.3.6 Objective-C汇编 245
- 6.4 hook 247
- 6.4.1 Method Swizzle 247
- 6.4.2 fishhook 248
- 6.4.3 Cydia Substrate 253
- 6.4.4 Swift hook 256
- 6.5 动态库 259
- 6.5.1 编译和注入 260
- 6.5.2 导出和隐藏符号 260
- 6.5.3 C 和OC动态库 263
- 6.5.4 其他常见问题 267
- 第7章 实战演练
- 7.1 越狱设备分析 270
- 7.1.1 分析准备 270
- 7.1.2 开始分析 272
- 7.1.3 编写Tweak 284
- 7.1.4 安装与小结 287
- 7.2 非越狱设备分析 288
- 7.2.1 创建MonkeyDev项目 288
- 7.2.2 非越狱逆向实战 291
- 7.2.3 编写hook代码 303
- 7.2.4 制作非越狱Pod 304
- 7.2.5 小结 308
- 7.3 Frida实战应用 309
- 7.3.1 Frida的安装 309
- 7.3.2 Frida的初级使用 311
- 7.3.3 Frida的高级使用 319
- 7.3.4 小结 326
- 第8章 安全保护
- 8.1 数据加密 327
- 8.1.1 本地存储加密 328
- 8.1.2 网络传输加密 328
- 8.1.3 字符串加密 333
- 8.2 静态混淆 341
- 8.2.1 宏定义 342
- 8.2.2 二进制修改 347
- 8.3 动态保护 349
- 8.3.1 反调试 349
- 8.3.2 反反调试 352
- 8.3.3 反注入 359
- 8.3.4 hook检测 360
- 8.3.5 完整性校验 361
- 8.4 代码混淆 363
- 8.4.1 什么是LLVM 363
- 8.4.2 下载和编译LLVM 364
- 8.4.3 开发和调试Pass 366
- 8.4.4 OLLVM源代码分析 373
- 8.4.5 替换Xcode编译器 379
- 8.4.6 静态库混淆 389
- 8.5 本章总结 390