首页
社区
课程
招聘
[原创] 看雪·2026 KCTF > 第九题:丑寅同墟·星海抉择
发表于: 2026-8-22 13:35 40

[原创] 看雪·2026 KCTF > 第九题:丑寅同墟·星海抉择

htg 活跃值
7
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内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回