[长城杯 2021 政企组] —小明的电脑
知识点:取证+编码套娃
题目分析
1.上面的文件一看就是DumpIT
导出的文件,直接VOL
分析,然后找到一张secret.png
的图片
用LSB分析一下得到
得到密码b651b102
2.下面的文件是一个倒叙的压缩包,写个脚本还原
data = open("fl4g",'rb').read()[::-1]
file = open("flag.zip","wb+").write(data)
print(data)
得到
分析里面的内容,看了一下怀疑是PHP的字节码文件但是没什么思路,于是又去看了一下
有一个Hint
文件,打开看看
感觉没什么用,直接把中间的URL字符串直接去解了。
可以看到后面
应该就是加密顺序url-UU-QP-GZIP
第一次解密后每一行基本都是M开头的,然后再去UUencode解个密得到等号开头的Quoted-printable
,然后去解密,得到如下
然后最后得到的ZIP
里面一个文本,是BAES64
解码之后又是一个7Z
,然后在解压
里面是42个TXT
然后TXT
里面是一连串的坐标,我们直接画图看看
初步测试了一下应该是每个TXT都有一段信息被删除了,所有的TXT
都是640*480
大小的
先写一个脚本提取出来,摸了一会,终于把脚本摸出来了
list = [(x,y) for x in range(640) for y in range(480)]
set1 = set(list)
Flagall = [set1.copy() for _ in range(42)]
new_data = []
for i in range(42):
data = open(str(i)+".txt",'r')
for line in data.readlines():
x1,y1 = line.replace("\n","").split(" ")
Flagall[i].discard((int(x1),int(y1)))
data.close()
new_data = [str(i).replace("(","").replace(")","").replace(",","") for i in Flagall[i]]
for j in new_data:
new = open("new/"+str(i)+".txt",'a+').write(str(j)+"\n")
绘图脚本
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mat
mat.rcParams['font.family'] = 'SimSun'
mat.rcParams['font.sans-serif'] = 'SimSun'
for i in range(42):
x, y = np.loadtxt('new/'+str(i)+'.txt',unpack=True)
plt.plot(x, y, '*', label='Data', color='pink')
plt.savefig("pic/"+str(i)+'.png')
plt.close()
然后手动解码写入TXT
,经过测试低频1高频是0。
然后脚本转回字符串即可
转一下
得到结果