[长城杯 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。
然后脚本转回字符串即可

转一下

得到结果
本文介绍了一次名为“长城杯2021政企组”的网络安全挑战赛中的一道复杂题目,该题涉及取证分析、编码破解及图形绘制等多个步骤。文章详细记录了解题过程,包括使用VOL进行文件分析、LSB隐写术、ZIP文件逆序解压、PHP字节码文件处理、URL解码及图像坐标解析等。
5505

被折叠的 条评论
为什么被折叠?



