Volatility命令语法
1.判断镜像信息,获取操作系统类型
Volatility -f xxx.vmem imageinfo
在查到操作系统后如果不确定可以使用以下命令查看
volatility - f xxx.vmem --profile= [ 操作系统 ] volshell
2.知道操作系统类型后,用--profile指定
volatility -f ?.img --profile=...
3.查看当前显示的notepad文本
volatility -f file.raw --profile=WinXPSP2x86 notepad
4.查看当前运行的进程
volatility -f file.raw --profile=WinXPSP2x86 psscan/pslist
5.扫描所有的文件列表(常常结合grep)
volatility -f file.raw --profile=WinXPSP2x86 filescan
6.根据offset提取出文件
volatility -f file.raw --profile=WinXPSP2x86 dumpfiles -D . -Q 0x.....
7.扫描 Windows 的服务
volatility -f file.raw --profile=WinXPSP2x86 svcscan
8.查看网络连接
volatility -f file.raw --profile=WinXPSP2x86 connscan
9.查看cmd命令历史
volatility -f memory --profile=Win7SP1x64 cmdscan
volatility 使用:
volatility -f <文件名> ---profile=<配置文件> <插件> [插件参数]
通过volatility --info获取工具所支持的profile,Address Spaces,Scanner Checks,Plugins
常用插件:
imageinfo:显示目标镜像的摘要信息,知道镜像的操作系统后,就可以在 --profile 中带上对应的操作系统
pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
mendump:提取出指定进程,常用foremost 来分离里面的文件
filescan:扫描所有的文件列表
hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容
svcscan:扫描 Windows 的服务
connscan:查看网络连接
内存取证的大概思路
首先确定镜像是何种操作系统的,命令imageinfo即可获取镜像信息。
需要获取的是计算机在这一时刻运行了哪些进程
Volatility的分析进程的命令,如pstree、pesscan、pslist......
filescan命令可以对打开的文件进行扫描。
命令dumpfile和memdump命令将相关数据导出,然后对导出的数据进行二进制分析。
熟悉Volatility工具的常用命令,结合其他类型的知识(图片隐写、压缩包分析等)对提取出的文件进行分析问题
例题:护网杯2018-MISC-easydump
来源:原题资源:https://pan.baidu.com/s/1z73M2MRr6W6AfM57lomF-w
提取码:1tf5
.img
文件,也是一种内存镜像,我们用volatility
然后就是列出进程pslist
最显眼的还是这个notepad.exe了
然后dump下来2580.dmp,binwalk查看,信息太多,直接foremost分离文件,里面发现有用的就是两个压缩包,解压是img文件。
但是这个文件同样使用volatility去跑,确没有信息,所以判断这个不是内存镜像文件。
先strings看一下
将img文件挂载在linux系统中
mount -o loop message.img /root/Desktop/m0re
挂载后,可以切换到该目录进行查看信息
cd m0re/
ls -all
在.Trash-0/file
下看到一个.message.swp
转存一下
cat .message.swp > m0re.txt
strings m0re.txt
hint.txt文件里面都是坐标,猜测是要画图
百度到的画图的python脚本
from PIL import Image
with open('hint.txt','r') as f:
points = f.readlines()
pic=Image.new('RGB',(600,600),'black')
pix=pic.load()
for i in points:
i=i.strip().split(' ')
pix[int(i[0]),int(i[1])]=(255,255,255)
pic.save('out.png','png')
得到二维码
识别后得到
Here is the vigenere key: aeolus, but i deleted the encrypted message
百度发现是维吉尼亚密码,密钥是aeolus
但是我们从前面得到了字符串,拿来试试
维吉尼亚密码在线解密
维吉尼亚密码有点类似凯撒密码,都是通过位移量来确定。