商品详情
书名:二进制分析实战
定*:129.8
ISBN:9787**5556936
作者:丹尼斯·安德里斯
版次:第*版
出版时间:202*-*0
内容提要:
如今,读者可以找到许多关于汇编的书籍,甚*可以找到更多有关ELF和PE二进制格式的说明。关于信息流跟踪和符号执行也有大量的文章。但是,没有哪本书可以向读者展示从理解基本汇编知识到进行*级二进制分析的*过程。也没有哪本书可以向读者展示如何插桩二进制程序、如何使用动态污点分析来跟踪程序执行过程中的数据或使用符号执行来自动生成漏洞利用程序。换句话说,直到*,没有*本书可以教你二进制分析所需的技术、工具和思维方式。
作者简介:
丹尼斯·安德里斯,系统与网络**业的博士,主要研究二进制分析*域。丹尼斯·安德里斯是PathArmor(*个控制流完整性分析系统,可抵抗诸如ROP这样的控制流劫持攻击)的主要开发人员,还是参与攻破“GameOver Zeus”僵尸网络的主要攻手之*。
目录:
目 录
第 **分 二进制格式
第 *章 二进制简介 2
*.* C编译过程 3
*.*.* 预处理*段 3
*.*.2 编译*段 5
*.*.3 汇编*段 6
*.*.4 **段 7
*.2 符号和剥离的二进制文件 9
*.2.* 查看符号信息 9
*.2.2 剥离二进制文件 *0
*.3 反汇编二进制文件 **
*.3.* 查看对象文件 **
*.3.2 检查完整的二进制执行体 *3
*.4 加载并执行二进制文件 *7
*.5 总结 *9
*.6 练习 *9
第 2章 ELF格式 20
2.* ELF头* 22
2.*.* e_ident数组 22
2.*.2 e_type、e_machine及e_version字段 24
2.*.3 e_entry字段 24
2.*.4 e_phoff和e_shoff字段 25
2.*.5 e_flags字段 25
2.*.6 e_ehsize字段 25
2.*.7 e_*entsize和e_*num字段 25
2.*.8 e_shstrndx字段 26
2.2 节头 26
2.2.* sh_name字段 27
2.2.2 sh_type字段 28
2.2.3 sh_flags字段 28
2.2.4 sh_addr、sh_offset及sh_size字段 29
2.2.5 sh_link字段 29
2.2.6 sh_info字段 29
2.2.7 sh_addralign字段 29
2.2.8 sh_entsize字段 29
2.3 节 30
2.3.* .init和.fini节 3*
2.3.2 .text节 3*
2.3.3 .bss、.data及.rodata节 33
2.3.4 延迟绑定和.plt、.got及.got.plt节 33
2.3.5 .rel.*和.rela.*节 36
2.3.6 .dynamic节 37
2.3.7 .init_array和.fini_array节 38
2.3.8 .shstrtab、.symtab、.strtab、.dynsym及.dynstr节 39
2.4 程序头 40
2.4.* p_type字段 4*
2.4.2 p_flags字段 42
2.4.3 p_offset、p_vaddr、p_paddr、p_filesz及p_memsz字段 42
2.4.4 p_align字段 42
2.5 总结 42
2.6 练习 43
第3章 PE格式简介 44
3.* MS-DOS头和MS-DOS存根 45
3.2 PE签名、PF文件头及PE可选头 46
3.2.* PE签名 48
3.2.2 PE文件头 48
3.2.3 PE可选头 48
3.3 节表 49
3.4 节 49
3.4.* .edata和.idata节 50
3.4.2 PE代码节的填充 5*
3.5 总结 5*
3.6 练习 5*
第4章 使用libbfd*建二进制加载器 53
4.* 什么是libbfd 53
4.2 *个简单的二进制加载接口 54
4.2.* Binary类 56
4.2.2 Section类 57
4.2.3 Symbol类 57
4.3 实现二进制加载器 57
4.3.* 初始化libbfd并打开二进制文件 58
4.3.2 解析基础二进制属性 60
4.3.3 加载符号 63
4.3.4 加载节信息 66
4.4 测试二进制加载器 68
4.5 总结 7*
4.6 练习 7*
第二*分 二进制分析基础
第5章 Linux二进制分析 74
5.* 使用file解决类型问题 75
5.2 使用ldd探索依赖性 77
5.3 使用xxd查看文件内容 79
5.4 使用readelf解析并提取ELF库文件 8*
5.5 使用nm解析符号 83
5.6 使用strings查看Hints 86
5.7 使用strace和ltrace跟踪系统调用和库文件调用 88
5.8 使用objdump检查指令集行为 93
5.9 使用GDB转储动态字符串缓冲区 95
5.*0 总结 97
5.** 练习 97
第6章 反汇编与二进制分析基础 98
6.* 静态反汇编 98
6.*.* 线性反汇编 99
6.*.2 递归反汇编 *0*
6.2 动态反汇编 *04
6.2.* 示例:使用GDB跟踪二进 制执行 *05
6.2.2 代码覆盖策略 *08
6.3 构建反汇编代码和数据 ***
6.3.* 构建代码 **2
6.3.2 构建数据 **8
6.3.3 反编译 **9
6.3.4 中间语言 *2*
6.4 基本分析方法 *23
6.4.* 二进制分析的*性 *23
6.4.2 控制流分析 *27
6.4.3 数据流分析 *29
6.5 编译器设置对反汇编的影响 *32
6.6 总结 *33
6.7 练习 *34
第7章 简单的ELF代码注入技术 *35
7.* 使用十六进制编辑器修改裸机二进制文件 *35
7.*.* 在操作中观察off-by-one漏洞 *36
7.*.2 修复off-by-one漏洞 *39
7.2 使用LD_PRELOAD修改共享库行为 *42
7.2.* 堆溢出漏洞 *43
7.2.2 检测堆溢出 *45
7.3 注入代码节 *48
7.3.* 注入ELF节:*级概述 *49
7.3.2 使用elfinject注入ELF节 *5*
7.4 调用注入的代码 *55
7.4.* 入口点修改 *55
7.4.2 劫持构造函数和析构函数 *58
7.4.3 劫持GOT条目 *6*
7.4.4 劫持PLT条目 *64
7.4.5 重定向直接调用和间接调用 *65
7.5 总结 *66
7.6 练习 *66
第三*分 *级二进制分析
第8章 自定义反汇编 *68
8.* 为什么要自定义反汇编过程 *68
8.*.* *个自定义反汇编实例:代码混淆 *69
8.*.2 编写自定义反汇编器的其他原因 *7*
8.2 Capstone介绍 *72
8.2.* Capstone安装 *73
8.2.2 Capstone线性反汇编 *74
8.2.3 研究Capstone C的API *79
8.2.4 使用Capstone编写递归反汇编器 *80
8.3 实现*个ROP小工具扫描器 *88
8.3.* 返回导向式编程简介 *89
8.3.2 寻找ROP的“gadget” *90
8.4 总结 *96
8.5 练习 *97
第9章 二进制插桩 *98
9.* 什么是二进制插桩 *98
9.*.* 二进制插桩的相关API *99
9.*.2 静态二进制插桩和动态二进制插桩的对比 *99
9.2 静态二进制插桩 20*
9.2.* int 3方法 20*
9.2.2 跳板方法 203
9.3 动态二进制插桩 207
9.3.* DBI系统的体系结构 207
9.3.2 Pin介绍 209
9.4 使用Pin进行分析 2*0
9.4.* Profiler的数据结构和*建代码 2*0
9.4.2 解析函数符号 2*3
9.4.3 插桩基本块 2*4
9.4.4 检测控制流指令 2*6
9.4.5 指令、控制转移及系统调用计数 2*9
9.4.6 测试Profiler 220
9.5 用Pin自动对二进制文件脱壳 224
9.5.* 可执行文件加壳器简介 224
9.5.2 脱壳器的配置代码及其使用的数据结构 225
9.5.3 对内存写入插桩 228
9.5.4 插桩控制流指令 229
9.5.5 跟踪内存写入 229
9.5.6 检测原始入口点并转储脱壳二进制文件 230
9.5.7 测试脱壳器 23*
9.6 总结 236
9.7 练习 236
第 *0章 动态污点分析的原理 237
*0.* 什么是DTA 237
*0.2 DTA三步:污点源、污点槽及污点传播 238
*0.2.* 定义污点源 238
*0.2.2 定义污点槽 239
*0.2.3 追踪污点传播 239
*0.3 使用DTA检测心脏滴血漏洞 239
*0.3.* 心脏滴血漏洞概述 239
*0.3.2 通过污点分析检测心脏滴血漏洞 24*
*0.4 DTA设计因素:污点粒度、污点颜色及污点传播策略 242
*0.4.* 污点粒度 243
*0.4.2 污点颜色 244
*0.4.3 污点传播策略 244
*0.4.4 过污染和欠污染 246
*0.4.5 控制依赖 246
*0.4.6 影子内存 247
*0.5 总结 249
*0.6 练习 249
第 **章 基于libdft的动态污点分析 250
**.* libdft简介 250
**.*.* libdft的内*结构 25*
**.*.2 污点传播策略指令 253
**.2 使用DTA检测远程控制流劫持攻击 254
**.2.* 检查污点信息 257
**.2.2 污点源:将收到的字节标记为污点 258
**.2.3 检查点:检查execve参数 260
**.2.4 检测控制流劫持攻击 26*
**.3 用隐式流绕过DTA 266
**.4 基于DTA的数据泄露检测器 268
**.4.* 污点源:追踪打开文件的污点 270
**.4.2 检查点:监控泄露数据的网络发送 273
**.4.3 检测数据泄露 275
**.5 总结 277
**.6 练习 277
第 *2章 符号执行原理 278
*2.* 符号执行概述 278
*2.*.* 符号执行与正常执行的对比 279
*2.*.2 符号执行的变体和局限 282
*2.*.3 提*符号执行的可扩展性 286
*2.2 使用Z3进行约束求解 288
*2.2.* 证明指令的可达性 288
*2.2.2 证明指令的*可达性 29*
*2.2.3 证明公式的*真性 292
*2.2.4 简化表达式 293
*2.2.5 使用位向量对机器码建立约束模型 294
*2.2.6 用位向量求解*透明谓词 296
*2.3 总结 296
*2.4 练习 297
第 *3章 使用Triton实现符号执行 298
*3.* Triton的介绍 298
*3.2 使用抽象语法树维护符号状态 299
*3.2.* 完整的抽象语法树 30*
*3.2.2 使用引用的抽象语法树 30*
*3.3 使用Triton进行后向切片 302
*3.3.* Triton的头文件以及相关配置 304
*3.3.2 符号化配置文件 305
*3.3.3 模拟指令 306
*3.3.4 设置Triton的体系结构 307
*3.3.5 计算后向切片 308
*3.4 使用Triton提*代码覆盖率 3*0
*3.4.* *建符号变量 3*2
*3.4.2 寻找新路径的解 3*3
*3.4.3 测试代码覆盖工具 3*6
*3.5 漏洞利用自动化 3*9
*3.5.* *含脆弱调用点的程序 320
*3.5.2 查找脆弱调用点的地址 323
*3.5.3 构建漏洞利用生成器 325
*3.5.4 获取root权限的Shell 33*
*3.6 总结 334
*3.7 练习 334
第四*分 附录
附录A x86汇编快速入门 336
A.* 汇编程序的布局 336
A.*.* 汇编指令、伪指令、标号及注释 337
A.*.2 代码与数据分离 338
A.*.3 AT&T和Intel语法 339
A.2 x86指令结构 339
A.2.* x86指令的汇编层表示 339
A.2.2 x86指令的机器级结构 339
A.2.3 寄存器操作数 340
A.2.4 内存操作数 342
A.2.5 立*数 343
A.3 常见的x86指令 343
A.3.* 比较操作数和设置状态标志位 344
A.3.2 实现系统调用 345
A.3.3 实现条件跳转 345
A.3.4 加载内存地址 345
A.4 汇编的通用代码构造 345
A.4.* 栈 346
A.4.2 函数调用与函数栈帧 347
A.4.3 条件分支 35*
A.4.4 循环 352
附录B 使用libelf实现PT_NOTE覆盖 354
B.* 请求头 354
B.2 elfinject使用的数据结构 355
B.3 初始化libelf 356
B.4 获取可执行头 360
B.5 查找PT_NOTE段 360
B.6 注入代码 362
B.7 为注入的节对齐加载地址 362
B.8 覆盖.note.ABI-tag节头 363
B.9 设置注入节的名称 367
B.*0 覆盖PT_NOTE程序头 369
B.** 修改入口点 372
附录C 二进制分析工具清单 373
C.* 反汇编工具 373
C.*.* IDA Pro(Windows、Linux、macOS) 373
C.*.2 Hopper(Linux、macOS) 373
C.*.3 ODA(所有操作系统) 374
C.*.4 Binary Ninja(Windows、Linux、macOS) 374
C.*.5 Relyze(Windows) 374
C.*.6 Medusa(Windows、Linux) 374
C.*.7 radare(Windows、Linux、macOS) 374
C.*.8 objdump(Linux、macOS) 374
C.2 调试器 374
C.2.* GDB(Linux) 374
C.2.2 OllyDbg(Windows) 375
C.2.3 Windbg(Windows) 375
C.2.4 Bochs(Windows、Linux、macOS) 375
C.3 反汇编框架 375
C.3.* Capstone(Windows、Linux、macOS ) 375
C.3.2 distorm3(Windows、Linux、macOS) 375
C.3.3 udis86(Linux、macOS) 375
C.4 二进制分析框架 376
C.4.* angr(Windows、Linux、macOS) 376
C.4.2 Pin(Windows、Linux、macOS) 376
C.4.3 Dyninst(Windows、Linux) 376
C.4.4 Unicorn(Windows、Linux、macOS) 376
C.4.5 libdft(Linux) 376
C.4.6 Triton(Windows、Linux、macOS) 376
- 人民邮电出版社有限公司 (微信公众号认证)
- 人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...