第1 章概述................................ ........................................1
1.1 Linux 系统安全........................ .......................................1
1.2 代码安全.........................·..........................................1
1.3 什么是二进制代码安全性分析......................................................2
1.4 二进制代码安全性分析的重要性...................................................2
1.5 二进制代码安全性分析的主要步骤.................................................2
1.6 软件错误、漏洞以及利用...........................................................2
1.6.1 软件错误.....................................................................2
1.6.2 软件漏洞.....................................................................3
1.6.3 漏洞利用.....................................................................3
1.6.4 二进制代码利用.............................................................4
第2 章二进制代码生成...............................................................5
2.1 二进制代码的生成过程.............................................................5
2.1.1 编译预处理阶段.............................................................6
2.1.2 编译阶段.....................................................................6
2.1.3 汇编阶段.....................................................................6
2.1.4 链接阶段.....................................................................8
2.1.5 gcc 的常用选项..............................................................11
2.1.6 ld 的常用选项...............................................................17
2.1.7 gcc 的常用环境变量.........................................................21
2.1.8 二进制代码的生成举例......................................................21
2.2 ELF 文件格式.................·...........................................26
2.2.1 ELF文件的两种视图.......................................................27
2.2.2 ELF 文件的头...............................................................27
2.2.3 可执行文件的主要节........................................................29
2.2.4 位置无关代码................................................................33
2.2.5 ELF 文件的头...............................................................42
2.2.6 ELF 文件的主要段..........................................................43
2.3 程序的装载与调度执行.............................................................47
2.3.1 可执行文件的装载...........................................................47
2.3.2 可执行文件调度运行的过程................................................48
2.3.3 进程的虚拟地址空间及其访问..............................................49
第3 章二进制代码信息的收集.......................................................54
3.1 nm ...........................................................................54
3.2 ldd ..........................·........................................54
3.3 strings ..........................·.............................................55
3.4 ELF 文件分析工具LIEF ...........................................................55
3.4.1 安装..........................................................................55
3.4.2 基于LIEF 对.got.plt 表的攻击举例........................................55
3.4.3 基于LIEF 将可执行文件转变为共享库文件...............................59
3.5 ps ............................. .............................................61
3.6 strace ....................................................................61
3.7 ltrace ....................................................................62
3.8 ROPgadget..........................·..................................62
3.9 objdump...............................................................63
3.10 readelf..............................................................65
3.11 GDB ...................................................................66
3.11.1 GDB 的初始化脚本文件...................................................66
3.11.2 GDB 的常用命令..........................................................66
3.11.3 GDB 的常用命令示例.....................................................67
3.11.4 GDB 命令的运行..........................................................79
3.11.5 GDB 命令的扩充..........................................................82
3.11.6 PEDA 基本使用...........................................................92
3.12 Pwntools ...........................................................97
3.12.1 Pwntools 的安装...........................................................97
3.12.2 通过上下文设置目标平台..................................................98
3.12.3 本地进程对象的创建.......................................................98
3.12.4 远程进程对象的创建.......................................................99
3.12.5 ELF 模块...................................................................99
3.12.6 search 方法................................................................·100
3.12.7 cyclic 命令的功能.........................................................·101
3.12.8 核心文件..................................................................·102
3.12.9 数据转换..................................................................·104
3.12.10 struct 模块...............................................................·105
3.12.11 shellcraft 模块...........................................................·106
3.12.12 ROP 模块................................................................·108
3.12.13 GDB 模块................................................................·112
3.12.14 DynELF 模块............................................................·113
3.12.15 基于标准输入/输出的数据交互.........................................·116
3.12.16 基于命名管道的数据交互...............................................·118
3.12.17 脚本文件和被测目标程序的交互........................................·125
3.12.18 基于Python 脚本文件的Pwntools 应用举例..........................·125
3.13 LibcSearcher ...........................................................·127
第4 章静态二进制代码分析.........................................................·130
4.1 基于IDAPro 的静态分析..........................................................·130
4.1.1 IDC 脚本文件..............................................................·130
4.1.2 IDAPython 脚本文件......................................................·138
4.1.3 IDAPython 脚本文件示例.................................................·140
4.1.4 IDAPro 插件的编写........................................................·142
4.2 基于Radare2 的静态分析.........................................................·148
4.2.1 r2 的常用命令..............................................................·148
4.2.2 r2 常用命令示例...........................................................·150
4.2.3 r2 对JSON 格式数据的处理..............................................·156
4.2.4 基于r2pipe 的脚本文件编写..............................................·159
4.2.5 基于r2pipe 的脚本文件执行..............................................·163
第5 章二进制代码脆弱性评估......................................................·164
5.1 常见二进制代码脆弱性............................................................·164
5.1.1 栈溢出的原理...............................................................·165
5.1.2 堆溢出的原理...............................................................·165
5.2 基于系统工具对代码脆弱性的评估................................................·184
5.2.1 基于Clang Static Analyzer 的安全检测..................................·184