目录第一部分软件安全基础
第1章软件安全概述3
1.1软件安全威胁及其来源3
1.1.1软件缺陷与漏洞3
1.1.2恶意软件4
1.1.3软件知识产权侵犯6
1.2软件级安全防护方法6
1.2.1软件漏洞挖掘与利用检测6
1.2.2恶意代码分析与检测7
1.2.3安全设计与开发7
1.2.4软件自身加固8
1.3系统级安全防护方法9
1.3.1系统自身防护机制构建9
1.3.2系统还原10
1.3.3虚拟隔离10
1.3.4可信计算11
课后习题13
第2章计算机引导与磁盘管理14
2.1系统引导与控制权传递14
2.1.1系统引导与控制权传递的过程14
2.1.2Legacy BIOS引导模式16
2.1.3UEFI BIOS引导模式20
2.2处理器的工作模式20
2.2.1实模式21
2.2.2保护模式21
2.2.3虚拟8086模式21
2.3内存结构与管理22
2.3.1内存布局22
2.3.2分页机制24
2.3.3页面的权限管理25
2.4磁盘的物理与逻辑结构27
2.4.1磁盘的物理结构27
2.4.2磁盘的逻辑结构29
2.4.3典型文件系统格式(FAT32、NTFS等)34
2.5FAT32文件系统及数据恢复34
2.5.1FAT32文件系统结构34
2.5.2FAT32文件系统的文件管理36
2.5.3FAT32文件系统被删除文件恢复的机理36
2.5.4FAT32数据恢复实践37
2.6NTFS文件系统37
2.6.1NTFS文件系统的总体结构37
2.6.2MFT38
2.6.3NTFS文件存储与数据运行(Data Run)39
2.7二进制程序的生成与表示39
2.7.1程序的生成过程39
2.7.2程序的二进制表示40
2.7.3反编译与反汇编40
课后习题40
第3章PE可执行文件格式42
3.1PE文件及其表现形式42
3.2PE文件格式与PE病毒的关系42
3.3PE文件格式总体结构概述43
3.3.1PE文件原始数据43
3.3.2PE文件相关工具介绍43
3.3.3MZ及PE文件头44
3.3.4可选映像头45
3.3.5节表与节48
3.4代码节与数据节50
3.4.1代码节及数据节介绍50
3.4.2代码节与数据节举例51
3.5引入函数节与函数引入机制51
3.5.1引入目录表51
3.5.2引入名字表及IAT52
3.6引出函数节与函数引出机制53
3.6.1引出目录表53
3.6.2引出函数节举例分析55
3.7资源节: 文件资源索引、定位与修改55
3.8重定位节: 镜像地址改变后的地址自动修正55
3.9PE程序的数字签名与验证机制56
3.10PE32+文件格式与PE32文件格式的区别57
课后习题57
第4章PE文件格式实践58
4.1手工构建引入函数表58
4.2手工替换程序的已有图标59
4.3手工提取程序的图标59
4.4手工为程序新增图标59
4.5手工汉化59
4.6PE程序的数字签名过程与数据植入59
4.6.1PE程序的数字签名过程59
4.6.2PE程序签名数据的提取与分析59
4.7挑战自己: 手工打造最小PE文件59
课后习题60
第二部分恶意代码机理与防护
第5章恶意代码的定义及分类63
5.1恶意代码的定义63
5.2恶意代码的分类63
5.2.1计算机病毒63
5.2.2网络蠕虫64
5.2.3网络木马66
5.2.4网络后门66
5.2.5僵尸程序与僵尸网络67
5.2.6Rootkit67
5.2.7Exploit67
5.2.8其他68
5.3恶意代码的发展阶段68
5.3.1单机阶段68
5.3.2网络传播阶段69
5.3.3混合攻击与对抗阶段69
5.4恶意代码与网络犯罪70
5.5恶意代码与APT攻击中的武器71
5.5.1从恶意代码的发展看APT攻击71
5.5.2高级恶意代码工程体系——A2PT的攻击武器73
5.5.3普通APT组织的自研恶意代码74
5.5.4商用恶意代码74
5.5.5无文件恶意代码作业、开源和免费工具75
5.5.6总结与思考75
课后习题76
第6章Windows PE病毒77
6.1PE病毒的基本概念77
6.2Windows PE病毒的分类77
6.3传统文件感染型78
6.3.1传统文件感染型病毒感染机理78
6.3.2传统文件感染型病毒关键技术78
6.4捆绑释放型84
6.5系统感染型84
6.5.1系统感染型病毒及控制权再次获取84
6.5.2系统感染型病毒的传播方式86
6.6典型案例87
课后习题88
第7章脚本病毒及宏病毒89
7.1宏的基本概念与使用89
7.2宏病毒的传播方法90
7.2.1宏的概念90
7.2.2宏病毒如何拿到控制权90
7.2.3宏病毒如何传播91
7.3宏病毒的自我保护及对抗措施94
7.3.1宏病毒的自我保护94
7.3.2如何对抗宏病毒的自我保护96
7.3.3APT攻击中的宏利用97
7.4VBS脚本病毒98
7.5VBS脚本病毒的感染技术98
7.5.1VBS脚本病毒如何感染、搜索文件98
7.5.2VBS脚本病毒的传播方式99
7.5.3VBS脚本病毒如何获取控制权100
7.6PowerShell脚本病毒101
课后习题102
第8章网络蠕虫103
8.1网络蠕虫的定义103
8.2网络蠕虫的功能模块103
8.3网络蠕虫的检测与防治105
8.3.1主机上蠕虫的检测与防治105
8.3.2网络上蠕虫的检测与防治105
8.4典型网络蠕虫分析106
课后习题112
第9章网络木马及其他113
9.1木马的基本概念113
9.2木马的分类113
9.3木马的植入方式114
9.4木马的通信方式117
9.5远程控制型木马的常见功能与意图118
9.5.1远程控制型木马的结构118
9.5.2木马的典型功能118
9.5.3木马的性能123
9.6典型木马123
9.6.1系统行为123
9.6.2业务功能126
9.7APT攻击与远程控制型木马129
课后习题130
第10章恶意代码检测及对抗技术131
10.1恶意代码防护模型131
10.1.1Fred Cohen提出的“四模型”理论131
10.1.2类IPM模型132
10.1.3防护模型的启示132
10.2静态检测技术133
10.2.1特征码检测技术133
10.2.2校验和检测技术135
10.2.3启发式扫描技术138
10.3动态检测技术142
10.3.1虚拟机检测技术142
10.3.2主动防御技术144
10.3.3沙箱技术146
10.4综合检测技术147
10.4.1云查杀技术148
10.4.2基于智能算法的检测技术148
10.5恶意代码对抗技术150
10.5.1恶意代码对抗静态分析的手段151
10.5.2恶意代码对抗动态分析的手段153
10.5.3反病毒软件对抗155
10.6人工分析对抗156
10.7本章小结160
课后习题161
第11章恶意软件样本的捕获与分析162
11.1恶意软件样本的捕获方法162
11.1.1蜜罐162
11.1.2用户上报162
11.1.3云查杀平台上传163
11.1.4诱饵邮箱163
11.1.5样本交流163
11.2恶意软件载体 163
11.3恶意软件样本的分析164
11.3.1虚拟机环境准备165
11.3.2系统监控166
11.3.3文件类型侦测171
11.3.4PE文件格式分析171
11.3.5静态反汇编172
11.3.6动态调试174
11.3.7文本及十六进制数据分析175
11.4恶意软件分析报告176
11.5威胁情报共享179
11.5.1威胁情报179
11.5.2TTPs典型描述框架182
11.5.3威胁情报的应用场景183
11.5.4威胁情报的标准与规范184
11.6本章小结185
课后习题185
第三部分软件漏洞利用及挖掘
第12章软件漏洞机理189
12.1软件漏洞概念189
12.1.1软件漏洞的定义及威胁189
12.1.2漏洞共享库192
12.2漏洞分类与时效194
12.2.1软件漏洞的技术分类194
12.2.2软件漏洞的时效分类195
12.3漏洞产业链195
12.4通用漏洞评估系统196
12.4.1CVSS评分框架概述196
12.4.2CVSS评分示例198
12.4.3CVSS的评分范围与计算器199
12.5缓冲区溢出漏洞199
12.5.1基本概念199
12.5.2栈溢出漏洞200
12.5.3堆溢出漏洞205
12.5.4单字节溢出211
12.6格式化字符串漏洞211
12.6.1格式化字符串的定义211
12.6.2格式化字符串漏洞的利用——数据泄露212
12.6.3格式化字符串漏洞的利用——数据写入214
12.7整数溢出漏洞216
12.8UAF漏洞、DoubleFree219
12.9攻击C++虚函数220
12.10其他类型的漏洞223
12.10.1注入类漏洞223
12.10.2权限类漏洞224
课后习题225
第13章软件漏洞利用及系统保护机制227
13.1漏洞利用与Exploit227
13.1.1漏洞利用的基本概念227
13.1.2Exploit的结构228
13.2典型漏洞利用方法228
13.3Shellcode开发230
13.3.1Shellcode的编写语言230
13.3.2地址重定位技术231
13.3.3API函数自搜索技术231
13.3.4S.E.H结构覆盖235
13.3.5返回导向编程236
13.4典型漏洞利用框架237
13.4.1Metasploit Framework237
13.4.2Immunity CANVAS237
13.5Windows安全防护238
13.5.1地址空间分布随机化——ASLR238
13.5.2栈溢出检查——GS241
13.5.3数据执行保护——DEP245
13.5.4SafeSEH248
13.5.5EMET250
13.5.6Exploit Protection机制251
课后习题251
第14章漏洞挖掘技术基础253
14.1方法概述253
14.1.1方法分类253
14.1.2符号执行253
14.1.3污点分析255
14.2程序切片技术256
14.2.1基础定义256
14.2.2工作原理260
14.2.3典型方法261
14.3程序插桩技术263
14.3.1插桩概念263
14.3.2插桩分类264
14.3.3Pin插桩示例265
14.4Hook技术272
14.4.1Hook概念272
14.4.2消息Hook273
14.4.3API Hook277
课后习题289
第15章典型漏洞挖掘方法290
15.1词法分析290
15.1.1基本概念290
15.1.2词法分析漏洞挖掘实践290
15.1.3基于IDA脚本的漏洞挖掘294
15.2数据流分析295
15.2.1基本概念295
15.2.2漏洞分析297
15.3符号执行技术299
15.3.1基本原理299
15.3.2方法分类303
15.3.3Angr应用示例304
15.4污点分析技术308
15.4.1基本原理308
15.4.2显式流分析310
15.4.3隐式流分析312
15.4.4检测漏洞示例313
15.5模糊测试314
15.5.1模糊测试简介314
15.5.2智能模糊测试316
15.5.3模糊测试工具示例317
15.5.4动手写Fuzzer322
15.5.5AFL模糊测试工具324
课后习题328
参考文献329
