相关题目:简单的内存取证vmem
查看操作系统的信息
1. imageinfo
- 要获得正在分析的内存样本的高级摘要,则使用 imageinfo 命令。
- 用于识别操作系统、服务包和硬件架构
vol -f "file" imageinfo
# 或
vol -f "file" --profile=<PROFILE> kbdgscan
imageinfo 输出告诉您 --profile=PROFILE
在使用其他插件时应作为参数传递的建议配置文件。
└─# vol.py -f Windows7.vmem imageinfo
Volatility Foundation Volatility Framework 2.6.1
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_24000, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_24000, Win7SP1x64_23418
AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
AS Layer2 : FileAddressSpace (/mnt/hgfs/经典题目/内存取证/vmem/Windows7.vmem)
PAE type : No PAE
DTB : 0x187000L
KDBG : 0xf80003e560a0L
Number of Processors : 4
Image Type (Service Pack) : 1
KPCR for CPU 0 : 0xfffff80003e57d00L
KPCR for CPU 1 : 0xfffff880009ef000L
KPCR for CPU 2 : 0xfffff88004569000L
KPCR for CPU 3 : 0xfffff880045df000L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2022-09-06 06:06:43 UTC+0000
Image local date and time : 2022-09-06 14:06:43 +0800
注意:除非事先提供正确的配置文件,否则 该 imageinfo
插件将不适用于休眠文件。这是因为重要的结构定义在不同的操作系统之间有所不同
2. kbdgscan
这里由上面imageinfo
得到建议配置文件,再用kdbgscan
扫描
└─# vol.py -f Windows7.vmem --profile=Win7SP1x64 kdbgscan
Volatility Foundation Volatility Framework 2.6.1
**************************************************
Instantiating KDBG using: Kernel AS Win7SP1x64 (6.1.7601 64bit)
Offset (V) : 0xf80003e560a0
Offset (P) : 0x3e560a0
KDBG owner tag check : True
Profile suggestion (KDBGHeader): Win7SP1x64
Version64 : 0xf80003e56068 (Major: 15, Minor: 7601)
Service Pack (CmNtCSDVersion) : 1
Build string (NtBuildLab) : 7601.17514.amd64fre.win7sp1_rtm.
PsActiveProcessHead : 0xfffff80003e8cb90 (39 processes)
PsLoadedModuleList : 0xfffff80003eaae90 (131 modules)
KernelBase : 0xfffff80003c65000 (Matches MZ: True)
Major (OptionalHeader) : 6
Minor (OptionalHeader) : 1
KPCR : 0xfffff80003e57d00 (CPU 0)
KPCR : 0xfffff880009ef000 (CPU 1)
KPCR : 0xfffff88004569000 (CPU 2)
KPCR : 0xfffff880045df000 (CPU 3)
查看进程与DLL
1. pslist
- 要列出系统的进程,就使用
pslist
命令。 - 这将遍历指向的双向链表,
PsActiveProcessHead
并显示偏移量、进程名称、进程 ID、父进程 ID、线程数、句柄数以及进程启动和退出的日期/时间。 - 此插件不会检测隐藏或未链接的进程(但 psscan 可以做到)。
vol -f "file" --profile=<PROFILE> pslist
- 具体使用方法
└─# vol.py -f Windows7.vmem --profile=Win7SP1x64 pslist
Volatility Foundation Volatility Framework 2.6.1
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start Exit
------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0xfffffa8012d049e0 System 4 0 102 376 ------ 0 2022-09-05 09:09:35 UTC+0000
0xfffffa801dd0eb30 smss.exe 292 4 2 32 ------ 0 2022-09-05 09:09:35 UTC+0000
0xfffffa80141e1800 csrss.exe 380 364 9 546 0 0 2022-09-05 09:09:36 UTC+0000
0xfffffa801445c060 wininit.exe 432 364 3 84 0 0 2022-09-05 09:09:37 UTC+0000
0xfffffa8014a52b30 csrss.exe 440 424 10 213 1 0 2022-09-05 09:09:37 UTC+0000
0xfffffa8014cb3b30 services.exe 492 432 9 223 0 0 2022-09-05 09:09:38 UTC+0000
默认情况下,
pslist
显示虚拟偏移量
,_EPROCESS
但可以使用-P
开关获得物理偏移量
vol -f "file" --profile=<PROFILE> pslist -P
- 改为物理偏移量
└─# vol.py -f Windows7.vmem --profile=Win7SP1x64 pslist -P Volatility Foundation Volatility Framework 2.6.1 Offset(P) Name PID PPID Thds Hnds Sess Wow64 Start Exit ------------------ -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------ 0x000000005fe819e0 System 4 0 102 376 ------ 0 2022-09-05 09:09:35 UTC+0000 0x0000000056a49b30 smss.exe 292 4 2 32 ------ 0 2022-09-05 09:09:35 UTC+0000 0x000000005ebe1800 csrss.exe 380 364 9 546 0 0 2022-09-05 09:09:36 UTC+0000 0x000000005e65c060 wininit.exe 432 364 3 84 0 0 2022-09-05 09:09:37 UTC+0000 0x000000005e052b30 csrss.exe 440 424 10 213 1 0 2022-09-05 09:09:37 UTC+0000 0x000000005deb3b30 services.exe 492 432 9 223 0 0 2022-09-05 09:09:38 UTC+0000 0x000000005dec1810 winlogon.exe 516 424 3 119 1 0 2022-09-05 09:09:38 UTC+0000 0x000000005ded7800 lsass.exe 544 432 9 573 0 0 2022-09-05 09:09:38 UTC+0000
2. pstree
- 要以树的形式查看进程列表,则使用
pstree
命令。 - 这使用与相同的技术枚举进程
pslist
,因此它也不会显示被隐藏或未链接的进程。 - 使用缩进和句点指示子进程。
vol -f "file" --profile=<PROFILE> pstree
- 具体使用方法(注意看前面有点号,用于表示子进程)
└─# vol.py -f Windows7.vmem --profile=Win7SP1x64 pstree
Volatility Foundation Volatility Framework 2.6.1
Name Pid PPid Thds Hnds Time
-------------------------------------------------- ------ ------ ------ ------ ----
0xfffffa801445c060:wininit.exe 432 364 3 84 2022-09-05 09:09:37 UTC+0000
. 0xfffffa8014cd7800:lsass.exe 544 432 9 573 2022-09-05 09:09:38 UTC+0000
. 0xfffffa8014cd3200:lsm.exe 552 432 10 141 2022-09-05 09:09:38 UTC+0000
. 0xfffffa8014cb3b30:services.exe 492 432 9 223 2022-09-05 09:09:38 UTC+0000
.. 0xfffffa80151cb9e0:svchost.exe 896 492 13 379 2022-09-05 09:09:39 UTC+0000
... 0xfffffa80142a4520:dwm.exe 932 896 5 121 2022-09-05 09:38:12 UTC+0000
.. 0xfffffa801516b7f0:SearchIndexer. 2668 492 12 642 2022-09-05 09:11:42 UTC+0000
... 0xfffffa8014667b30:SearchFilterHo 1852 2668 5 104 2022-09-06 06:05:57 UTC+0000
... 0xfffffa801397f900:SearchProtocol 1600 2668 8 283 2022-09-06 06:05:57 UTC+0000
.. 0xfffffa8013467b30:wmpnetwk.exe 2444 492 11 235 2022-09-05 09:38:19 UTC+0000
.. 0xfffffa801513c630:svchost.exe 660 492 11 375 2022-09-05 09:09:39 UTC+0000
... 0xfffffa801550e060:WmiPrvSE.exe 1764 660 11 235 2022-09-05 09:09:41 UTC+0000
3. psscan
- 要使用池标记扫描 (
_POOL_HEADER
) 枚举进程,则使用该psscan
命令。 - 这可以找到先前终止(非活动)的进程和已被 rootkit 隐藏或取消链接的进程
- 缺点是 rootkit 仍然可以通过覆盖池标记值来隐藏
# 基础语法
vol -f "file" --profile=<PROFILE> psscan
- 具体用法
└─# vol.py -f Windows7.vmem --profile=Win7SP1x64 psscan
Volatility Foundation Volatility Framework 2.6.1
Offset(P) Name PID PPID PDB Time created Time exited
------------------ ---------------- ------ ------ ------------------ ------------------------------ ------------------------------
0x0000000056a49b30 smss.exe 292 4 0x0000000053cc6000 2022-09-05 09:09:35 UTC+0000
0x000000005ded7800 lsass.exe 544 432 0x000000004fdc1000 2022-09-05 09:09:38 UTC+0000
0x000000005dee9b30 svchost.exe 1208 492 0x0000000049375000 2022-09-05 09:09:40 UTC+0000
0x000000005df97b30 powercfg.exe 444 492 0x000000002eb7b000 2022-09-06 05:46:58 UTC+0000 2022-09-06 05:48:08 UTC+0000
0x000000005e052b30 csrss.exe 440 424 0x0000000051449000 2022-09-05 09:09:37 UTC+0000
0x000000005e467b30 SearchFilterHo 1852 2668 0x0000000002c11000 2022-09-06 06:05:57 UTC+0000
0x000000005e65c060 wininit.exe 432 364 0x0000000051876000 2022-09-05 09:09:37 UTC+0000
0x000000005e675450 notepad.exe 1780 1296 0x0000000030f7f000 2022-09-05 09:45:11 UTC+0000 2022-09-06 06:06:00 UTC+0000
...
最后一列是表明进程已终止,是退出的时间
4. dlllist
- 显示dll列表
vol -f "file" --profile=<PROFILE> dlllist
- 具体用法(显示所有的)
└─# vol.py -f Windows7.vmem --profile=Win7SP1x64 dlllist
Volatility Foundation Volatility Framework 2.6.1
************************************************************************
System pid: 4
Unable to read PEB for task.
************************************************************************
smss.exe pid: 292
Command line : \SystemRoot\System32\smss.exe
Base Size LoadCount LoadTime Path
------------------ ------------------ ------------------ ------------------------------ ----
0x00000000477d0000 0x20000 0xffff 1970-01-01 00:00:00 UTC+0000 \SystemRoot\System32\smss.exe
0x0000000076f30000 0x1a9000 0xffff 1970-01-01 00:00:00 UTC+0000 C:\Windows\SYSTEM32\ntdll.dll
************************************************************************
csrss.exe pid: 380
如果想要过滤的显示某个,则可以使用-p
或--pid
vol -f "file" --profile=<PROFILE> dlllist -p PID进程号
例子略。
如果有进程被结束了,还想看到它的DLL
,则可以先通过psscan获取到被结束的进程的偏移地址(即第一列的数据),使用方法如下
vol -f "file" --profile=<PROFILE> --offset=<OFFSET>
5. dlldump
- 用于提取DLL并将其转储到磁盘进行分析
- 转储所有进程中的所有 DLL
- 转储来自特定进程的所有 DLL(使用
--pid=PID
) - 从被隐藏或未链接的进程中转储所有 DLL(使用
--offset=OFFSET
) - 从进程内存中的任何位置转储 PE(使用
--base=BASEADDR
),此选项对于提取隐藏的 DLL 很有用 - 转储一个或多个与正则表达式匹配的 DLL (
--regex=REGEX
),区分大小写 (--ignore-case
)
# 把所有的.dll的文件提取到指定的文件夹中
vol -f "file" --profile=<PROFILE> dlldump -D 指定目录/
# 提取指定 进程 的.dll文件到指定文件夹
vol -f "file" --profile=<PROFILE> dlldump -p PID号 -D 指定目录/
# 指定base
vol -f "file" --profile=<PROFILE> dlldump -p PID号 -D 指定目录/ --base=<BASE>
# 其余同上,大差不差
如果提取失败,就像上面的几个 DLL 一样,这可能意味着该 DLL 中的某些内存页面不是内存驻留的(由于分页)。
6. handles
- 要显示进程中打开的handle,则使用 handles。
vol -f "file" --profile=<PROFILE> handles
如果要使用过滤器,可选择使用-p
过滤PID进程,使用-t
或--object-type=
过滤对象类型(见上图)
vol -f "file" --profile=<PROFILE> handles -p <PID> -t <Type>
7. getsids
- 要查看与进程关联的 SID(安全标识符),使用 getsids 命令
8. cmdscan
- 扫描输入到shell中的命令
- 控制台主机进程的名称(csrss.exe 或 conhost.exe)
- 使用控制台的应用程序的名称(无论进程使用 cmd.exe)
- 命令历史缓冲区的位置,包括当前缓冲区计数、最后添加的命令和最后显示的命令
- 应用进程句柄
其他(consoles、privs、envars、verinfo详见 博客