网站颜色:

恶意软件分析与检测 王俊峰 9787030513007 科学出版社直发

  • 产品名称:恶意软件分析与检测
  • 书名:恶意软件分析与检测
  • 作者:王俊峰等
  • 定价:98.00元
  • 书名:恶意软件分析与检测
  • 是否是套装:否
  • 出版社名称:科学出版社


商品参数

恶意软件分析与检测
曾用价 (咨询特价)
出版社 科学出版社
版次 1
出版时间 (咨询特价)年03月
开本 16
作者 王俊峰 等
装帧 平装
页数 312
字数 350
ISBN编码 07

内容介绍

本书系统介绍了恶意软件分析的理论与研究现状,重点介绍了新型恶意软件检测方法中的各类模型和关键技术,内容涵盖恶意软件分析与检测所需的基础知识、软件加壳及检测技术、基于机器学习的恶意软件静态检测方法以及恶意软件动态检测方法等内容。本书对恶意软件检测方法的构造原理、实施过程、实验环境和检测性能等多方面进行了全面的分析,以便读者能够更加深刻地理解这些方法的实现原理与应用特点。本书部分反映了当前恶意软件分析领域的*新研究成果,并提供了详尽的参考文献。
目录

目录
《信息科学技术学术著作丛书》序
前言
第1章 二进制可执行文件简介 1
1.1 Windows PE文件 1
1.1.1 PE文件结构 1
1.1.2 PE文件头结构 3
1.1.3 PE导入表 6
1.1.4 PE资源表 7
1.1.5 PE地址变换 10
1.1.6 PE重定位机制 10
1.1.7 PE文件变形机制 12
1.2 Linux ELF文件 14
1.2.1 ELF结构 14
1.2.2 ELF头结构 15
1.2.3 ELF节区 16
1.2.4 ELF字符串表 17
1.2.5 ELF符号表 18
1.2.6 ELF重定位机制 19
1.2.7 ELF动态链接机制 20
1.3 Android DEX文件 21
1.3.1 Android系统结构 22
1.3.2 Android DEX结构 25
1.3.3 Android ODEX结构 27
1.3.4 Android权限机制 27
参考文献 29
第2章 恶意软件检测基础 30
2.1 恶意软件抽象理论 30
2.2 机器学习基础 34
2.2.1 机器学习简介 34
2.2.2 分类算法 36
2.2.3 集成学习 38
2.2.4 特征选择与特征提取 43
2.2.5 性能评价 44
2.2.6 WEKA简介 46
2.3 本章小结 47
参考文献 48
第3章 加壳技术研究 50
3.1 引言 50
3.2 加壳原理 51
3.2.1 ELF文件的加载过程 51
3.2.2 加壳的方式 53
3.2.3 用户空间下加载器的设计 56
3.3 反跟踪技术 58
3.3.1 反调试技术 58
3.3.2 代码混淆技术 61
3.3.3 抗反汇编技术 63
3.4 本章小结 65
参考文献 66
第4章 加壳检测研究 67
4.1 引言 67
4.2 加壳检测常用方法 68
4.2.1 研究现状 68
4.2.2 常用方法归纳 69
4.3 基于机器学习的加壳检测框架 78
4.4 PE文件加壳检测 81
4.4.1 PE文件特征提取 81
4.4.2 PE加壳检测实验及分析 83
4.5 ELF文件加壳检测 84
4.5.1 ELF文件特征提取 84
4.5.2 ELF加壳检测实验及分析 85
4.6 本章小结 85
参考文献 86
第5章 基于函数调用图签名的恶意软件检测方法 87
5.1 引言 87
5.2 相关工作 88
5.3 定义 91
5.4 图同构算法 93
5.4.1 基于矩阵变换的图同构算法 93
5.4.2 Ullmann图同构算法 94
5.4.3 VF2图同构算法 95
5.4.4 FCGiso图同构算法 96
5.5 检测方法框架 97
5.5.1 检测方法概览 97
5.5.2 检测方法详细描述 98
5.6 实验 100
5.6.1 已知恶意软件检测 101
5.6.2 加壳变种检测 104
5.6.3 恶意软件变种检测 105
5.6.4 恶意软件大样本归类 106
5.6.5 与图编辑距离方法的对比 107
5.7 实验结果与分析 109
5.8 本章小结 111
参考文献 111
第6章 基于挖掘格式信息的恶意软件检测方法 114
6.1 引言 114
6.2 相关工作 116
6.3 检测架构 118
6.4 实验 119
6.4.1 实验样本 119
6.4.2 特征提取 119
6.4.3 特征选择 120
6.4.4 分类学习 121
6.5 实验结果与分析 121
6.5.1 实验1结果 121
6.5.2 实验2结果 121
6.5.3 结果分析 122
6.5.4 特征分析 123
6.6 基于ELF格式结构信息的恶意软件检测方法 126
6.6.1 实验样本 127
6.6.2 提取特征 127
6.6.3 特征选择 128
6.6.4 实验结果 129
6.7 与现有静态方法对比 130
6.8 本章小结 131
参考文献 132
第7章 基于控制流结构体的恶意软件检测方法 133
7.1 引言 133
7.2 相关工作 134
7.3 操作码序列构造原理 135
7.3.1 操作码信息描述 136
7.3.2 操作码序列划分 137
7.4 特征选 择140
7.5 恶意软件检测模型 143
7.6 实验结果与分析 145
7.6.1 实验环境介绍 145
7.6.2 特征数量比较 146
7.6.3 恶意软件检测性能比较 147
7.7 本章小结 150
参考文献 151
第8章 基于控制流图特征的恶意软件检测方法 152
8.1 引言 152
8.2 相关工作 152
8.3 软件控制流图 153
8.3.1 基于单条指令的控制流图 154
8.3.2 基于指令序列的控制流图 155
8.3.3 基于函数的控制流图 155
8.3.4 基于系统调用的控制流图 156
8.4 基于函数调用图的软件特征 157
8.4.1 函数调用图构造 157
8.4.2 特征选择 158
8.4.3 特征分析 162
8.5 语义特征和语法特征的比较 163
8.6 实验结果与分析 164
8.6.1 函数调用图中软件特征评价 165
8.6.2 分类器交叉验证 166
8.6.3 独立验证 167
8.7 本章小结 169
参考文献 170
第9章 软件局部恶意代码识别研究 172
9.1 引言 172
9.2 相关工作 173
9.3 恶意代码感染技术 175
9.3.1 修改程序控制流 175
9.3.2 恶意注入代码存储位置 177
9.4 恶意代码段识别 178
9.4.1 控制流结构异常表现 179
9.4.2 控制流基本结构BasicBlock识别 179
9.4.3 BasicBlock之间的 182
9.4.4 控制流基本结构合并 184
9.4.5 恶意代码边界识别 185
9.5 实验结果与分析 186
9.5.1 添加代码型感染方式的检测 187
9.5.2 覆盖代码型感染方式的检测 187
9.6 本章小结 189
参考文献 190
第10章 基于多视集成学习的恶意软件检测方法 191
10.1 引言 191
10.2 相关工作 192
10.3 实验概览 195
10.4 实验与结果 195
10.4.1 实验样本 195
10.4.2 单视特征提取 196
10.4.3 集成方案一 203
10.4.4 集成方案二 205
10.4.5 泛化性能对比 207
10.5 实验结果对比分析 209
10.6 本章小结 211
参考文献 212
第11章 基于动态变长Native API序列的恶意软件检测方法 214
11.1 引言 214
11.2 相关工作 215
11.3 Win32 API调用机制 219
11.4 检测方法架构 220
11.5 实验 221
11.5.1 实验样本 221
11.5.2 分析平台搭建 221
11.5.3 特征提取和选择 225
11.5.4 分类 226
11.6 实验结果与分析 226
11.6.1 实验结果分析 226
11.6.2 特征分析 229
11.7 本章小结 232
参考文献 233
第12章 基于多特征的移动设备恶意代码检测方法 235
12.1 引言 235
12.2 相关工作 236
12.3 检测模型设计 237
12.3.1 检测模型整体框架 237
12.3.2 恶意代码特征提取 238
12.4 实验与分析 240
12.4.1 实验样本准备 240
12.4.2 实验主要算法 240
12.4.3 实验结果分析 242
12.4.4 实验结论 243
12.5 本章小结 244
参考文献 244
第13章 基于实际使用的权限组合与系统API的恶意软件检测方法 246
13.1 引言 246
13.2 相关工作 247
13.3 检测架构 248
13.3.1 权限组合特征提取 249
13.3.2 系统API特征提取 252
13.4 实验与分析 253
13.4.1 实验样本 253
13.4.2 实验环境 254
13.4.3 实验结果与分析 254
13.4.4 检测方法对比 257
13.5 本章小结 260
参考文献 260
第14章 基于敏感权限及其函数调用图的恶意软件检测方法 262
14.1 引言 262
14.2 相关工作 263
14.3 检测架构 264
14.3.1 提取敏感权限 265
14.3.2 构建函数调用图 266
14.3.3 图编辑距离算法 269
14.4 实验与分析 271
14.4.1 实验样本 271
14.4.2 实验环境 271
14.4.3 实验结果与分析 272
14.4.4 检测方法对比 274
14.5 本章小结 275
参考文献 276
第15章 基于频繁子图挖掘的异常入侵检测新方法 277
15.1 引言 277
15.2 相关工作 279
15.3 基本思想及检测模型 281
15.4 特征模式构造算法 282
15.4.1 相关概念与定义 282
15.4.2 数据预处理 283
15.4.3 子图特征值设定 285
15.4.4 子图扩展与剪枝 285
15.4.5 PatternsMining算法实现 286
15.5 实验数据描述 290
15.6 实验结果与分析 290
15.7 本章小结 293
参考文献 294
在线试读

第1章 二进制可执行文件简介
  可执行文件作为操作系统*重要的文件类型之一,是功能操作的真正执行者。操作系统支持的可执行文件格式与操作系统的文件加载机制密切相关,不同的操作系统支持不同格式的可执行文件,而可执行文件的格式决定了可执行文件的大小、运行速度、资源占用、扩展性、移植性等文件的重要特性。
  对可执行文件结构及相关技术的研究是病毒研究的基础,因为病毒程序的执行必将直接或者间接地依赖于可执行文件。本章简要介绍Windows操作系统、Linux操作系统、Android操作系统的可执行文件格式及相关技术。
1.1 Windows PE文件
  微软Win32环境可执行文件的标准格式是PE(portable executable)文件,其目标是为所有Windows平台设计统一的文件格式,即为Windows平台的应用软件提供良好的兼容性、扩展性[1]。微软自Windows NT3.1首次引入PE文件格式以来,后续操作系统结构变化、新特性添加、文件存储格式转换等都没有影响PE文件格式。Window下常见的EXE、DLL、OCX、SYS、COM等多种文件类型都属于PE文件格式。
1.1.1 PE文件结构
  PE文件结构是Windows操作系统管理可执行文件的代码、数据及其相关资源的数据组织方式。从资源存储角度来看,PE文件使用一个平面地址空间,将所有代码、数据合并在一起组成一个大结构。从文件结构来看,PE文件由文件头部和文件体组成,文件头部包含文件的结构、属性等信息,如该文件支持的操作系统、程序的入口地址等;文件体包含代码、数据及相关资源等。
  为了管理可执行文件的资源,PE文件从两个维度来对数据资源进行规范管理:其一是数据类型,主要按照数据功能对数据进行集中管理,如将数据资源划分为导入表、资源表等;其二是数据属性,不同的数据需要不同的访问权限,即代码的只读、只写、可读、可写等属性,如代码数据在运行时不允许修改,而数据段数据允许读写等。如何方便地查找资源、实现资源定位是资源管理面临的另一个重要问题。PE文件数据资源定位采用链表与固定格式相结合的方式,前者利用链表管理资源,资源的具体位置灵活,后者要求数据结构大小固定,其位置也相对固定。典型的PE文件结构如图1.1所示。
  图1.1 PE文件结构
1.MS-DOS结构
  PE文件引入初期,为兼容DOS操作系统,设计了4字节的MS-DOS可执行文件体。PE文件MS-DOS头部的数据结构如下:
  e_magic(魔幻数)字段是DOS文件的标志,其值固定为0x5A4D,对应的字符串为“MZ”,是DOS操作系统设计者的名字缩写;
  e_lfanew字段是一个4字节的文件偏移量,代表PE文件头的偏移地址,PE文件头部利用此字段来定位。
2.PE结构
  PE结构是PE文件的主体,实现对PE文件所有代码、数据信息的存储、管理,在PE文件布局中DOS节以外的部分都属于PE结构。
  PE文件采用节作为存放代码或数据的基本单,PE文件常用的节有代码节(.text)、数据节(.data)、资源节(.rsrc)等。节是一个没有大小限制的连续结构,可以存放不同的数据类型(如代码、数据、资源等),每一个节都有独立的访问权限,文件的内容被分割为不同的节,各节按页边界来对齐,相同属性的文件内容必须放到同一个节中,节的名字仅用于节标识。
  节的管理使用节表技术实现,节表是节的索引目录,包含节名及节内容的位置指针,节表内部按照顺序依次对齐排列,节表中节内容的位置指针指向真实的节。节表总尺寸=每个节表的尺寸×节的数目,其中每个节的描述信息长度固定40个字节,而节的个数是不确定的,*小取值为1,且节的数目必须与PE文件头中IMAGE_FILE_HEADER数据结构中的NumberOfSections一致。
1.1.2 PE文件头结构
  PE文件头结构是PE文件*重要的结构之一,由PE头标识(Signature)、标准PE头(IMAGE_FILE_HEADER)和扩展PE头(IMAGE_OPTIONAL_HEADER32)三部分组成[1]。从数据结构的角度来看,PE文件结构如图1.2所示。
  图1.2PE文件结构图(数据结构视角)
1.IMAGE_NT_HEADERS数据结构
  Signature字段与MS-DOS头中的魔幻数(e_magic)功能类似,是PE文件的标识,该字段的高16位为0,低16位为固定的值0x4550,对应的字符为“PE”,完整的Signature值为“PE00”。
  IMAGE_FILE_HEADER类型的FileHeader字段代表PE文件基本信息和属性,即本字段描述了PE文件的概貌。PE文件加载时会用本字段的属性来检查当前的运行环境,如果不一致则会终止加载PE文件。IMAGE_OPTIONAL_HEADER32类型的OptionalHeader字段包含PE文件基本信息外的其他信息(如代码段、数据段的基准位置、数据目录等),本字段在Object文件(编译中间文件)无具体内容。
  对PE文件头的数据结构有了整体认识后,接下来详细介绍PE文件头中的具体细节,主要是PE文件头中两个主要的数据结构IMAGE_FILE_HEADER、IMAGE_OPTIONAL_HEADER32的详细信息。
  说明:数据结构均来自Microsoft官方的WINNT.H,本章只给出重要的字段,针对各字段侧重于功能说明,具体的字段取值信息请参考官方手册[2]。
2.标准PE头(IMAGE_FILE_HEADER)
  标准PE头的概要数据结构如下:
  Machine字段代表PE文件支持的CPU类型,PE文件的设计初衷是兼容主流的CPU型号。不同CPU的指令集是不相同的,不同平台编译的可执行文件依赖的运行硬件环境由此字段确定,如此字段取值为0x14C,代表PE文件支持的CPU类型是Intel 386及其后续兼容处理器。
  NumberOfSections字段记录当前PE文件中节的数目,必须与节表中节的数目一致,如节表中新增或删除节的数据,此字段的值要同步更改,本字段的取值范围是1~96。
  Characteristics字段用字节的位表示文件属性,包括两个字节共16位,每一位的不同取值代表一种属性,多种属性可以通过“或运算”形成属性组合,如可执行文件默认值是0x102H对应的二进制为(0000000100000010),DLL文件默认值是0x210EH。
3.扩展PE头(IMAGE_OPTIONAL_HEADER)
  扩展PE头的概要数据结构如下:
  Magic字段表示文件的类型,字段值为0x10B表示PE文件,值为0x107表示ROM镜像文件,值为0x20B表示64位的PE文件。
  AddressOfEntryPoint字段表示PE文件的入口点,对可执行程序映像代表启动地址,对设备驱动程序代表初始化函数的地址。
  BaseOfCode字段表示内存中代码节的起始位置相对于映像基址的偏移地址,即代码节的相对虚拟内存地址(relative virtual address,RVA)。
  ImageBase字段表示PE加载映像到内存的基地址,必须为64K的整数倍,不同类型的PE文件有不同的基地址,DLL文件的基地址默认值是0x10000000,EXE文件的基地址默认值是0x00400000。
  Subsystem字段表示系统为程序建立初始界面的方式,不同的取值对应不同的应用程序界面,如字段取值为IMAGE_SUBSYSTEM_WINDOWS_CUI表示系统自动为程序创建控制台窗口。
  DataDirectory字段是16个数据目录(IMAGE_DATA_DIRECTORY)字段组成的数组,管理多种资源的偏移位置及大小,管理的资源包括导出表、导入表、资源、重定位表等。数据目录(IMAGE_DATA_DIRECTORY)数据结构定义如下:
  VirtualAddress记录了各个数据项的起始RVA(对于某些不需要加载到内存的数据,记录的是文件偏移地址),Size记录了数据项的长度。
1.1.3 PE导入表
  PE导入表包含PE文件调用外部函数名称、在动态链接库(DLL)中的存放位置等信息,Windows操作系统使用导入表信息实现PE文件动态链接库的加载及重定位,Windows程序员常用的DLL函数调用就依赖于PE文件的导入表机制。
1.PE导入表的位置索引
  PE头结构中IMAGE_OPTIONAL_HEADER32结构体的DataDirectory的值对应PE导入表偏移位置(virtual address)及大小(size),利用该偏移位置可定位PE导入表。
2.PE导入表及其关联结构
  导入表(IMAGE_DIRECTORY_ENTRY_IMPORT):PE文件加载过程中根据本表内容加载依赖的DLL,并填充相关函数的地址。
  绑定导入表(IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT):PE文件加载前对导入地址进行修正——解决地址冲突,PE加载机制不再处理地址冲突,这对多个DLL或者函数的加载会显著提高效率。
  延迟导入表(IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT):PE文件需导入多个DLL,程序初始化并不加载所有DLL,程序访问到某个外部函数才加载对应的DLL及函数的地址修正。
  导入地址表(IMAGE_DIRECTORY_ENTRY_IAT):前三个表是对导入函数的描述,本表存放相关函数的地址。
3.PE导入表的工作原理
  导入表的基本结构(IMAGE_IMPORT_DESCRIPTOR)对导入函数的名字、地址等基本信息进行全面描述,一个DLL文件对应一个基本结构。导入表是由基本结构组成的数组,且数组的*后一个素内容全为0。 _310x310.jpg
热门设计服务