描述
开 本: 128开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787115622723丛书名: 网络空间安全实践能力分级培养系列教材
1.作者从事教学工作30年,先后撰写出版了多本教材,主编的”多媒体计算机技术”(电子工业出版社)从2002年的第1版,目前已经更新到第5版,是”十一五”国家规划教材。
2.作者长期深耕于软件逆向和协议分析项目的研发领域,拥有丰富的实践经历,本书汇集了其宝贵的实践经验,帮助读者少走弯路。
3.内容丰富实用,以实例为导引,深入讲解逆向分析方法的应用,易学易用。
本书根据本科生和研究生软件逆向分析相关课程的教学需要,以实例为导引,面向攻防实践,将逆向分析基础和工具融入实例的剖析过程中,使学生能够在解决实际问题的过程中掌握相关基础和常用工具的使用方法。通过对软件逆向基础、常见文件格式解析、常用反汇编算法及缺陷分析、Android程序逆向基础和相关工具的介绍,读者能够掌握基本的逆向分析方法。随着逆向分析技术的不断演进,一些新的理论和技术不断涌现,本书围绕代码混淆和反混淆、漏洞挖掘及协议逆向分析技术的相关方法和研究进展做了详细的介绍,以帮助从事相关研究的读者了解这些内容。
本书既可作为高等院校相关课程的教材,也可以供从事逆向分析应用研究与开发的工程技术人员参考。
目录
第 1章 软件逆向分析基础 1
1.1 初识软件逆向分析 2
1.2 软件逆向分析的目的 7
1.2.1 与安全相关的应用 7
1.2.2 软件开发中的逆向分析 9
1.3 软件逆向分析的合法性 11
1.3.1 可以规避的例外 11
1.3.2 软件逆向分析与版权之争 12
1.3.3 漏洞利用 14
1.4 如何掌握软件逆向分析方法 14
1.4.1 目标要明确 15
1.4.2 拥有积极的心态 15
1.4.3 感受逆向分析的乐趣 15
1.4.4 学会检索 16
1.4.5 实践 实践 再实践 16
1.4.6 保持平和的心态 17
1.5 软件逆向分析过程 17
1.5.1 静态分析 17
1.5.2 动态分析 32
思考题 37
第 2章 文件格式解析 38
2.1 PE文件 38
2.1.1 基本概念 38
2.1.2 头部信息 40
2.1.3 区块信息 45
2.1.4 导入表和导出表 48
2.2 ELF文件 51
2.2.1 ELF文件的基本格式 51
2.2.2 ELF文件头部信息 52
2.2.3 ELF文件的节区 56
2.2.4 ELF文件的段 61
2.2.5 ELF文件的“.dynamic”节区 65
2.3 “.dex”文件 69
2.3.1 “.dex”文件简介 70
2.3.2 “.dex”文件结构 71
2.4 “.odex”文件结构 81
思考题 83
第3章 理解程序逻辑和算术运算 84
3.1 数据的存储和访问 84
3.1.1 常量和变量 84
3.1.2 基本数据类型 88
3.1.3 指针、数组和字符串 94
3.1.4 结构体、联合体 98
3.1.5 函数 100
3.2 基本程序逻辑 104
3.2.1 无条件分支指令 104
3.2.2 条件分支指令 106
3.2.3 循环指令 109
3.3 算术运算 112
3.3.1 算术标志位 112
3.3.2 整数运算 113
思考题 118
第4章 常用反汇编算法与分析 119
4.1 反汇编算法概述 119
4.2 线性扫描反汇编算法 121
4.3 递归下降反汇编算法 124
4.4 反汇编算法缺陷分析 128
4.4.1 线性扫描反汇编算法缺陷示例 129
4.4.2 递归下降反汇编算法缺陷示例 132
4.5 反汇编案例 137
思考题 138
第5章 反汇编算法优化 139
5.1 基于超集的反汇编算法——Multiverse 139
5.1.1 存在的挑战 140
5.1.2 解决思路 144
5.1.3 映射 146
5.1.4 重写 150
5.1.5 实现 151
5.2 基于概率提示的反汇编算法——PD 152
5.2.1 概述 153
5.2.2 X86指令的概率特征 155
5.2.3 概率提示反汇编算法 158
5.2.4 算法实现 163
5.3 基于多路径探索的动态反汇编算法 167
5.3.1 指令执行轨迹 168
5.3.2 多路径探索 169
思考题 170
第6章 Android程序逆向分析基础 171
6.1 Android程序的代码结构 171
6.1.1 压缩文件结构 173
6.1.2 反编译文件 179
6.2 Android虚拟机:Dalvik和ART 181
6.2.1 Dalvik虚拟机 181
6.2.2 ART虚拟机 182
6.2.3 “.apk”程序的执行流程 183
6.3 smali语言和基本语法 183
6.3.1 smali代码格式 185
6.3.2 smali语言的数据类型 187
6.3.3 寄存器 187
6.3.4 方法定义 189
6.3.5 常见Dalvik指令集 189
6.4 JNI 197
6.4.1 Java中调用Native函数 197
6.4.2 C/C 中调用Java函数 200
思考题 200
第7章 Android逆向分析工具及应用 201
7.1 反编译工具 201
7.1.1 smali/baksmali 201
7.1.2 apktool 202
7.1.3 ShakaApktool 204
7.1.4 Android Killer 204
7.1.5 Jeb 208
7.1.6 Jadx 213
7.1.7 GDA 216
7.2 动态分析工具 217
7.2.1 Xposed框架 218
7.2.2 Frida 224
7.2.3 Objection 230
7.3 协议分析工具 230
7.3.1 Wireshark 230
7.3.2 Fiddler 231
7.3.3 Burp Suite 231
思考题 232
第8章 软件保护与反保护的基本方法 233
8.1 软件保护技术概述 233
8.1.1 软件加密技术 234
8.1.2 防篡改技术 234
8.1.3 反调试技术 234
8.1.4 壳保护技术 235
8.2 移动终端软件保护技术概述 235
8.2.1 静态篡改防护技术 236
8.2.2 动态篡改防护技术 237
8.3 对ELF文件加壳 238
8.3.1 ELF文件的加载过程 238
8.3.2 常见ELF文件的加壳原理 239
8.3.3 包含式ELF文件加壳方法 241
8.4 Android应用加固 243
8.4.1 “.dex”文件加固方法概述 243
8.4.2 通用加壳技术 244
8.4.3 动态脱壳方法 247
8.5 Android应用脱壳分析实例 249
8.5.1 Android中“.so”文件的加载流程分析 249
8.5.2 Android动态调试过程 249
8.5.3 加固方式分析 251
8.5.4 “.so”文件分析 252
8.5.5 还原JNI_OnLoad 255
8.5.6 动态分析 260
思考题 270
第9章 代码混淆与反混淆 271
9.1 代码混淆技术基本概念 271
9.1.1 代码混淆技术的定义 272
9.1.2 代码混淆技术的分类 273
9.1.3 代码混淆技术与逆向分析的关系 273
9.2 常见的基于源代码的代码混淆技术 274
9.2.1 符号混淆 274
9.2.2 结构混淆 276
9.2.3 控制流混淆 278
9.2.4 数据混淆 280
9.3 二进制代码混淆技术 281
9.3.1 插入花指令 281
9.3.2 代码乱序 283
9.3.3 常量展开 283
9.3.4 调用地址隐藏 284
9.3.5 指令移动 284
9.3.6 数据混淆 285
9.4 OLLVM原理 285
9.4.1 LLVM原理介绍 285
9.4.2 OLLVM简介 286
9.5 反混淆技术 291
9.5.1 反混淆技术研究概况 291
9.5.2 常用的反混淆技术 295
9.5.3 基于IAT的反混淆技术 296
9.5.4 控制流平坦化反混淆技术 300
思考题 306
第 10章 基于二进制代码的漏洞挖掘技术 307
10.1 漏洞概述 307
10.1.1 bug与漏洞 307
10.1.2 漏洞挖掘、漏洞分析、漏洞利用 307
10.2 漏洞挖掘技术概述 308
10.2.1 人工分析技术 309
10.2.2 Fuzzing 309
10.2.3 补丁比对技术 310
10.2.4 静态分析技术 311
10.2.5 动态分析技术 313
10.2.6 基于机器学习方法 315
10.3 漏洞分析常用工具 316
10.3.1 静态分析工具CodeSonar 316
10.3.2 用于渗透测试的几种漏洞扫描工具 317
10.3.3 Fuzzing工具 318
10.4 可感知应用的进化模糊测试工具—— VUzzer 320
10.4.1 基础知识 320
10.4.2 问题分析 321
10.4.3 方法分析 325
10.4.4 设计与实现 328
10.5 固件漏洞分析及实例 332
10.5.1 典型固件漏洞分析方法梳理 333
10.5.2 固件漏洞分析实例 336
思考题 342
第 11章 协议逆向分析技术 343
11.1 协议分析概述 343
11.1.1 网络协议分析的发展历程 343
11.1.2 协议分析技术的分类 344
11.2 协议逆向分析基础 345
11.2.1 协议逆向分析模型 345
11.2.2 消息格式提取方法 348
11.2.3 状态机推断算法 354
11.3 网络协议分析技术 356
11.3.1 基于网络流量的协议逆向分析 356
11.3.2 基于程序分析的协议逆向分析 358
11.4 工业控制协议分析 359
11.4.1 工业控制协议安全现状 359
11.4.2 工业控制协议安全分析 360
11.4.3 工业控制协议的特点 362
11.4.4 工业控制协议规范解析 363
11.4.5 动态污点分析技术在协议逆向分析中的应用 363
11.4.6 基本块粒度工业控制协议字段边界逆向分析算法 365
思考题 369
附录A 一个简单程序的逆向分析 370
A.1 观察程序的行为 370
A.2 静态分析 371
A.2.1 寻找main函数 372
A.2.2 main()函数分析 377
A.2.3 dword_5F3088分析 381
A.2.4 a1分析 383
A.2.5 获取Flag 383
A.2.6 编写脚本 384
A.2.7 解决反编译失败问题 385
A.3 动态分析 388
A.3.1 选择调试器 389
A.3.2 跟踪程序 389
A.4 后记 391
思考题 393
附录B 恶意程序逆向分析示例 394
B.1 静态分析 394
B.1.1 查壳 394
B.1.2 查看导入函数 395
B.1.3 查看关键字符串 395
B.1.4 查找程序入口 396
B.2 动态分析 396
B.2.1 观察程序行为 396
B.2.2 分析程序行为 397
B.3 程序修复 405
思考题 408
附录C Android程序逆向分析示例 409
C.1 静态分析 409
C.1.1 定位程序入口 409
C.1.2 定位错误提示 410
C.1.3 函数securityCheck分析 411
C.2 动态分析 412
C.2.1 “.so”文件的加载过程 413
C.2.2 init_array分析 413
C.2.3 JNI_OnLoad分析 415
C.2.4 在JNI_OnLoad中设置断点 418
C.2.5 在securityCheck中设置断点 424
思考题 424
评论
还没有评论。