-
-
[原创] 看雪·2026 KCTF > 第九题:丑寅同墟·星海抉择
-
发表于: 2026-8-22 13:35 40
-
KCTF2026 AI 题 Writeup
这次换了一个模型:gpt-5.6-sol。
工具:AgentRouter + VSCode + Codex 插件
速度的确很快耗时4分31秒

以下是 Writeup
1. 模型结构
由 model_def.py 可知,输入字符串首先被转换为字符 ID:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
对应 ID 范围为 0..61,不足 16 位时使用 0 补齐。
模型计算过程为:
h = ReLU(W @ x + b)
logits = lm_head(h)
其中 x 是长度为 16 的整数向量,W 的形状为 21 x 16。
2. 分析输出层
从 model.safetensors 中提取 lm_head:
- token
0..61的 bias 都是-10000 - token
62(<success>)的权重为:
[1, -1e10, -1e10, ..., -1e10]
bias 为:
-376131.21875
- token
63(<fail>)的 logit 恒为:
0.4
因此,要输出 <success>,必须满足:
h[1] = h[2] = ... = h[20] = 0
否则 success logit 会因为 -1e10 * h[i] 变成极小值。
同时需要:
h[0] - 376131.21875 > 0.4
第 0 行 bias 为 311558.71875,且权重均为整数,因此条件等价于:
W[0] @ x >= 64573
3. 转换为整数规划
对输入向量 x 求解:
W[1:] @ x + b[1:] <= 0
W[0] @ x >= 64573
0 <= x[i] <= 61
x[i] 为整数
使用 scipy.optimize.milp 求解,得到:
x = [15, 1, 10, 16, 2, 0, 2, 6,
12, 7, 15, 10, 1, 6, 6, 6]
按照 tokenizer 反解:
15 -> f
1 -> 1
10 -> a
16 -> g
2 -> 2
0 -> 0
6 -> 6
12 -> c
7 -> 7
得到字符串:
f1ag2026c7fa1666
4. 最终验证
该输入经过第一层后的隐藏状态为:
[376131.71875, 0, 0, ..., 0]
因此:
logit(<success>) = 376131.71875 - 376131.21875 = 0.5
logit(<fail>) = 0.4
0.5 > 0.4,模型输出 token 62,即 <success>。
Flag
f1ag2026c7fa1666
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
赞赏
他的文章
赞赏
雪币:
留言: