万本电子书0元读

万本电子书0元读

顶部广告

二进制分析实战电子书

1.本书面向安全工程师,对二制分析和插桩等方向的一些有趣问题行了介绍,帮助读者提升二制分析技术。 2.本书各章后面的练习有助于读者深掌握相关知识,无论是基本的汇编知识,还是复杂的二制插桩及分析实践。 3.本书内容详细,从二制分析的基本概念和二制格式始介绍,主要包括以下内容: 解析ELF和PE二制,并基于libbfd构建二制加载器; 通过代码注和二制编辑来修改ELF文件;

售       价:¥

纸质售价:¥97.30购买纸书

199人正在读 | 0人评论 6.2

作       者:丹尼斯·安德里斯(Dennis Andriesse) 著

出  版  社:人民邮电出版社有限公司

出版时间:2021-10-01

字       数:38.0万

所属分类: 科技 > 计算机/网络 > 多媒体/数据通信

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
如今,读者可以找到许多关于汇编的书籍,甚至可以找到更多有关ELF和PE二制格式的说明。关于信息流跟踪和符号执行也有大量的文章。但是,没有哪本书可以向读者展示从理解基本汇编知识到行高级二制分析的全过程。也没有哪本书可以向读者展示如何插桩二制程序、如何使用动态污分析来跟踪程序执行过程中的数据或使用符号执行来自动生成漏洞利用程序。换句话说,直到现在,没有一本书可以教你二制分析所需的技术、工具和思维方式。<br/>【推荐语】<br/>1.本书面向安全工程师,对二制分析和插桩等方向的一些有趣问题行了介绍,帮助读者提升二制分析技术。 2.本书各章后面的练习有助于读者深掌握相关知识,无论是基本的汇编知识,还是复杂的二制插桩及分析实践。 3.本书内容详细,从二制分析的基本概念和二制格式始介绍,主要包括以下内容: 解析ELF和PE二制,并基于libbfd构建二制加载器; 通过代码注和二制编辑来修改ELF文件; 基于Capstone构建自定义反汇编工具; 使用二制插桩来绕过常用的反分析技术; 应用污分析来检测控制流劫持和数据泄露; 使用符号执行来构建自动化利用工具。<br/>【作者】<br/>丹尼斯·安德里斯,系统与网络安全专业的博士,主要研究二制分析领域。丹尼斯·安德里斯是PathArmor(一个控制流完整性分析系统,可抵抗诸如ROP这样的控制流劫持攻)的主要发人员,还是参与攻破“GameOver Zeus”僵尸网络的主要攻手之一。<br/>
目录展开

版 权

版权声明

内容提要

致 谢

作者序

前 言

第一部分 二进制格式

第1章 二进制简介

1.1 C编译过程

1.1.1 预处理阶段

1.1.2 编译阶段

1.1.3 汇编阶段

1.1.4 链接阶段

1.2 符号和剥离的二进制文件

1.2.1 查看符号信息

1.2.2 剥离二进制文件

1.3 反汇编二进制文件

1.3.1 查看对象文件

1.3.2 检查完整的二进制执行体

1.4 加载并执行二进制文件

1.5 总结

1.6 练习

第2章 ELF格式

2.1 ELF头部

2.1.1 e_ident数组

2.1.2 e_type、e_machine及e_version字段

2.1.3 e_entry字段

2.1.4 e_phoff和e_shoff字段

2.1.5 e_flags字段

2.1.6 e_ehsize字段

2.1.7 e_*entsize和e_*num字段

2.1.8 e_shstrndx字段

2.2 节头

2.2.1 sh_name字段

2.2.2 sh_type字段

2.2.3 sh_flags字段

2.2.4 sh_addr、sh_offset及sh_size字段

2.2.5 sh_link字段

2.2.6 sh_info字段

2.2.7 sh_addralign字段

2.2.8 sh_entsize字段

2.3 节

2.3.1 .init和.fini节

2.3.2 .text节

2.3.3 .bss、.data及.rodata节

2.3.4 延迟绑定和.plt、.got及.got.plt节

2.3.5 .rel.*和.rela.*节

2.3.6 .dynamic节

2.3.7 .init_array和.fini_array节

2.3.8 .shstrtab、.symtab、.strtab、.dynsym及.dynstr节

2.4 程序头

2.4.1 p_type字段

2.4.2 p_flags字段

2.4.3 p_offset、p_vaddr、p_paddr、p_filesz及p_memsz字段

2.4.4 p_align字段

2.5 总结

2.6 练习

第3章 PE格式简介

3.1 MS-DOS头和MS-DOS存根

3.2 PE签名、PF文件头及PE可选头

3.2.1 PE签名

3.2.2 PE文件头

3.2.3 PE可选头

3.3 节表

3.4 节

3.4.1 .edata和.idata节

3.4.2 PE代码节的填充

3.5 总结

3.6 练习

第4章 使用libbfd创建二进制加载器

4.1 什么是libbfd

4.2 一个简单的二进制加载接口

4.2.1 Binary类

4.2.2 Section类

4.2.3 Symbol类

4.3 实现二进制加载器

4.3.1 初始化libbfd并打开二进制文件

4.3.2 解析基础二进制属性

4.3.3 加载符号

4.3.4 加载节信息

4.4 测试二进制加载器

4.5 总结

4.6 练习

第二部分 二进制分析基础

第5章 Linux二进制分析

5.1 使用file解决类型问题

5.2 使用ldd探索依赖性

快速查找ASCII值

5.3 使用xxd查看文件内容

5.4 使用readelf解析并提取ELF库文件

5.5 使用nm解析符号

5.6 使用strings查看Hints

5.7 使用strace和ltrace跟踪系统调用和库文件调用

5.8 使用objdump检查指令集行为

5.9 使用GDB转储动态字符串缓冲区

5.10 总结

5.11 练习

第6章 反汇编与二进制分析基础

6.1 静态反汇编

6.1.1 线性反汇编

6.1.2 递归反汇编

6.2 动态反汇编

6.2.1 示例:使用GDB跟踪二进制执行

6.2.2 代码覆盖策略

6.3 构建反汇编代码和数据

6.3.1 构建代码

使用.eh_frame节进行函数检测

6.3.2 构建数据

6.3.3 反编译

6.3.4 中间语言

6.4 基本分析方法

6.4.1 二进制分析的特性

6.4.2 控制流分析

6.4.3 数据流分析

6.5 编译器设置对反汇编的影响

6.6 总结

6.7 练习

第7章 简单的ELF代码注入技术

7.1 使用十六进制编辑器修改裸机二进制文件

寻找正确的硬编码

7.1.1 在操作中观察off-by-one漏洞

7.1.2 修复off-by-one漏洞

7.2 使用LD_PRELOAD修改共享库行为

7.2.1 堆溢出漏洞

7.2.2 检测堆溢出

7.3 注入代码节

7.3.1 注入ELF节:高级概述

7.3.2 使用elfinject注入ELF节

7.4 调用注入的代码

7.4.1 入口点修改

7.4.2 劫持构造函数和析构函数

7.4.3 劫持GOT条目

7.4.4 劫持PLT条目

7.4.5 重定向直接调用和间接调用

7.5 总结

7.6 练习

第三部分 高级二进制分析

第8章 自定义反汇编

8.1 为什么要自定义反汇编过程

8.1.1 一个自定义反汇编实例:代码混淆

非混淆二进制文件中的重叠代码

8.1.2 编写自定义反汇编器的其他原因

8.2 Capstone介绍

8.2.1 Capstone安装

8.2.2 Capstone线性反汇编

8.2.3 研究Capstone C 的API

8.2.4 使用Capstone编写递归反汇编器

8.3 实现一个ROP小工具扫描器

8.3.1 返回导向式编程简介

8.3.2 寻找ROP的“gadget”

8.4 总结

8.5 练习

第9章 二进制插桩

9.1 什么是二进制插桩

9.1.1 二进制插桩的相关API

9.1.2 静态二进制插桩和动态二进制插桩的对比

9.2 静态二进制插桩

9.2.1 int 3方法

9.2.2 跳板方法

位置无关代码中的跳板

9.3 动态二进制插桩

9.3.1 DBI系统的体系结构

9.3.2 Pin介绍

9.4 使用Pin进行分析

9.4.1 Profiler的数据结构和创建代码

9.4.2 解析函数符号

9.4.3 插桩基本块

9.4.4 检测控制流指令

9.4.5 指令、控制转移及系统调用计数

9.4.6 测试Profiler

9.5 用Pin自动对二进制文件脱壳

9.5.1 可执行文件加壳器简介

9.5.2 脱壳器的配置代码及其使用的数据结构

9.5.3 对内存写入插桩

9.5.4 插桩控制流指令

9.5.5 跟踪内存写入

9.5.6 检测原始入口点并转储脱壳二进制文件

9.5.7 测试脱壳器

9.6 总结

9.7 练习

第10章 动态污点分析的原理

10.1 什么是DTA

10.2 DTA三步:污点源、污点槽及污点传播

10.2.1 定义污点源

10.2.2 定义污点槽

10.2.3 追踪污点传播

10.3 使用DTA检测心脏滴血漏洞

10.3.1 心脏滴血漏洞概述

10.3.2 通过污点分析检测心脏滴血漏洞

10.4 DTA设计因素:污点粒度、污点颜色及污点传播策略

10.4.1 污点粒度

10.4.2 污点颜色

10.4.3 污点传播策略

10.4.4 过污染和欠污染

10.4.5 控制依赖

10.4.6 影子内存

10.5 总结

10.6 练习

第11章 基于libdft的动态污点分析

11.1 libdft简介

11.1.1 libdft的内部结构

11.1.2 污点传播策略指令

11.2 使用DTA检测远程控制流劫持攻击

11.2.1 检查污点信息

11.2.2 污点源:将收到的字节标记为污点

11.2.3 检查点:检查execve参数

11.2.4 检测控制流劫持攻击

11.3 用隐式流绕过DTA

11.4 基于DTA的数据泄露检测器

11.4.1 污点源:追踪打开文件的污点

11.4.2 检查点:监控泄露数据的网络发送

11.4.3 检测数据泄露

11.5 总结

11.6 练习

第12章 符号执行原理

12.1 符号执行概述

12.1.1 符号执行与正常执行的对比

12.1.2 符号执行的变体和局限

12.1.3 提高符号执行的可扩展性

12.2 使用Z3进行约束求解

12.2.1 证明指令的可达性

12.2.2 证明指令的不可达性

12.2.3 证明公式的永真性

12.2.4 简化表达式

12.2.5 使用位向量对机器码建立约束模型

12.2.6 用位向量求解不透明谓词

12.3 总结

12.4 练习

第13章 使用Triton实现符号执行

13.1 Triton的介绍

13.2 使用抽象语法树维护符号状态

13.2.1 完整的抽象语法树

13.2.2 使用引用的抽象语法树

13.3 使用Triton进行后向切片

13.3.1 Triton的头文件以及相关配置

13.3.2 符号化配置文件

13.3.3 模拟指令

13.3.4 设置Triton的体系结构

13.3.5 计算后向切片

13.4 使用Triton提升代码覆盖率

13.4.1 创建符号变量

13.4.2 寻找新路径的解

13.4.3 测试代码覆盖工具

13.5 漏洞利用自动化

13.5.1 包含脆弱调用点的程序

13.5.2 查找脆弱调用点的地址

13.5.3 构建漏洞利用生成器

13.5.4 获取root权限的Shell

13.6 总结

13.7 练习

第四部分 附录

附录A x86汇编快速入门

A.1 汇编程序的布局

A.1.1 汇编指令、伪指令、标号及注释

A.1.2 代码与数据分离

A.1.3 AT&T和Intel语法

A.2 x86指令结构

A.2.1 x86指令的汇编层表示

A.2.2 x86指令的机器级结构

A.2.3 寄存器操作数

A.2.4 内存操作数

A.2.5 立即数

A.3 常见的x86指令

A.3.1 比较操作数和设置状态标志位

A.3.2 实现系统调用

A.3.3 实现条件跳转

A.3.4 加载内存地址

A.4 汇编的通用代码构造

A.4.1 栈

A.4.2 函数调用与函数栈帧

A.4.3 条件分支

A.4.4 循环

附录B 使用libelf实现PT_NOTE覆盖

B.1 请求头

B.2 elfinject使用的数据结构

B.3 初始化libelf

B.4 获取可执行头

B.5 查找PT_NOTE段

B.6 注入代码

B.7 为注入的节对齐加载地址

B.8 覆盖.note.ABI-tag节头

B.9 设置注入节的名称

B.10 覆盖PT_NOTE程序头

B.11 修改入口点

附录C 二进制分析工具清单

C.1 反汇编工具

C.1.1 IDA Pro(Windows、Linux、macOS)

C.1.2 Hopper(Linux、macOS)

C.1.3 ODA(所有操作系统)

C.1.4 Binary Ninja(Windows、Linux、macOS)

C.1.5 Relyze(Windows)

C.1.6 Medusa(Windows、Linux)

C.1.7 radare(Windows、Linux、macOS)

C.1.8 objdump(Linux、macOS)

C.2 调试器

C.2.1 GDB(Linux)

C.2.2 OllyDbg(Windows)

C.2.3 Windbg(Windows)

C.2.4 Bochs(Windows、Linux、macOS)

C.3 反汇编框架

C.3.1 Capstone(Windows、Linux、macOS )

C.3.2 distorm3(Windows、Linux、macOS)

C.3.3 udis86(Linux、macOS)

C.4 二进制分析框架

C.4.1 angr(Windows、Linux、macOS)

C.4.2 Pin(Windows、Linux、macOS)

C.4.3 Dyninst(Windows、Linux)

C.4.4 Unicorn(Windows、Linux、macOS)

C.4.5 libdft(Linux)

C.4.6 Triton(Windows、Linux、macOS)

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部