相关题目:简单的内存取证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。

image-20221018213124988

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详见 博客
Last modification:October 18, 2022
请我喝瓶冰阔落吧