内存取证-volatility3工具的使用
安装
1
| wget https://github.com/volatilityfoundation/volatility3/archive/refs/tags/v2.5.2.zip -O volatility3.zip
|
Volatility3需要一些Python库才能工作,不装会报错
1 2
| cd volatility3-2.5.2 pip3 install -r requirements.txt
|
当然在这一步,可以会遇到下面这种情况:

这里需要创建一个虚拟环境,就可以正常安装依赖了
1 2 3 4 5 6 7 8
| #安装 venv 模块 (如果尚未安装) sudo apt install -y python3-venv
#创建名为 venv 的虚拟环境 python3 -m venv 虚拟环境名
#激活虚拟环境 source 虚拟环境名/bin/activate
|
1
| pip install -r requirements.txt
|
1 2 3 4 5 6 7 8
| # 退回上一级目录 cd ..
# 创建快捷指令(注意路径里多了个 /venv/bin/) echo '~/ctf/volatility3-2.5.2/venv/bin/python3 ~/ctf/volatility3-2.5.2/vol.py "$@"' > vol3
# 给权限 chmod +x vol3
|
装完依赖后,你就可以愉快地用 ./vol3 -f xxx.raw windows.info 来做题了!!!
符号表
“按需自动下载” 的机制
当你第一次分析某个特定的 Windows 镜像时(比如运行 windows.info),Volatility3会做以下动作:
扫描内存镜像,找到内核的特征(GUID/PDB 签名)
联网去微软的官方服务器或者 GitHub 仓库寻找对应的符号表(Symbol Table)
下载并生成 .json 格式的符号文件
缓存存在你的硬盘里(默认位置是 ~/.cache/volatility3)
- 在国内环境(或者某些比赛断网环境),自动下载可能会失败(连不上微软服务器),所以需要手动下载一个离线符号包(看自己需要)
使用对应 linux / mac / windows 插件之前,请先下载对应的符号表(最好下载所有的符号包):
这个包只包含常见系统,如果是极其偏门的版本,还是得靠自动下载
把下载的zip包里的文件解压放进你 Volatility 3 目录下的 volatility3/symbols 文件夹里
使用方法
基本语法格式如下
1
| ./vol3 -f [内存镜像路径] [插件名称]
|
查看官方使用文档
最新插件使用以官方文档为准
| 插件名 |
用法 |
layerwriter |
列出内存镜像 platform 信息,分割 layers |
linux.bash |
从内存中恢复 bash 命令历史记录 |
linux.check_afinfo |
验证网络协议的操作功能指针 |
linux.check_syscall |
检查系统调用表中的挂钩 |
linux.elfs |
列出所有进程的所有内存映射ELF文件 |
linux.lsmod |
列出加载的内核模块 |
linux.lsof |
列出所有进程的所有内存映射 |
linux.malfind |
列出可能包含注入代码的进程内存范围 |
linux.proc |
列出所有进程的所有内存映射 |
linux.pslist |
列出 linux 内存映像中存在的进程 |
linux.pstree |
列出进程树 |
mac.bash |
从内存中恢复 bash 命令历史记录 |
mac.check_syscall |
检查系统调用表中的挂钩 |
mac.check_sysctl |
检查 sysctl 处理程序的挂钩 |
mac.check_trap_table |
检查 trap 表中的挂钩 |
mac.ifconfig |
列出网卡信息 |
mac.lsmod |
列出加载的内核模块 |
mac.lsof |
列出所有进程的所有内存映射 |
mac.malfind |
列出可能包含注入代码的进程内存范围 |
mac.netstat |
列出所有进程的所有网络连接 |
mac.psaux |
恢复程序命令行参数 |
mac.pslist |
列出 mac 内存映像中存在的进程 |
mac.pstree |
列出进程树 |
mac.tasks |
列出 mac 内存映像中存在的进程 |
windows.info |
显示正在分析的内存样本的 OS 和内核详细信息 |
windows.callbacks |
列出内核回调和通知例程 |
windows.cmdline |
列出进程命令行参数 |
windows.dlldump |
将进程内存范围 DLL 转储 |
windows.dlllist |
列出 Windows 内存映像中已加载的 dll 模块 |
windows.driverirp |
在 Windows 内存映像中列出驱动程序的 IRP |
windows.driverscan |
扫描 Windows 内存映像中存在的驱动程序 |
windows.filescan |
扫描 Windows 内存映像中存在的文件对象 |
windows.handles |
列出进程打开的句柄 |
windows.malfind |
列出可能包含注入代码的进程内存范围 |
windows.moddump |
转储内核模块 |
windows.modscan |
扫描 Windows 内存映像中存在的模块 |
windows.mutantscan |
扫描 Windows 内存映像中存在的互斥锁 |
windows.pslist |
列出 Windows 内存映像中存在的进程,转储处理可执行映像 |
windows.psscan |
扫描 Windows 内存映像中存在的进程 |
windows.pstree |
列出进程树 |
windows.registry.certificates |
列出注册表中存储的证书 |
windows.registry.hivelist |
列出内存映像中存在的注册表配置单元 |
windows.registry.hivescan |
扫描 Windows 内存映像中存在的注册表配置单元 |
windows.registry.printkey |
在配置单元或特定键值下列出注册表项 |
windows.registry.userassist |
打印用户助手注册表项和信息 |
windows.ssdt |
列出系统调用表 |
windows.strings |
读取字符串命令的输出,并指示每个字符串属于哪个进程 |
windows.svcscan |
扫描 Windows 服务 |
windows.symlinkscan |
扫描 Windows 内存映像中存在的链接 |
假设你有一个名为 memdump.mem 的内存文件。
1. 查看系统基本信息 (windows.info)
这是第一步,用于确认镜像是否被正确识别以及系统版本
1
| ./vol3 -f memdump.mem windows.info
|
2. 列出进程 (windows.pslist)
查看内存被捕获时正在运行的进程
1
| ./vol3 -f memdump.mem windows.pslist
|
3. 查看进程树 (windows.pstree)
这是 pslist 的增强版,以树状结构显示父子进程关系,非常适合发现恶意进程(例如 svchost.exe 如果没有父进程通常很可疑)
1
| ./vol3 -f memdump.mem windows.pstree
|
4. 查看网络连接 (windows.netscan)
查看当时的网络连接、监听端口和关联的 PID
1
| ./vol3 -f memdump.mem windows.netscan
|
5. 提取文件 (windows.dumpfiles)
如果你发现了一个可疑进程(比如 PID 为 1234),想把它从内存中提取出来进行逆向分析:
1
| ./vol3 -f memdump.mem windows.dumpfiles --pid 1234
|
6. 查找恶意代码注入 (windows.malfind)
扫描进程内存中具有 rwx(可读可写可执行)权限的内存段,这通常是 shellcode 注入的特征
1
| ./vol3 -f memdump.mem windows.malfind
|
7.进程转储(dump)
1
| ./vol3 -o ./outputdir/ -f memdump.mem windows.pslist --pid 进程 --dump
|
8.内存转储(windows.memmap)
1
| ./vol3 -o ./outputdir/ -f memdump.mem windows.memmap --pid 进程 --dump
|
9.查看句柄(windows.handles)
1 2
| ./vol3 -f memdump.mem windows.handles ./vol3 -f memdump.mem windows.handles --pid 进程
|
10.查看 DLL(windows.dlllist)
1 2
| ./vol3 -f memdump.mem windows.dlllist ./vol3 -f memdump.mem windows.dlllist --pid 进程
|
11.DLL 转储(dump)
1
| ./vol3 -o ./outputdir/ -f memdump.mem windows.dlllist --pid 进程 --dump
|
12.查看命令行(windows.cmdline)
1 2
| ./vol3 -f memdump.mem windows.cmdline ./vol3 -f memdump.mem windows.cmdline --pid 进程
|
13.查看网络端口(windows.netscan)
1
| ./vol3 -f memdump.mem windows.netscan
|
查看完整的结果,但可能包含垃圾信息和虚假信息 (谨慎使用啊)
1
| ./vol3 -f memdump.mem windows.netscan --include-corrupt
|
14.查看注册表信息(windows.registry.hivescan和windows.registry.hivelist)
1 2
| ./vol3 -f memdump.mem windows.registry.hivescan ./vol3 -f memdump.mem windows.registry.hivelist
|
查看指定过滤器 (文件夹) 下的注册表信息
1
| ./vol3 -f memdump.mem windows.registry.hivelist --filter FILTER
|
15.注册表信息转储(dump)
1
| ./vol3 -o ./outputdir/ -f memdump.mem windows.registry.hivelist --filter FILTER --dump
|
16.查看注册表键值对(windows.registry.printkey)
1
| ./vol3 -f memdump.mem windows.registry.printkey
|
查看指定过滤器 (文件夹) 下的注册表信息,但需要 hivelist 提供的 offset
1
| ./vol3 -f memdump.mem windows.registry.printkey --offset OFFSET
|
查看指定键下的注册表值
1
| ./vol3 -f memdump.mem windows.registry.printkey --key KEY
|
打印所有键的信息
1
| ./vol3 -f memdump.mem windows.registry.printkey --recurse
|
17.查看文件信息(windows.filescan)
1
| ./vol3 -f memdump.mem windows.filescan
|
建议通过 powershell 的 Select-String 或者 bash 的 grep 进行搜索,如:
1 2
| ./vol3 -f memdump.mem windows.filescan | grep "flag" ./vol3 -f memdump.mem windows.filescan | Select-String "flag"
|
18.文件转储(windows.dumpfiles)
需要 pslist 提供的 pid
1
| ./vol3 -o ./outputdir/ -f memdump.mem windows.dumpfiles --pid 进程
|
(推荐) 需要 filescan 提供的 offset (一般来说为 physaddr)
1 2
| ./vol3 -o ./outputdir/ -f memdump.mem windows.dumpfiles --virtaddr offset ./vol3 -o ./outputdir/ -f memdump.mem windows.dumpfiles --physaddr offset
|
19.查找恶意注入代码(windows.malfind)
1 2
| ./vol3 -f memdump.mem windows.malfind ./vol3 -f memdump.mem windows.malfind --pid 进程
|
恶意注入代码转储
1
| ./vol3 -o ./outputdir/ -f memdump.mem windows.malfind --pid 进程 --dump
|
更多使用可以看这位师傅的:
https://hasegawaazusa.github.io/vol3-note.html#vol-%E5%AF%B9%E8%B1%A1