内存取证的reverse 题目链接:https://cybrics.net/files/20190717.zip.torrent
主要工具为:volatility ida
由于之前没使用过volatility,刚开始使用的是windows版,结果全是乱码,且进程目录也不全
windows版镜像查看结果
windows进程查看结果
进程信息Linux版本
j镜像信息 进程信息两者差距很大,建议的profiiles中最好使用winx64_17134,毕竟更新比较多,其他的话可能也会产生乱码,进程全部flase的问题
这里通过查看进程信息也没找到有用的东西,查看其中的文件可以找到两个在C盘的sys文件,全部dump下来
python vol.py -f /home/*********/dbg/20190717.mem --profile Win10x64_17134 moddump -b 0xfffff8005db00000 -D .
使用ida分析两个文件,有用的是Flagostor.sys
图片.png找到sub_FFFFF8005DAF14B0加密函数,其中有两个加密函数
图片.pngencrypt1
v9 = a2;
v8 = a1;
len = -1;
do
++len;
while ( *(a1="qweasdzxc"+ len) ); #计算字符串的长度
v6 = 0;
for ( i = 0; i < 256; ++i )
*(a2 + i) = i; #给数组赋值
for ( j = 0; j < 256; ++j )
{
_mm_lfence();
v2 = (*(v8 + j % len) + *(v9 + j) + v6) >> 31;
v6 = (v2 + *(v8 + j % len) + *(v9 + j) + v6) - v2;
switch((j + v9), (v6 + v9)); #数组中字符位置切换
}
return 0;
转换python为
def encrypt1(key):
table = []
for i in xrange(256):
table.append(i)
v6 = 0
for j in xrange(256):
v2 = ord(key[j%len(key)]) + table[j] + v6
v6 = ((v2&0xff) + v2) - v2
v = table[j]
table[j] = table[v6]
table[v6] = v
return table
第二个encrypt2函数
__int sub_FFFFF8005DAF12E0(__int a1, __int a2, __int a3)
{
v13 = a3;
v12 = a2;
v11 = a1;
v7 = 0;
v8 = 0;
v9 = 0;
len = -1;
do
++len;
while ( *(a2 + len) ); #计算字符串长度
while ( v9 < v10 )
{
v3 = v7 + 1;
v7 = (BYTE4(v3) + v7 + 1) - BYTE4(v3);
v4 = (*(v11 + v7) + v8) >> 31;
v8 = (v4 + *(v11 + v7) + v8) - v4;
switch((v7 + v11), (v8 + v11)); #switch
v5 = (*(v11 + v8) + *(v11 + v7)) >> 31;
*(v9 + v13) = *(v9 + v12) ^ *(v11 + (v5 + *(v11 + v8) + *(v11 + v7)) - v5);
++v9;
}
return 0;
}
大致和encrypt函数相同,转化为python为
def encrypt2(table,flagB):
l = len(flagB)
flag = []
for x in xrange(l):
flag.append('x')
local_38 = 0;
local_34 = 0;
local_28 = 0;
local_20 = l;
while (local_28 < local_20):
local_38 = local_38 + 1 & 0xff
local_34 = local_34 + table[local_38] & 0xff
aux = table[local_38]
table[local_38] = table[local_34]
table[local_34] = aux
flag[local_28] = table[table[local_38]+table[local_34] & 0xff] ^ ord(flagB[local_28])
local_28 = local_28 + 1;
return ''.join([chr(x) for x in flag])
联立得到 flag: cybrics{H1DD3N_D33P_1N_NTKRNL}
解密分析文件部分不复杂
{未完待续}
网友评论