潮痕留声
一个PNG,扔进随波逐流可以得到末尾很长一串数据
1. 先按字节整体反转;
2. 再对每个字节做高低 4 bit 交换;
3. 得到 ZIP 文件。
from pathlib import Path
src = Path(r"C:\Users\q1388\Downloads\潮痕留声\data_end.txt")
raw = bytes.fromhex("".join(src.read_text(errors="ignore").split()))
def swap_nibble(x):
return ((x & 0x0f) << 4) | (x >> 4)
out = bytes(swap_nibble(b) for b in raw[::-1])
Path(r"outputs\tail_recovered.zip").write_bytes(out)
print(out[:8].hex())
恢复出一个加密的zip文件,再观察原图片的exif

找到一个掩码密码,对此进行爆破得到中间部分 D4fX

打开后得到另一个PNG,这个PNG有文本块,经过Base64解码后得到:
render-group-L4xGd -> Base64 is not the road here.
palette-trace-A8sB -> better_to_listen_than_to_stare
map-stamp -> light can lie, order cannot
同时在文件末尾夹杂了一个Wav文件,进行提取,看他的频率图(这里也可以用Audacity直接看)
ffmpeg -y -i tide_trace.wav -lavfi “showspectrumpic=s=8192×2048:legend=0:scale=log” spectrum.png

进行镜像翻转+180°旋转:

但是flag是UUID得格式,两个-之间需要四个字母,所以这里的顺序显然不对。此时剩下的唯一线索就是上一个修改过长宽得图像
对 Green 和 Alpha 的最低位异或:

得到这个顺序图,最终得到flag

flag{60a8d749-3760-4560-8bc7-86f2a7754dfa}
失序货栈
题目给出 127 个 `BOX-*` 文件,每个文件都是带传统 ZIP 加密的压缩包。外层 ZIP 密码是对应编号;解出后取短 Base32 片段,按解码后原始字节的 9 字节重叠恢复顺序,再 zlib inflate 得到 flag。
每个 `BOX-xx` 的密码就是编号:
– `BOX-01` -> `01`
– `BOX-09` -> `09`
– `BOX-100` -> `100`
解密后内容类似:
BOX-04 | data=PDND3EW5N3RDAEEF57ZRI7UAXKIDRP2CXFQNS5C3SUWRK=== | crc32=42fd8f19
其中 data 是 Base32,crc32 是 Base32 解码后原始字节的 CRC32。
接下来是base32的修复,利用CRC32校验进行枚举
取出 dataBase32 解码成原始 bytes对 bytes 算 CRC32和行尾的 crc32= 比较如果不一致,说明 Base32 字符里有错
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
for pos, old in enumerate(data):
if old == "=":
continue
for new in ALPHABET:
if new == old:
continue
candidate = data[:pos] + new + data[pos + 1:]
raw = base64.b32decode(candidate)
if crc32(raw) == target_crc:
print("fixed", pos, old, "->", new)
修复得错误:
BOX-10: pos 5 G -> O
BOX-14: pos 11 W -> K
BOX-30: pos 33 7 -> D
BOX-72: pos 39 J -> Z
BOX-77: pos 22 K -> W
BOX-88: pos 44 D -> 7
BOX-93: pos 16 2 -> Z
修复后,对每个短片段做 Base32 解码。按原始字节的 9 字节重叠恢复唯一顺序:
4, 14, 31, 94, 83, 72, 81, 50, 37, 77, 6, 69, 40, 10, 85, 80, 9, 30, 79, 67, 76, 93, 7, 68, 92, 88, 49
拼接后的数据以 zlib 头开始,直接解压:
得到明文:
final=flag{dffc94e8-0571-4e68-bbc3-f1534766f794}
END OF MANIFEST
Frame by Frame
问卷
略
