内存取证

内存取证

工具

volatility是内存取证的工具,这里我使用的是打包好了的可执行文件

volatility下载地址:https://www.volatilityfoundation.org/releases

题目

题目链接:

https://www.yunyansec.com/#/experiment/expdetail/3

朴实无华的取证

解题过程

查看系统信息

先使用命令volatility -f 朴实无华的取证.raw iamgeinfo查看系统信息

上面的系统都有可能,主要是第一个

查看运行程序列表

命令:volatility -f 朴实无华的取证.raw --profile=WinXPSP2x86 pslist

这里有三处需要注意,mspaint是画图工具,360zip是解压工具,notepad是笔记本,接下来重点放在这几处

查看文件

命令:volatility -f 朴实无华的取证.raw --profile=WinXPSP2x86 filescan,这里可以使用grep来指定搜索的字符串 格式如下:volatility -f 朴实无华的取证.raw --profile=WinXPSP2x86 filescan | grep flag

可以看到过滤出了flag的相关数据

提取文件

接下来需要把文件dump下来,命令:volatility -f 朴实无华的取证.raw --profile=WinXPSP2x86 dumpfiles -Q 偏移量 -D ./(-D指定文件夹,这里aaa表示存储到aaa文件夹中)

可以在aaa文件夹中找到dump下来的文件

得到

还有一个加了密的zip文件,这时候注意我们的notepad还没有被使用,可以去看看信息

打开进程

命令:volatility -f 朴实无华的取证.raw --profile=WinXPSP2x86 notepad

这样就得到了encrypt的密码

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>

int main()
{
char str[]="FDCB[8LDQ?ZLOO?FHUWDLQ)B?VXFFHHG?LQ?ILJKWLQJ?WKH?HSLGHPLF]";
for(int i = 0; i < strlen(str); i++)
{
str[i] += 32;
if(str[i] >='a'+3 && str[i]<='w'+3)
str[i]-=3;
else if(str[i]=='a')
str[i]='x';
else if(str[i]=='b')
str[i]='y';
else if(str[i]=='c')
str[i]='z';
else if(str[i]=='|')
str[i]='_';
}
printf("%s",str);
return 0;
}

得到flag:cazy{Xian_will_certainIy_succeed_in_fighting_the_epidemic}