二进制分析实战
全新正版 极速发货
¥
82.23
6.3折
¥
129.8
全新
库存9件
作者(荷)丹尼斯·安德里斯
出版社人民邮电出版社
ISBN9787115556936
出版时间2021-10
装帧平装
开本16开
定价129.8元
货号1202507216
上书时间2024-09-05
商品详情
- 品相描述:全新
- 商品描述
-
目录
部分二进制格式
章二进制简介2
1.1C编译过程3
1.1.1预处理阶段3
1.1.2编译阶段5
1.1.3汇编阶段6
1.1.4链接阶段7
1.2符号和剥离的二进制文件9
1.2.1查看符号信息9
1.2.2剥离二进制文件10
1.3反汇编二进制文件11
1.3.1查看对象文件11
1.3.2检查完整的二进制执行体13
1.4加载并执行二进制文件17
1.5总结19
1.6练习19
第2章ELF格式20
2.1ELF头部22
2.1.1e_ident数组22
2.1.2e_type、e_machine及e_version字段24
2.1.3e_entry字段24
2.1.4e_phoff和e_shoff字段25
2.1.5e_flags字段25
2.1.6e_ehsize字段25
2.1.7e_*entsize和e_*num字段25
2.1.8e_shstrndx字段26
2.2节头26
2.2.1sh_name字段27
2.2.2sh_type字段28
2.2.3sh_flags字段28
2.2.4sh_addr、sh_offset及sh_size字段29
2.2.5sh_link字段29
2.2.6sh_info字段29
2.2.7sh_addralign字段29
2.2.8sh_entsize字段29
2.3节30
2.3.1.init和.fini节31
2.3.2.text节31
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.1p_type字段41
2.4.2p_flags字段42
2.4.3p_offset、p_vaddr、p_paddr、p_filesz及p_memsz字段42
2.4.4p_align字段42
2.5总结42
2.6练习43
第3章PE格式简介44
3.1MS-DOS头和MS-DOS存根45
3.2PE签名、PF文件头及PE可选头46
3.2.1PE签名48
3.2.2PE文件头48
3.2.3PE可选头48
3.3节表49
3.4节49
3.4.1.edata和.idata节50
3.4.2PE代码节的填充51
3.5总结51
3.6练习51
第4章使用libbfd创建二进制加载器53
4.1什么是libbfd53
4.2一个简单的二进制加载接口54
4.2.1Binary类56
4.2.2Section类57
4.2.3Symbol类57
4.3实现二进制加载器57
4.3.1初始化libbfd并打开二进制文件58
4.3.2解析基础二进制属性60
4.3.3加载符号63
4.3.4加载节信息66
4.4测试二进制加载器68
4.5总结71
4.6练习71
第二部分二进制分析基础
第5章Linux二进制分析74
5.1使用file解决类型问题75
5.2使用ldd探索依赖性77
5.3使用xxd查看文件内容79
5.4使用readelf解析并提取ELF库文件81
5.5使用nm解析符号83
5.6使用strings查看Hints86
5.7使用strace和ltrace跟踪系统调用和库文件调用88
5.8使用objdump检查指令集行为93
5.9使用GDB转储动态字符串缓冲区95
5.10总结97
5.11练习97
第6章反汇编与二进制分析基础98
6.1静态反汇编98
6.1.1线性反汇编99
6.1.2递归反汇编101
6.2动态反汇编104
6.2.1示例:使用GDB跟踪二进制执行105
6.2.2代码覆盖策略108
6.3构建反汇编代码和数据111
6.3.1构建代码112
6.3.2构建数据118
6.3.3反编译119
6.3.4中间语言121
6.4基本分析方法123
6.4.1二进制分析的特性123
6.4.2控制流分析127
6.4.3数据流分析129
6.5编译器设置对反汇编的影响132
6.6总结133
6.7练习134
第7章简单的ELF代码注入技术135
7.1使用十六进制编辑器修改裸机二进制文件135
7.1.1在操作中观察off-by-one漏洞136
7.1.2修复off-by-one漏洞139
7.2使用LD_PRELOAD修改共享库行为142
7.2.1堆溢出漏洞143
7.2.2检测堆溢出145
7.3注入代码节148
7.3.1注入ELF节:不错概述149
7.3.2使用elfinject注入ELF节151
7.4调用注入的代码155
7.4.1入口点修改155
7.4.2劫持构造函数和析构函数158
7.4.3劫持GOT条目161
7.4.4劫持PLT条目164
7.4.5重定向直接调用和间接调用165
7.5总结166
7.6练习166
第三部分不错二进制分析
第8章自定义反汇编168
8.1为什么要自定义反汇编过程168
8.1.1一个自定义反汇编实例:代码混淆169
8.1.2编写自定义反汇编器的其他原因171
8.2Capstone介绍172
8.2.1Capstone安装173
8.2.2Capstone线性反汇编174
8.2.3研究CapstoneC的API179
8.2.4使用Capstone编写递归反汇编器180
8.3实现一个ROP小工具扫描器188
8.3.1返回导向式编程简介189
8.3.2寻找ROP的“gadget”190
8.4总结196
8.5练习197
第9章二进制插桩198
9.1什么是二进制插桩198
9.1.1二进制插桩的相关API199
9.1.2静态二进制插桩和动态二进制插桩的对比199
9.2静态二进制插桩201
9.2.1int3方法201
9.2.2跳板方法203
9.3动态二进制插桩207
9.3.1DBI系统的体系结构207
9.3.2Pin介绍209
9.4使用Pin进行分析210
9.4.1Profiler的数据结构和创建代码210
9.4.2解析函数符号213
9.4.3插桩基本块214
9.4.4检测控制流指令216
9.4.5指令、控制转移及系统调用计数219
9.4.6测试Profiler220
9.5用Pin自动对二进制文件脱壳224
9.5.1可执行文件加壳器简介224
9.5.2脱壳器的配置代码及其使用的数据结构225
9.5.3对内存写入插桩228
9.5.4插桩控制流指令229
9.5.5跟踪内存写入229
9.5.6检测原始入口点并转储脱壳二进制文件230
9.5.7测试脱壳器231
9.6总结236
9.7练习236
0章动态污点分析的原理237
10.1什么是DTA237
10.2DTA三步:污点源、污点槽及污点传播238
10.2.1定义污点源238
10.2.2定义污点槽239
10.2.3追踪污点传播239
10.3使用DTA检测心脏滴血漏洞239
10.3.1心脏滴血漏洞概述239
10.3.2通过污点分析检测心脏滴血漏洞241
10.4DTA设计因素:污点粒度、污点颜色及污点传播策略242
10.4.1污点粒度243
10.4.2污点颜色244
10.4.3污点传播策略244
10.4.4过污染和欠污染246
10.4.5控制依赖246
10.4.6影子内存247
10.5总结249
10.6练习249
1章基于libdft的动态污点分析250
11.1libdft简介250
11.1.1libdft的内部结构251
11.1.2污点传播策略指令253
11.2使用DTA检测远程控制流劫持攻击254
11.2.1检查污点信息257
11.2.2污点源:将收到的字节标记为污点258
11.2.3检查点:检查execve参数260
11.2.4检测控制流劫持攻击261
11.3用隐式流绕过DTA266
11.4基于DTA的数据泄露检测器268
11.4.1污点源:追踪打开文件的污点270
11.4.2检查点:监控泄露数据的网络发送273
11.4.3检测数据泄露275
11.5总结277
11.6练习277
2章符号执行原理278
12.1符号执行概述278
12.1.1符号执行与正常执行的对比279
12.1.2符号执行的变体和局限282
12.1.3提高符号执行的可扩展性286
12.2使用Z3进行约束求解288
12.2.1证明指令的可达性288
12.2.2证明指令的不可达性291
12.2.3证明公式的永真性292
12.2.4简化表达式293
12.2.5使用位向量对机器码建立约束模型294
12.2.6用位向量求解不透明谓词296
12.3总结296
12.4练习297
3章使用Triton实现符号执行298
13.1Triton的介绍298
13.2使用抽象语法树维护符号状态299
13.2.1完整的抽象语法树301
13.2.2使用引用的抽象语法树301
13.3使用Triton进行后向切片302
13.3.1Triton的头文件以及相关配置304
13.3.2符号化配置文件305
13.3.3模拟指令306
13.3.4设置Triton的体系结构307
13.3.5计算后向切片308
13.4使用Triton提升代码覆盖率310
13.4.1创建符号变量312
13.4.2寻找新路径的解313
13.4.3测试代码覆盖工具316
13.5漏洞利用自动化319
13.5.1包含脆弱调用点的程序320
13.5.2查找脆弱调用点的地址323
13.5.3构建漏洞利用生成器325
13.5.4获取root权限的Shell331
13.6总结334
13.7练习334
第四部分附录
附录Ax86汇编快速入门336
A.1汇编程序的布局336
A.1.1汇编指令、伪指令、标号及注释337
A.1.2代码与数据分离338
A.1.3AT&T和Intel语法339
A.2x86指令结构339
A.2.1x86指令的汇编层表示339
A.2.2x86指令的机器级结构339
A.2.3寄存器操作数340
A.2.4内存操作数342
A.2.5立即数343
A.3常见的x86指令343
A.3.1比较操作数和设置状态标志位344
A.3.2实现系统调用345
A.3.3实现条件跳转345
A.3.4加载内存地址345
A.4汇编的通用代码构造345
A.4.1栈346
A.4.2函数调用与函数栈帧347
A.4.3条件分支351
A.4.4循环352
附录B使用libelf实现PT_NOTE覆盖354
B.1请求头354
B.2elfinject使用的数据结构355
B.3初始化libelf356
B.4获取可执行头360
B.5查找PT_NOTE段360
B.6注入代码362
B.7为注入的节对齐加载地址362
B.8覆盖.note.ABI-tag节头363
B.9设置注入节的名称367
B.10覆盖PT_NOTE程序头369
B.11修改入口点372
附录C二进制分析工具清单373
C.1反汇编工具373
C.1.1IDAPro(Windows、Linux、macOS)373
C.1.2Hopper(Linux、macOS)373
C.1.3ODA(所有操作系统)374
C.1.4BinaryNinja(Windows、Linux、macOS)374
C.1.5Relyze(Windows)374
C.1.6Medusa(Windows、Linux)374
C.1.7radare(Windows、Linux、macOS)374
C.1.8objdump(Linux、macOS)374
C.2调试器374
C.2.1GDB(Linux)374
C.2.2OllyDbg(Windows)375
C.2.3Windbg(Windows)375
C.2.4Bochs(Windows、Linux、macOS)375
C.3反汇编框架375
C.3.1Capstone(Windows、Linux、macOS)375
C.3.2distorm3(Windows、Linux、macOS)375
C.3.3udis86(Linux、macOS)375
C.4二进制分析框架376
C.4.1angr(Windows、Linux、macOS)376
C.4.2Pin(Windows、Linux、macOS)376
C.4.3Dyninst(Windows、Linux)376
C.4.4Unicorn(Windows、Linux、macOS)376
C.4.5libdft(Linux)376
C.4.6Triton(Windows、Linux、macOS)376
内容摘要
二进制分析是分析计算机二进制程序(称为二进制文件)及其包含的机器代码和数据属性的科学和艺术。二进制分析的目标是确定二进制程序的真正属性,以理解它们真正的功能。本书是为安全工程师编写的,涉及二进制分析和检测的相关内容。本书首先介绍了二进制分析的基本概念和二进制格式,然后讲解了如何使用GNU/Linux二进制分析工具链、反汇编和代码注入这样的技术来分析二进制文件,很后介绍了使用Pin构建二进制插桩的方法以及使用libdft构建动态污点分析工具的方法等。本书适合安全工程师、学术安全研究人员、逆向工程师、恶意软件分析师和对二进制分析感兴趣的计算机科学专业的学生阅读。
主编推荐
1.本书面向安全工程师,对二进制分析和插桩等方向的一些有趣问题进行了介绍,帮助读者提升二进制分析技术。
2.本书各章后面的练习有助于读者深入掌握相关知识,无论是基本的汇编知识,还是复杂的二进制插桩及分析实践。
3.本书内容详细,从二进制分析的基本概念和二进制格式开始介绍,主要包括以下内容:
解析ELF和PE二进制,并基于libbfd构建二进制加载器;
通过代码注入和二进制编辑来修改ELF文件;
基于Capstone构建自定义反汇编工具;
使用二进制插桩来绕过常用的反分析技术;
应用污点分析来检测控制流劫持和数据泄露;
使用符号执行来构建自动化利用工具。
媒体评论
“安德里斯是二进制分析领域的专业人士,能够以简单的方式解释很好复杂的理论,同时十分具有专业性。”
——赫伯·博斯,系统与网络安全专业的教授
— 没有更多了 —
以下为对购买帮助不大的评价