《九阴真经:iOS黑客攻防秘籍》新书发布
本书内容易于理解,可以让读者循序渐进、系统性地学习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 越狱与Cydia8
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
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 检查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软件安全与逆向分析》作者
《九阴真经:iOS黑客攻防秘籍》新书发布的更多相关文章
- 新书发布《每天5分钟玩转Docker容器技术》
后台不时收到关于纸质版教程书籍的询问,今天终于可以给大家一个交代了. <每天5分钟玩转Docker容器技术>现已在各大书城上架. 比较了一下,目前京东上最实惠:https://item.j ...
- 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)
据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...
- Why Helm? - 每天5分钟玩转 Docker 容器技术(160)
本章我们将学习 Helm,Kubernetes 的包管理器. 每个成功的软件平台都有一个优秀的打包系统,比如 Debian.Ubuntu 的 apt,Redhat.Centos 的 yum.而 Hel ...
- 再次实践 MySQL chart - 每天5分钟玩转 Docker 容器技术(166)
学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记 ...
- 如何安装和配置 Rex-Ray?- 每天5分钟玩转 Docker 容器技术(74)
Rex-Ray 是一个优秀的 Docker volume driver,本节将演示其安装和配置方法. Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上,安装方法很简单, ...
- 配置 VirtualBox backend - 每天5分钟玩转 Docker 容器技术(75)
Rexy-Ray 支持多种 backend,上一节我们已经安装配置了 Rex-Ray,今天演示如何配置 VirtualBox backend. 在 VirtualBox 宿主机,即我的笔记本上启动 v ...
- 创建 Rex-Ray volume - 每天5分钟玩转 Docker 容器技术(76)
前面我们安装部署了 Rex-Ray,并且成功配置 VirtualBox backend,今天演示如何创建和使用 Rex-Ray volume. 在 docker1 或 docker2 上执行如下命令创 ...
- 跨主机使用 Rex-Ray volume - 每天5分钟玩转 Docker 容器技术(77)
上一节我们在 docker1 上的 MySQL 容器中使用了 Rex-Ray volume mysqldata,更新了数据库.现在容器已经删除,今天将演示在 docker2 中重新使用这个卷. 在 d ...
- Docker 最常用的监控方案 - 每天5分钟玩转 Docker 容器技术(78)
当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. 在本章中,我们将讨论几个目前比较常用的容器监控工具和方案,为大家构建自己的监控系统提供参考. 首先我们会讨 ...
- Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)
Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如 ...
随机推荐
- Linux初始化脚本
以下脚本用于linux系统的初始化脚本,可以在服务器系统安装完毕之后立即执行.脚本结合各位大牛一些参数,已经在CentOS 5下通过. 使用方法:将其复制,保存为一个shell文件,比如init.sh ...
- Codeforces Round #587 (Div. 3) A. Prefixes
链接: https://codeforces.com/contest/1216/problem/A 题意: Nikolay got a string s of even length n, which ...
- c++ const修饰词
常变量: const 类型说明符 变量名 // const int i = 20;常变量定义必需初始化赋值且变量值不可更改 常引用: const 类型说明符 &引用名 //引用:指 ...
- MSMQ使用
Message Message是MSMQ的数据存储单元,我们的用户数据一般也被填充在Message的body当中,因此很重要,让我们来看一看其在.net中的体现,如图: 在图上我们可以看见,Messa ...
- [Luogu] 国王游戏
https://www.luogu.org/problemnew/show/P1080 按照 a * b 排序 高精度 #include <bits/stdc++.h> using nam ...
- java 面试心得总结-BAT、网易
http://blog.csdn.net/sinat_26812289/article/details/50898693
- Mybatis源码学习之DataSource(七)_1
简述 在数据持久层中,数据源是一个非常重要的组件,其性能直接关系到整个数据持久层的性能.在实践中比较常见的第三方数据源组件有Apache Common DBCP.C3P0.Proxool等,MyBat ...
- HDU 4635 Strongly connected ——(强连通分量)
好久没写tarjan了,写起来有点手生,还好1A了- -. 题意:给定一个有向图,问最多添加多少条边,让它依然不是强连通图. 分析:不妨考虑最大时候的临界状态(即再添加一条边就是强连通图的状态),假设 ...
- kdc 互信
环境: 29.3.203.53(sysops00065017) 部署KDC Namnode Datanode,KDC负责TESTA.COM域的认证 29.3.203.54(sysops00065018 ...
- nc浏览器的十宗罪
1.收藏夹.nc浏览器收藏夹无法导出或者导出困难,十分恶心.其他的小众软件都有这个简单的功能,某天我突然想到为什么手机nc浏览器连个导出收藏夹的功能都没有,并不是不注重用户体验,或则导功能很难实现不会 ...