目录 第一部分软件安全基础 第1章磁盘格式与数据恢复2 1.1实验概述2 1.2实验预备知识与基础2 1.2.1磁盘编辑工具与基本用法2 1.2.2MBR与GPT磁盘分区格式2 1.2.3FAT32与NTFS文件系统4 1.2.4数据删除与恢复技术8 1.3磁盘编辑工具的基本使用8 1.3.1实验目的8 1.3.2实验内容及实验环境9 1.3.3实验步骤9 1.4MBR磁盘主引导区分析11 1.4.1实验目的11 1.4.2实验内容及实验环境11 1.4.3实验步骤11 1.5GPT分区格式分析15 1.5.1实验目的15 1.5.2实验内容及实验环境15 1.5.3实验步骤15 1.6FAT32文件系统格式分析18 1.6.1实验目的18 1.6.2实验内容及实验环境18 1.6.3实验步骤19 1.7NTFS文件系统格式分析22 1.7.1实验目的22 1.7.2实验内容及实验环境22 1.7.3实验步骤22 1.8数据删除与恢复28 1.8.1实验目的28 1.8.2实验内容及实验环境28 1.8.3实验步骤28 1.9本章小结33 1.10问题讨论与课后提升33 1.10.1问题讨论33 1.10.2课后提升33 第2章程序链接和执行34 2.1实验概述34 2.2实验预备知识与基础34 2.3程序的静态链接36 2.3.1实验目的36 2.3.2实验内容及实验环境36 2.3.3实验步骤36 2.4进一步控制程序的链接39 2.4.1实验目的40 2.4.2实验内容及实验环境40 2.4.3实验步骤40 2.5程序的装载与启动流程43 2.5.1实验目的43 2.5.2实验内容及实验环境43 2.5.3实验步骤43 2.6本章小结46 2.7问题讨论与课后提升46 2.7.1问题讨论46 2.7.2课后提升46 第3章PE文件结构分析48 3.1实验概述48 3.2实验预备知识与基础48 3.2.1PE查看、编辑与调试工具介绍48 3.2.2函数引入机制49 3.2.3函数引出机制50 3.2.4资源节机制51 3.2.5重定位机制52 3.3PE查看、编辑与调试工具的用法54 3.3.1实验目的54 3.3.2实验内容及实验环境54 3.3.3实验步骤 54 3.4函数的引入/引出机制分析与修改59 3.4.1实验目的59 3.4.2实验内容及实验环境59 3.4.3实验步骤59 3.5资源节资源操作64 3.5.1实验目的64 3.5.2实验内容及实验环境64 3.5.3实验步骤64 3.6手工重定位66 3.6.1实验目的66 3.6.2实验内容及实验环境66 3.6.3实验步骤67 3.7PE文件缩减68 3.7.1实验目的68 3.7.2实验内容及实验环境68 3.7.3实验步骤68 3.8本章小结71 3.9问题讨论与课后提升71 3.9.1问题讨论71 3.9.2课后提升72 第4章ELF文件结构分析73 4.1实验概述73 4.2实验预备知识与基础73 4.2.1ELF分析工具介绍73 4.2.2ELF文件格式74 4.2.3ELF中的指令与数据77 4.2.4函数引入与引出机制78 4.2.5延迟绑定机制80 4.2.6程序初始化过程81 4.3ELF查看、编辑与调试工具的用法83 4.3.1实验目的83 4.3.2实验内容及实验环境83 4.3.3实验步骤83 4.4函数引入引出机制的分析与修改87 4.4.1实验目的87 4.4.2实验内容及实验环境87 4.4.3实验步骤87 4.5延迟绑定机制的分析与修改93 4.5.1实验目的93 4.5.2实验内容及实验环境93 4.5.3实验步骤93 4.6ELF初始化过程的分析与修改97 4.6.1实验目的97 4.6.2实验内容及实验环境97 4.6.3实验步骤98 4.7本章小结101 4.8问题讨论与课后提升101 4.8.1问题讨论101 4.8.2课后提升101 第二部分恶意代码机理分析 第5章PE病毒104 5.1实验概述104 5.2实验预备知识与基础105 5.2.1反汇编和反编译105 5.2.2反汇编的原理105 5.2.3病毒重定位的原理105 5.2.4获取kernel32基地址的方法106 5.2.5PE病毒感染文件恢复106 5.2.6修复过程总结106 5.3熟悉masm32107 5.3.1实验目的107 5.3.2实验内容及实验环境107 5.3.3实验步骤107 5.4病毒重定位110 5.4.1实验目的110 5.4.2实验内容及实验环境110 5.4.3实验步骤111 5.5kernel32基地址定位及搜索API函数地址114 5.5.1实验目的114 5.5.2实验内容及实验环境115 5.5.3实验步骤115 5.6病毒感染过程119 5.6.1实验目的119 5.6.2实验内容及实验环境120 5.6.3实验步骤120 5.7本章小结124 5.8问题讨论与课后提升124 5.8.1问题讨论124 5.8.2课后提升124 第6章宏病毒与脚本病毒125 6.1实验概述125 6.2实验预备知识与基础125 6.2.1宏的使用与宏病毒125 6.2.2VBS脚本病毒分析126 6.2.3PowerShell脚本病毒分析127 6.3宏的使用与宏病毒128 6.3.1实验目的128 6.3.2实验内容及实验环境128 6.3.3实验步骤128 6.4VBS脚本病毒分析133 6.4.1实验目的133 6.4.2实验内容及实验环境133 6.4.3实验步骤133 6.5PowerShell脚本病毒分析136 6.5.1实验目的136 6.5.2实验内容及实验环境136 6.5.3实验步骤136 6.6本章小结139 6.7问题讨论与课后提升140 6.7.1问题讨论140 6.7.2课后提升140 第7章网络木马机理分析141 7.1实验概述141 7.2实验预备知识与基础141 7.2.1文件与注册表活动监测141 7.2.2网络活动监测141 7.3文件与注册表监控工具的基本使用141 7.3.1实验目的141 7.3.2实验内容及实验环境142 7.3.3实验步骤142 7.4网络抓包工具的基本使用144 7.4.1实验目的144 7.4.2实验内容及实验环境144 7.4.3实验步骤144 7.5虚拟机样本调试环境的配置148 7.5.1实验目的148 7.5.2实验内容及实验环境148 7.5.3实验步骤148 7.6灰鸽子木马的使用与机理分析152 7.6.1实验目的152 7.6.2实验内容及实验环境152 7.6.3实验步骤152 7.7本章小结158 7.8问题讨论与课后提升158 7.8.1问题讨论158 7.8.2课后提升159 第8章网络蠕虫160 8.1实验概述160 8.2实验预备知识与基础160 8.2.1网络蠕虫简介160 8.2.2WannaCry蠕虫背景介绍161 8.2.3Slammer蠕虫背景介绍162 8.2.4蠕虫传播机制分析及实验注意事项163 8.3WannaCry传播机制分析之初始化操作163 8.3.1实验目的163 8.3.2实验内容及实验环境163 8.3.3实验步骤163 8.4本章小结174 8.5问题讨论与课后提升174 8.5.1问题讨论174 8.5.2课后提升175 第9章勒索病毒分析176 9.1实验概述176 9.2实验预备知识与基础176 9.2.1WannaCry 勒索病毒177 9.2.2GandCrab勒索病毒177 9.3WannaCry 勒索机制复现及机理分析178 9.3.1实验目的178 9.3.2实验内容及实验环境178 9.3.3实验步骤178 9.4GandCrab复现及机理分析187 9.4.1实验目的187 9.4.2实验内容及实验环境187 9.4.3实验步骤187 9.5本章小结189 9.6问题讨论与课后提升189 9.6.1问题讨论189 9.6.2课后提升189 第三部分恶意代码样本分析与检测 第10章软件加壳与脱壳192 10.1实验概述192 10.2实验预备知识与基础192 10.2.1加壳原理192 10.2.2手工脱壳方法与原理193 10.2.3实验工具193 10.3加壳与查壳工具的基本使用实验194 10.3.1实验目的194 10.3.2实验内容及实验环境194 10.3.3实验步骤194 10.4手工脱壳196 10.4.1实验目的196 10.4.2实验内容及实验环境196 10.4.3实验步骤196 10.5本章小结199 10.6问题讨论与课后提升199 10.6.1问题讨论199 10.6.2课后提升200 第11章样本静态分析201 11.1实验概述201 11.2实验预备知识与基础201 11.2.1加壳与恶意代码混淆201 11.2.2PE文件格式201 11.2.3ASCII与Unicode202 11.2.4Strings工具202 11.2.5PE Tools203 11.3PEiD的基本使用实验203 11.3.1实验目的203 11.3.2实验内容及实验环境203 11.3.3实验步骤203 11.4Strings的基本使用实验205 11.4.1实验目的205 11.4.2实验内容及实验环境205 11.4.3实验步骤205 11.5PE Tools的基本使用实验207 11.5.1实验目的207 11.5.2实验内容及实验环境207 11.5.3实验步骤207 11.6IDA Pro的基本使用实验208 11.6.1实验目的208 11.6.2实验内容及实验环境209 11.6.3实验步骤209 11.7本章小结213 11.8问题讨论与课后提升214 11.8.1问题讨论214 11.8.2课后提升214 第12章样本动态分析215 12.1实验概述215 12.2实验预备知识与基础215 12.2.1病毒分析流程215 12.2.2病毒分析所需要的基础215 12.3在线平台分析216 12.3.1实验目的216 12.3.2实验内容及实验环境216 12.3.3实验步骤216 12.4样本概况分析218 12.4.1实验目的218 12.4.2实验内容及实验环境218 12.4.3实验步骤218 12.5利用IDA和OD进行深度分析223 12.5.1实验目的223 12.5.2实验内容及实验环境223 12.5.3实验步骤223 12.6本章小结235 12.7问题讨论与课后提升235 12.7.1问题讨论235 12.7.2课后提升236 第13章样本溯源分析237 13.1实验概述237 13.2实验预备知识与基础237 13.2.1恶意软件溯源概述237 13.2.2pefile模块237 13.2.3溯源特征及关联分析237 13.2.4样本相似性分析238 13.3简单静态溯源特征提取及静态域名关联分析238 13.3.1实验目的238 13.3.2实验内容及实验环境238 13.3.3实验步骤238 13.4简单样本功能相似性分析241 13.4.1实验目的241 13.4.2实验内容及实验环境241 13.4.3实验步骤241 13.5本章小结242 13.6问题讨论与课后提升242 13.6.1问题讨论242 13.6.2课后提升242 第14章样本特征检测引擎243 14.1实验概述243 14.2实验预备知识与基础243 14.2.1Linux系统常用防病毒检测工具243 14.2.2ClamAV244 14.3ClamAV的环境搭建与安装配置244 14.3.1实验目的244 14.3.2实验内容及实验环境244 14.3.3实验步骤244 14.4ClamAV的基础使用247 14.4.1实验目的247 14.4.2实验内容及实验环境247 14.4.3实验步骤247 14.5本章小结250 14.6问题讨论与课后提升250 14.6.1问题讨论250 14.6.2课后提升250 第15章样本行为在线分析251 15.1实验概述251 15.2实验预备知识与基础251 15.2.1VirusTotal251 15.2.2Cuckoo Sandbox253 15.2.3Any.Run254 15.2.4腾讯哈勃分析系统255 15.3Cuckoo Sandbox安装使用256 15.3.1实验目的256 15.3.2实验内容及实验环境256 15.3.3实验步骤257 15.4本章小结263 15.5问题讨论与课后提升264 15.5.1问题讨论264 15.5.2课后提升264 第四部分软件漏洞分析 第16章漏洞测试框架266 16.1实验概述266 16.2实验预备知识与基础266 16.2.1渗透测试基础266 16.2.2Metasploit用户接口269 16.2.3Metasploit模块271 16.2.4shellcode基础273 16.2.5模糊测试介绍274 16.3Metasploit安装与初次使用275 16.3.1实验目的275 16.3.2实验内容及实验环境275 16.3.3实验步骤275 16.4模糊测试与漏洞利用279 16.4.1实验目的279 16.4.2实验内容及实验环境279 16.4.3实验步骤279 16.5攻破无线路由器284 16.5.1实验目的284 16.5.2实验内容及环境284 16.5.3实验步骤284 16.6本章小结287 16.7问题讨论与课后提升287 16.7.1问题讨论287 16.7.2课后提升288 第17章栈溢出漏洞289 17.1实验概述289 17.2实验预备知识与基础289 17.2.1栈溢出原理289 17.2.2DEP机制及绕开DEP的方法291 17.3利用栈溢出实现目标代码跳转293 17.3.1实验目的293 17.3.2实验内容及实验环境293 17.3.3实验步骤293 17.4DEP防护环境下的漏洞攻击测试296 17.4.1实验目的297 17.4.2实验内容及实验环境297 17.4.3实验步骤297 17.5本章小结305 17.6问题讨论与课后提升306 17.6.1问题讨论306 17.6.2课后提升306 第18章堆溢出漏洞307 18.1实验概述307 18.2实验预备知识与基础307 18.2.1堆溢出漏洞简介307 18.2.2堆数据结构308 18.2.3堆管理策略310 18.2.4堆溢出原理311 18.2.5堆溢出利用312 18.3堆溢出实验313 18.3.1实验目的313 18.3.2实验内容及环境314 18.3.3实验步骤314 18.4本章小结321 18.5问题讨论与课后提升321 18.5.1问题讨论321 18.5.2课后提升321 第19章格式化字符串/整数溢出漏洞322 19.1实验概述322 19.2实验预备知识与基础322 19.2.1格式化字符串漏洞322 19.2.2整数溢出漏洞324 19.3格式化字符串漏洞327 19.3.1实验目的327 19.3.2实验内容及实验环境328 19.3.3实验步骤328 19.4整数溢出漏洞334 19.4.1实验目的334 19.4.2实验内容及实验环境334 19.4.3实验步骤334 19.5本章小结336 19.6问题讨论与课后提升336 19.6.1问题讨论336 19.6.2课后提升336 第20章IoT漏洞337 20.1实验概述337 20.2实验预备知识与基础337 20.2.1IoT设备及其常见漏洞简介337 20.2.2ARM/MIPS汇编340 20.3.3IoT固件345 20.3固件模拟345 20.3.1实验目的345 20.3.2实验内容及实验环境345 20.3.3实验步骤345 20.4IoT漏洞利用352 20.4.1实验目的352 20.4.2实验内容及实验环境352 20.4.3实验步骤353 20.5本章小结356 20.6问题讨论与课后提升356 20.6.1问题讨论356 20.6.2课后提升356 第21章软件漏洞防御357 21.1实验概述357 21.2实验预备知识与基础357 21.2.1栈溢出检查GS357 21.2.2数据执行保护DEP358 21.2.3地址随机化ASLR358 21.2.4漏洞防御工具359 21.3基础漏洞实验362 21.3.1实验目的362 21.3.2实验内容及实验环境362 21.3.3实验步骤362 21.4Exploit Protection防护实验364 21.4.1实验目的364 21.4.2实验内容及实验环境364 21.4.3实验步骤365 21.5Visual Studio防护实验366 21.5.1实验目的366 21.5.2实验内容及实验环境366 21.5.3实验步骤367 21.6本章小结369 21.7问题讨论与课后提升369 21.7.1问题讨论369 21.7.2课后提升369 第22章GS、DEP与ASLR绕过370 22.1实验概述370 22.2实验预备知识与基础370 22.2.1GS绕过方法370 22.2.2DEP绕过方法371 22.2.3ASLR绕过方法373 22.2.4pwntools、gdb安装与用法374 22.3利用输出函数泄露canary377 22.3.1实验目的377 22.3.2实验内容及实验环境377 22.3.3实验步骤377 22.4利用ROP绕过NX383 22.4.1实验目的383 22.4.2实验内容及实验环境383 22.4.3实验步骤383 22.5本章小结389 22.6问题讨论与课后提升389 22.6.1问题讨论389 22.6.2课后提升390 第五部分软件安全智能化分析 第23章机器学习与恶意代码检测392 23.1实验概述392 23.2实验预备知识与基础392 23.2.1机器学习概述392 23.2.2静态特征和动态特征393 23.2.3基于机器学习的恶意代码检测流程394 23.3机器学习模型构建与分类395 23.3.1实验目的395 23.3.2实验内容及实验环境395 23.3.3实验步骤395 23.4基于机器学习的恶意代码检测398 23.4.1实验目的399 23.4.2实验内容及实验环境399 23.4.3实验步骤399 23.5本章小结406 23.6问题讨论与课后提升406 23.6.1问题讨论406 23.6.2课后提升407 第24章机器学习与恶意代码家族聚类408 24.1实验概述408 24.2实验预备知识与基础408 24.3特征预处理409 24.3.1实验目的409 24.3.2实验内容及实验环境409 24.3.3实验步骤409 24.4聚类实验410 24.4.1实验目的410 24.4.2实验内容及实验环境410 24.4.3实验步骤411 24.5本章小结412 24.6问题讨论与课后提升412 24.6.1问题讨论412 24.6.2课后提升412 第25章Fuzzing与漏洞挖掘413 25.1实验概述413 25.2实验预备知识与基础413 25.2.1AFL概述413 25.2.2选择初始种子413 25.2.3编译被测试程序414 25.3AFL的配置及使用实验414 25.3.1实验目的414 25.3.2实验内容及环境414 25.3.3实验步骤415 25.4本章小结419 25.5问题讨论与课后提升420 25.5.1问题讨论420 25.5.2课后提升420 参考文献421