2026软件系统安全赛-misc

本文最后更新于 2026年4月9日 晚上

前言

这个比赛水温真的很高。唯一一道简单点的misc从开赛一直卡着我,最后还是依靠GPT神力梭出来的。。。赛后一直耿耿于怀,现在必须亲手解决它。

来拿题目附件👇

📥 题目附件下载
文件名:618057b9-f140-4e4a-9351-286ddc1d57d4.zip
大小:364 KB
点我下载

题解

解压附件拿到一个未知文件steganography_challenge,看名字就知道是隐写挑战,至于隐写在第几层…你且解着。

扔进010 editor

看到一堆F开头,加上离得不远的PNG标识,聪明的宝宝们应该已经有思路了。直接拉到底,找到PNG标准结尾AE 42 60 82————

唉?末尾有个layer2.png的可读文本提示?那不正好印证了判断,直接从89 50 4E 47开始,取到AE 42 60 82,保存为一个完整的png。

然后你会发现这个png根本无法显示。

不信邪的话,可以带上末尾的附加信息,从png头开始截到最后再保存为png。

这时候可以正常打开,但很快你就会发觉它的诡异之处。首先它看起来是这样的

有点崩坏对吧?到这还勉强可以接受,那等到开始对它执行各种misc扫描工具这一步时,各个工具开始疯狂爆红呢?stegsolve之类的工具也是根本用不了。

此时有宝宝们发现不对劲了,这似乎是一条错误的道路。你猜对了。

重新回到010界面,观察这个文件的前几字节:

FF FF FF FF 27 1C

你说有没有一种可能,前面那一堆FF就是人为修改后的结果。跟我们熟悉的7z魔数比较一下:

37 7A BC AF 27 1C

后面五位都是一样的,很难说这不是作者故意留下来的线索。

将文件头改为37 7A BC AF 27 1C,保存为.7z文件,Bandizip打开。

恭喜你通过了第一关

分离出正确的layer2.png之后,就可以用正常的方式检查隐藏信息了。

检查到LSB隐写时,用Stegsolve打开,通道全选零。

发现藏了一个zip,里面还嵌套着一个flag.zip。那还说啥了直接save bin,保存为123.zip。

直接打开会报错。别慌,右键选Bandizip打开。

看来藏的东西还挺多。先解压出123,尝试打开各个小文件夹,发现都要密码。

寻找其他提示信息无果后,注意到pass系列的六个zip内含的data都具有相同且较小的字节数,尝试CRC32爆破。注意要内部文件的CRC,不是压缩包的。

打开WSL进入题目目录,运行下方指令一次性获取六个CRC32

1
for f in pass*.zip; do echo "== $f =="; unzip -lv "$f"; done

得到CRC32分别为

1
2
3
4
5
6
ce70d424  
f90c8a70
ff3fe4bb
242a5387
9a27098e
d3f6df9f

编写一个专门用来爆破的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import zlib
import itertools

targets = {
'ce70d424': None,
'f90c8a70': None,
'ff3fe4bb': None,
'242a5387': None,
'9a27098e': None,
'd3f6df9f': None
}

# 全可打印字符
charset = bytes(range(32, 127))

print("开始爆破(含特殊字符)...")

for data in itertools.product(charset, repeat=4):
b = bytes(data)
crc = format(zlib.crc32(b) & 0xffffffff, '08x')

if crc in targets and targets[crc] is None:
try:
targets[crc] = b.decode()
except:
targets[crc] = str(b)
print(f"[+] 找到: {crc} -> {targets[crc]}")

if all(v is not None for v in targets.values()):
break

print("\n最终结果:")
password = ""
for k, v in targets.items():
print(k, "->", v)
password += v

print("\n拼接密码:", password)

运行,等几分钟就能得到密码

用这个密码c1!xxtLf%fXYPkaA去解锁flag.zip,得到文本文件。打开只有一句话flag is here,但是左下角显示整整有348个字符,不用想,零宽字符隐写。

ctrl+A全选复制,先扔进Sublime Text查看零宽字符类型,发现只有200B和200C两种。再到网站http://1o1o.xyz/html/ZeroWidthSteg1.html进行零宽字符的解密。

按照我给的图示进行操作:

解密后得到hidden_data。加个扩展名变成hidden_data.txt,然后记事本打开得到flag。

dart{bf4100d9-cc8d-48f6-a095-54cbfad189e1}


2026软件系统安全赛-misc
https://koyanrush.github.io/2026/03/23/Software-System-Security-2026/
作者
Koyanrush
发布于
2026年3月23日
许可协议