这个是ctf逆向题目,正确的flag是ISCC{A35_128_51pH4sh_2-4_CTF_K3...

创建于:2026年5月15日

使用 GPT-5.5 Thinking 回答 Chat01

问题

Box.bin

这个是ctf逆向题目,正确的flag是ISCC{A35_128_51pH4sh_2-4_CTF_K3y3d_H4sh},你仔细分析这个文件,
给我详细的解题步骤和解题脚本

思考

undefined

思考

undefined

思考

我已经把本地文件的关键结构跑出来了:它能稳定恢复出 AES-128 主密钥 92cd335ab10f78e4296cd58a11f04b9e,并解密首块为 16 个 0x11。这和你给的 ISCC{...} 不一致,后者更像另一道 WASM + AES/SipHash 题的结果。

Thought for 3m 42s

回答

我仔细分析了你上传的 Box.bin 后,结论是:** 这个文件本身解出来的不是你给的 ISCC{A35_128...},而是另一道 AES-DFA 型题目的结果**。

你给的 ISCC{A35_128_51pH4sh_2-4_CTF_K3y3d_H4sh} 对应的公开题解流程是 WASM 逆向 + 魔改 AES + SipHash + 爆破,并且题解中明确提到:下载得到 bin 后 xor 0x21 得到 wasm,程序里用 SipHash 派生 AES key,再解出该 ISCC flag。(Liv's blog)
但你上传的 Box.bin 不符合这个结构:它不是 WASM,也没有该题里的密文结构。


一、上传文件的真实结构

本地分析结果:

text
Box.bin: data size = 48016 = 3001 * 16

也就是说它刚好可以按 16 字节 AES block 切成 3001 个块。

第 0 块:

text
C0 = 23d9a3b3456525a3f8f6f795d7ed1271

把其它块和第 0 块逐字节比较,发现 16 个块只和第 0 块相差 4 字节:

text
diff positions [0, 7, 10, 13] : block 5, 90, 275, 560 diff positions [1, 4, 11, 14] : block 44, 65, 230, 495 diff positions [2, 5, 8, 15] : block 27, 152, 189, 434 diff positions [3, 6, 9, 12] : block 14, 119, 324, 377

这正是 AES DFA 差分故障攻击 的典型特征:
在倒数第二轮附近注入单字节故障,经过 MixColumns 和最后一轮 ShiftRows 后,最终密文只会在 4 个特定位置发生变化。


二、攻击思路

AES 最后一轮没有 MixColumns,所以最后一轮关系为:

text
C[i] = Sbox(state[i]) ^ round_key_10[i]

因此对于正确密文 C 和故障密文 C',枚举最后一轮 key byte k

python
delta = InvSbox(C[i] ^ k) ^ InvSbox(C_fault[i] ^ k)

同一列的 4 个 delta 必须满足 AES MixColumns 单字节故障扩散形式:

text
(2e, e, e, 3e) (3e, 2e, e, e ) (e, 3e, 2e, e ) (e, e, 3e, 2e)

对每组 4 个故障密文取交集,可以唯一恢复 AES 第 10 轮轮密钥:

text
round10 key = 4fd5879336564c0df9e84e812bf94bb8

然后逆 AES-128 key schedule,得到 master key:

text
master key = 92cd335ab10f78e4296cd58a11f04b9e

验证:

text
AES-128-ECB.decrypt(C0) = 11111111111111111111111111111111

这里输出是 16 个字节 0x11,不是 ASCII 字符 '1'

所以该上传文件对应的 flag 应为:

text
flag{92cd335ab10f78e4296cd58a11f04b9e}

三、解题脚本

我已经把可运行脚本放在这里:

下载 solve_box.py

运行方式:

bash
python3 solve_box.py Box.bin

输出:

text
[+] blocks: 3001 [+] correct ciphertext C0: 23d9a3b3456525a3f8f6f795d7ed1271 [+] round10 key: 4fd5879336564c0df9e84e812bf94bb8 [+] master key: 92cd335ab10f78e4296cd58a11f04b9e [+] decrypt(C0): 11111111111111111111111111111111 [+] flag: flag{92cd335ab10f78e4296cd58a11f04b9e}

四、关于你给的 ISCC flag

你给的:

text
ISCC{A35_128_51pH4sh_2-4_CTF_K3y3d_H4sh}

确实能在另一道 ISCC 逆向题公开 WP 中看到;那道题流程是:

text
bin xor 0x21 -> wasm WASM main 随机 16 字节 0/1 key SipHash-2-4 派生 AES key 魔改 AES 解密 flag

公开 WP 最后也给出了这个 flag。(Liv's blog)

但这和你上传的 Box.bin 的结构完全不同。
如果你想要我写 ISCC{A35_128...} 那道 Enigma / WASM 题的详细 WP 和脚本,需要上传对应的原始 bin/wasm;当前这个 Box.bin 解出来的是上面的 AES-DFA 结果。

分享这个问答