VolgaCTF_MISC_WP

Palo arto

网址里面是一堆字加一张图片,分析了前端的源代码,没找到注释或者什么有用的东西,干脆把图片拿下来。

图片是 PNG 调色板图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from PIL import Image

img = Image.open("art.png")
print("mode =", img.mode) # 应该看到 P

data = list(img.getdata()) # 这里拿到的是调色板索引,不是 RGB

bits = [(x & 1) for x in data] # 取每个索引的最低位

out = bytearray()
for i in range(0, len(bits) // 8 * 8, 8):
b = 0
for bit in bits[i:i+8]:
b = (b << 1) | bit # 高位在前
out.append(b)

print(out[:80])
print(out[:80].decode("latin1"))

这个脚本可以直接拿到 flag 。

VolgaCTF{7h3r3_15_n0_m34n1ngfu1_m3ss4g3_h3r3}

Unsettled Huffman

附件是一个压缩包,常规方法用了没用,丢给 ai 之后直接帮我写出来了:

这题的关键不在 PNG 本身,而在 ZIP 的 deflate 分块方式

把压缩流拆开看,发现前面一段由很多 32768 字节的 block 组成,而这些 block 是否使用 stored / fixed Huffman 两种方式,正好可以当作二进制位来读。把前 384 个 block type 按位取反后转成 ASCII,得到真正的 flag:

VolgaCTF{D3FLATE_i$_f1exible_but_r4ther_c0mplex}

时间原因,这道题目我并没有进行复现。

另外我尝试了以下 reverse 的题目,发现是个 apk 包,还没有接触过,遂放弃

MISC 还有一道题目 Pac Man,是个 nes 红白机文件,没写出来,主要还是不会用那个 FCEUX

队友在里面改了豆子分数但是无果。