很遗憾这题比赛的时候没做出来因为取证题确实不太会,之前没有接触过。
所以觉得很难得有取证题,就来尝试复现一下。
这题取证题,里面还套了一个密码学的题目,恶心。
由于没做过取证题,先要安装一个volatility
下载地址
https://github.com/volatilityfoundation/volatility
下完后开始进行镜像的分析
python vol.py -f /home/kali/桌面/Twin.vmem imageinfo
查看一下Win7SP1x64
的进程
python vol.py -f /home/kali/桌面/Twin.vmem --profile=Win7SP1x64 pslist
最后一个是winrar猜测可能存在压缩包的处理,查看zip。
python vol.py -f /home/kali/桌面/Twin.vmem --profile=Win7SP1x64 filescan |grep zip
第二个sea.zip是有用的东西,于是选择把文件dump出来
python vol.py -f /home/kali/桌面/Twin.vmem --profile=Win7SP1x64 dumpfiles -Q 0x000000003e557990 -D ./ -u
得到压缩包,拉到windows里面来
看透,所以对应的是outgess的隐写,密码是弱口令123456
outguess -k "123456" -r sea.jpg flag.txt
得到文件
4266gj2zn17b2jo5b62k73g22xg6j658350r5771vd40h4bd2ns33q30651y57s6752su3q05881hs3h53nb3603co2mv40l58n3da3f61i5
根据之前的镜像文件名,对应的是双⼗六进制编码https://www.calcresult.com/misc/cyphers/twin-hex.html
得到字符串
Vnw3HC07BDgbBWNRGTx2fSckf399V1Z9CxIvHVd6fHsaEnR8fX40NyQ7JhM8CWV5fgMNN24=
回到原来的加密函数
#!/user/bin/python2
import random
def r(s, num):
l=""
for i in s:
if(ord(i) in range(97,97+26)):
l+=chr((ord(i)-97+num)%26+97)
else:
l+=i
return l
def x(a, b):
return chr(ord(a)^ord(b))
def encrypt(c):
secret = c
n=random.randint(1,1000)
for i in range(n):
secret = r(secret, random.randint(1,26))
secret = secret.encode('base64')
l = ""
for i in range(len(secret)):
l += x(secret[i], secret[(i+1)%len(secret)])
return l.encode('base64')
flag = "#################"
print "secret =", encrypt(flag)
#secret = The key you got
爆破解密得到flag,这里我还没空研究逆脚本,先黏贴一下套宝的。
套宝原文地址:https://blog.csdn.net/qq_42880719/article/details/116278751?spm=1001.2014.3001.5501
逆脚本:
import base64
import random
str = "Vnw3HC07BDgbBWNRGTx2fSckf399V1Z9CxIvHVd6fHsaEnR8fX40NyQ7JhM8CWV5fgMNN24="
strs = base64.b64decode(str).decode("utf-8")
#for i in range(len(strs)):
# print(ord(strs[i]))
def r(s, num):
l=""
for i in s:
if(ord(i) in range(97,97+26)):
l+=chr((ord(i)-97+num)%26+97)
else:
l+=i
return l
for i in range(86,128):
f = -1
tmp = [""]*len(strs)
tmp[-1] = chr(i)#恢复最后一位数
while -f != len(strs):
tmp[f-1]=chr(ord(strs[f])^ord(tmp[f]))
f-=1
s= tmp[-1]
for i in range(len(tmp)-1):
s+=tmp[i]
try:
s=base64.b64decode(s).decode("utf-8")
for i in range(1,26):
flag=r(s,i)
print(flag)
except:
pass