Volatility 内存取证框架
安装步骤(基于 Python2)
环境说明
Kali Linux 自带 Python2,无需额外安装。以下操作均在 root 或 sudo 权限下执行。
第一步:确认 Python2 环境
Kali 自带 Python2,可通过以下命令验证:
第二步:安装 pip2
1
2
| curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python2 get-pip.py
|
第三步:安装 Python2 依赖库
1
2
| python2 -m pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple/
# python2 -m pip install distorm3 -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 可选,distorm3 后续会源码编译
|
第四步:编译安装 distorm3
1
2
3
| git clone https://github.com/vext01/distorm3
cd distorm3
python2 setup.py install
|
第五步:编译安装 Volatility
1
2
3
| git clone https://github.com/volatilityfoundation/volatility.git # 假设目录名为 Volatility
cd Volatility
python2 setup.py install
|
第六步:安装常用 Python 插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Yara(恶意软件分类工具)
python2 -m pip install yara -i https://pypi.tuna.tsinghua.edu.cn/simple/
# OpenPyxl(读写 Excel 文件)
python2 -m pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/
# ujson(JSON 解析)
python2 -m pip install ujson -i https://pypi.tuna.tsinghua.edu.cn/simple/
# construct 模块(后面 mimikatz 需要特定版本)
python2 -m pip install construct -i https://pypi.tuna.tsinghua.edu.cn/simple/
# mimikatz 插件依赖
python2 -m pip install mimikatz -i https://pypi.tuna.tsinghua.edu.cn/simple/
|
第七步:安装 mimikatz 插件
- 将
mimikatz.py 复制到 volatility-master/volatility/plugins/ 目录中(具体路径根据你的 Volatility 源码位置调整)。 - 安装指定版本的 construct(mimikatz 插件所需):
1
2
| pip2 install --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip2 install construct==2.5.5-reupload -i https://pypi.tuna.tsinghua.edu.cn/simple/
|
插件和安装包可统一打包分发(如群文件)。
基本用法
命令格式及插件列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
| Volatility Foundation Volatility Framework 2.6
用法:volatility - 内存取证分析平台
Options:
-h, --help 列出所有可用选项及其默认值
--conf-file=... 用户配置文件
-d, --debug 调试模式
--plugins=PLUGINS 额外插件目录(冒号分隔)
--info 打印所有注册对象的信息
--cache-directory=... 缓存目录
--cache 使用缓存
--tz=TZ 设置时区
-f FILENAME 内存镜像文件名
--profile=WinXPSP2x86 指定配置文件(用 --info 查看支持列表)
-l LOCATION 地址空间 URN 位置
-w, --write 启用写支持
--dtb=DTB DTB 地址
--shift=SHIFT Mac KASLR 移位地址
--output=text 输出格式
--output-file=FILE 输出到文件
-v, --verbose 详细输出
-g KDBG 指定 KDBG 地址
--force 强制使用可疑配置文件
-k KPCR 指定 KPCR 地址
--cookie=COOKIE 指定 nt!ObHeaderCookie 地址(Windows 10)
支持的插件命令(部分):
amcache 查看 AmCache 应用程序痕迹
apihooks 检测内核及进程空间中的 API hook
atoms 列出会话及窗口站 atom 表
atomscan Atom 表池扫描
auditpol 列出审计策略信息
bigpools 转储大分页池
bioskbd 读取键盘缓冲数据(早期 BIOS 密码)
cachedump 获取内存中缓存的域帐号密码哈希
callbacks 打印全系统通知例程
clipboard 提取 Windows 剪贴板内容
cmdline 显示进程命令行参数
cmdscan 提取命令行历史记录
connections 打印系统打开的网络连接(XP/2003)
connscan 打印 TCP 连接信息
consoles 提取命令行历史记录
crashinfo 提取崩溃转储信息
deskscan tagDESKTOP 池扫描
devicetree 显示设备树信息
dlldump 转储进程加载的 DLL
dlllist 打印每个进程的 DLL 列表
driverirp IRP hook 驱动检测
drivermodule 关联驱动对象至内核模块
driverscan 驱动对象池扫描
dumpcerts 提取 RAS 私钥及 SSL 公钥
dumpfiles 提取内存中映射或缓存的文件
dumpregistry 转储注册表信息至磁盘
editbox 查看 Edit 编辑控件信息
envars 显示进程环境变量
eventhooks 打印 Windows 事件 hook 详细信息
evtlogs 提取 Windows 事件日志(XP/2003)
filescan 提取文件对象池信息
gahti 转储用户句柄类型信息
gditimers 打印 GDI 计时器及回调
gdt 显示全局描述符表
getservicesids 获取注册表服务名称并返回 SID
getsids 打印每个进程的 SID
handles 打印每个进程打开的句柄列表
hashdump 转储 Windows 帐户密码哈希(LM/NTLM)
hibinfo 转储休眠文件信息
hivedump 打印注册表配置单元信息
hivelist 打印注册表配置单元列表
hivescan 注册表配置单元池扫描
hpakextract 从 HPAK 文件提取物理内存数据
hpakinfo 查看 HPAK 文件属性
idt 显示中断描述符表
iehistory 重建 IE 缓存及访问历史
imagecopy 导出原生 DD 镜像文件
imageinfo 查看/识别镜像信息
impscan 扫描对导入函数的调用
joblinks 打印进程任务链接信息
kdbgscan 搜索和转储潜在 KDBG 值
kpcrscan 搜索和转储潜在 KPCR 值
ldrmodules 检测未链接的 DLL
lsadump 提取 LSA 密钥信息(已解密)
machoinfo 转储 Mach-O 文件格式信息
malfind 查找隐藏的和插入的代码
mbrparser 扫描并解析潜在的主引导记录(MBR)
memdump 转储进程的可寻址内存
memmap 打印内存映射
messagehooks 桌面和窗口消息钩子线程列表
mftparser 扫描并解析潜在的 MFT 条目
moddump 转储内核驱动程序
modscan 内核模块池扫描
modules 打印加载模块列表
multiscan 批量扫描各种对象
mutantscan 互斥对象池扫描
notepad 查看记事本当前显示的文本
objtypescan 扫描窗口对象类型
patcher 基于页面扫描的补丁程序内存
poolpeek 可配置的池扫描器
printkey 打印注册表项及其子项和值
privs 显示进程权限
procdump 进程转储到可执行文件
pslist 按 EPROCESS 列表打印所有运行进程
psscan 进程对象池扫描
pstree 以树形方式打印进程列表
psxview 查找隐藏进程
qemuinfo 转储 Qemu 信息
raw2dmp 转换为 Windbg 崩溃转储格式
screenshot 基于 GDI 的屏幕截图
servicediff Windows 服务列表比较
sessions _MM_SESSION_SPACE 详细信息
shellbags 打印 Shellbags 信息
shimcache 解析应用程序兼容性 Shim 缓存
shutdowntime 获取机器关机时间
sockets 打印已打开套接字列表
sockscan TCP 套接字对象池扫描
ssdt 显示 SSDT 条目
strings 物理到虚拟地址的偏移匹配
svcscan Windows 服务列表扫描
symlinkscan 符号链接对象池扫描
thrdscan 线程对象池扫描
threads 调查 _ETHREAD 和 _KTHREADs
timeliner 创建内存痕迹时间线
timers 打印内核计时器及 DPC
truecryptmaster 恢复 TrueCrypt 7.1a 主密钥
truecryptpassphrase 查找并提取 TrueCrypt 密码
truecryptsummary TrueCrypt 摘要信息
unloadedmodules 打印卸载的模块列表
userassist 打印注册表 UserAssist 信息
userhandles 转储用户句柄表
vaddump 转储 VAD 数据为文件
vadinfo 转储 VAD 信息
vadtree 以树形显示 VAD 树
vadwalk 显示遍历 VAD 树
vboxinfo 转储 VirtualBox 信息
verinfo 打印 PE 镜像中的版本信息
vmwareinfo 转储 VMware VMSS/VMSN 信息
volshell 内存镜像中的交互式 Shell
windows 打印桌面窗口详细信息
wintree Z 顺序打印桌面窗口树
wndscan 池扫描窗口站
yarascan 以 Yara 签名扫描进程或内核内存
|
使用示例
以下示例中 Target.vmem 为内存镜像文件,--profile=Win7SP1x64 根据实际情况修改(可通过 imageinfo 自动识别)。
分析镜像基本信息
1
| python vol.py --filename=Target.vmem imageinfo
|
查找用户名密码哈希(hashdump)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 hashdump
|
提取 LSA 密钥信息(lsadump)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 lsadump
|
列举进程(pslist,不能检测隐藏进程)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 pslist
|
直接破解哈希(mimikatz 插件)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 mimikatz
|
扫描已终止或隐藏的进程(psscan)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 psscan
|
树形显示进程列表(pstree)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 pstree
|
提取指定进程的内存(memdump)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 memdump -p <PID> --dump-dir=./
|
查看服务列表(svcscan)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 svcscan
|
查看 IE 浏览历史(iehistory)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 iehistory
|
查看网络连接(netscan)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 netscan
|
查看命令行操作(cmdscan)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 cmdscan
|
查看文件对象(filescan)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 filescan
|
提取文件(dumpfiles)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 dumpfiles -Q 0x物理偏移地址 -D ./
|
查看记事本内容(notepad)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 notepad
|
屏幕截图(screenshot)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 screenshot --dump-dir=./
|
查看注册表单元列表(hivelist)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 hivelist
|
导出注册表单元(hivedump)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 hivedump -o 0xfffff8a001032410
|
获取注册表键值(printkey)
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 printkey -K "注册表路径"
|
查看 UserAssist 运行记录
1
| python vol.py -f Target.vmem --profile=Win7SP1x64 userassist
|
完整示例:解密 TrueCrypt 加密文件
以 mem.vmem 为例,分析过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
| # 1. 获取镜像信息
python vol.py -f mem.vmem imageinfo
# 输出建议使用 WinXPSP2x86
# 2. 查看进程,发现 TrueCrypt 进程(PID 2012)
python vol.py -f mem.vmem --profile=WinXPSP2x86 pslist
# 3. 转储 TrueCrypt 进程内存
python vol.py -f mem.vmem --profile=WinXPSP2x86 memdump -p 2012 -D ./
# 4. 将转储文件丢到 edff 解密工具(外部工具)
# 步骤截图如下:
|
暂无图片
常见问题与解决方法
问题:libyara.so 找不到
1
2
| Failed to import '/usr/lib/libyara.so'
...
|
原因:通过 pip install yara 安装后,libyara.so 被放在了 Python 的 dist-packages 目录下,而 Volatility 期望在 /usr/lib 中找到。
解决方法:创建软链接
1
| ln -s /usr/local/lib/python2.7/dist-packages/usr/lib/libyara.so /usr/lib/libyara.so
|
(如果路径不同,请根据实际情况修改)
推荐参考文章
Volatility 内存取证详细教程
快捷方式创建(方便使用)
1
2
3
4
5
6
7
8
| # 进入 /usr/local/bin
cd /usr/local/bin
# 创建软链接
ln -s /path/to/vol.py vol # 将 /path/to/vol.py 替换为你的 vol.py 实际路径
# 测试
vol -h
|
之后即可直接使用 vol 命令代替 python vol.py。
版权与使用声明
工具仅可用于授权渗透测试或合法取证分析,请勿用于非法用途。