说明
本文参考了一下资料,感谢各位师傅的帮助:
https://github.com/volatilityfoundation/volatility https://www.volatilityfoundation.org/ https://www.cnblogs.com/Junglezt/p/16027761.html (主要参考) https://www.freebuf.com/articles/database/266738.html
1. Volatility介绍
Volatility是一款开源的内存取证分析工具,支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证方式。该工具是由python开发的,目前支持python2、python3环境。接下来小编将带领大家学习Volatility工具的安装及使用。
参考:http://www.hackdig.com/09/hack-484669.htm
volatility(挖楼推了推) 是一个开源的框架,能够对导出的内存镜像进行分析,能够通过获取内核的数据结构,使用插件获取内存的详细情况和运行状态,同时可以直接dump系统文件,屏幕截图,查看进程。
参考:[https://www.cnblogs.com/Junglezt/p/16027761.html](https://www.cnblogs.com/Junglezt/p/16027761.html) 可以使用 -h 参数获取使用方法和插件介绍,列举几个常用到的命令 imageinfo:显示目标镜像的摘要信息,这常常是第一步,获取内存的操作系统类型及版本,之后可以在 –profile 中带上对应的操作系统,后续操作都要带上这一参数 pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以 pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程 psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程 cmdscan:可用于查看终端记录 notepad:查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox) filescan:扫描所有的文件列表 linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’ dumpfiles:导出某一文件(指定虚拟地址) 需要指定偏移量 -Q 和输出目录 -D memdump:提取出指定进程,常用foremost 来分离里面的文件 需要指定进程-p [pid] 和输出目录 -D editbox:显示有关编辑控件(曾经编辑过的内容)的信息 screenshot:保存基于GDI窗口的伪截屏 clipboard:查看剪贴板信息 iehistory:检索IE浏览器历史记录 systeminfo:显示关于计算机及其操作系统的详细配置信息(插件) hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码) mftparser:恢复被删除的文件 svcscan:扫描 Windows 的服务 connscan:查看网络连接 envars:查看环境变量 dlllist: 列出某一进程加载的所有dll文件 hivelist: 列出所有的注册表项及其虚拟地址和物理地址 timeliner: 将所有操作系统事件以时间线的方式展开
2. Volatility安装
目前作者已公布了两个版本的Volatility,Volatility2是基于py2环境,Volatility3是基于py3环境,目前可以在github上下载安装,也可以直接在官网下载直接运行:
github环境:
https://github.com/volatilityfoundation/volatility
官网直接下载使用:
https://www.volatilityfoundation.org/
直接下载可执行文件直接运行:
安装的话,可以从github或者官网下载,利用python2进行安装,也可以直接下载编译好的可执行文件直接运行,在这里因为我的kali出了一点问题,所以直接下载mac版的可执行文件运行。
文件下载的话,不要使用Chrome版,下载不下来,需要使用其他的浏览器来下载。
在这里使用命令看下:./volatility_2.6_mac64_standalone -h
3. volatility使用
在这里以分析vm虚拟机的镜像文件为例,在这复制下winserver2003的vm暂停文件:
3.1 获取内存镜像版本信息
使用方法是:volatility -f 文件名 imageinfo
直接使用命令分析:
./volatility -f 2003.vmem imageinfo
当前可以分析出来结果:
$ ./volatility -f 2003.vmem imageinfo Volatility Foundation Volatility Framework 2.6 INFO : volatility.debug : Determining profile based on KDBG search... Suggested Profile(s) : Win2003SP0x86, Win2003SP1x86, Win2003SP2x86 AS Layer1 : IA32PagedMemoryPae (Kernel AS) AS Layer2 : FileAddressSpace (/Users/crow/Security/crow_tools/19_取证/volatility_2.6_mac64_standalone/2003.vmem) PAE type : PAE DTB : 0x503000L KDBG : 0x8088e3e0L Number of Processors : 1 Image Type (Service Pack) : 2 KPCR for CPU 0 : 0xffdff000L KUSER_SHARED_DATA : 0xffdf0000L Image date and time : 2022-08-09 10:30:16 UTC+0000 Image local date and time : 2022-08-09 18:30:16 +0800
3.2 pslist 列出内存中的进程
可以列出内存中运行的进程的pid,ppid等信息:
volatility -f 镜像名 --profile=第一步获取的版本信息 pslist`
在第一步获取的是Win2003SP0x86,所以命令组合以下就是:
./volatility -f 2003.vmem --profile=Win2003SP0x86 pslist
但是命令执行之后,并未获取到有效的进程信息:
在这里将镜像版本信息更换一下再试试:
./volatility -f 2003.vmem --profile=Win2003SP1x86 pslist
3.3 导出指定进程 memdump
在我们pslist后,会给出进程的PID,只需要指定PID就可以将进程导出:
当前svchost的进程为1256,运行命令为:
./volatility -f 2003.vmem --profile=Win2003SP1x86 memdump -p 1256 -D ./result
导出的文件名进程的PID,后缀名为dmp
可以使用strings -e l 2616.dmp | grep flag,筛选其中的flag
-e为选择字符的大小,l为32bit为一个字符
- • 这段不是我的










