-
-
[原创]密码学wpKCTF07 - HexMaze Writeup
-
发表于: 2026-8-21 01:45 40
-
KCTF07 - HexMaze Writeup
1. 题目分析
HexMaze 是一个固定算法变换题。
题目说明:
- 算法仅包含:
- 字节编码;
- 十六进制位运算;
- 模 16 循环偏移;
- 固定位置重排;
- 固定摘要扰动。
- 不包含:
- 随机数;
- 随机 IV;
- 外部状态。
因此相同输入和密钥一定产生唯一输出。
密钥:
121
已知明密文:
TLU -> 94AA48550495
Hello -> 34BB405504B5223594B94C53
2026 -> A48844556485223322356483
abcd! -> 547B475584B5223564BB4553
目标密文:
14CC4655547594BC475584C5848A43551495448C445584C5D4C9475564C534A84B55A4B574BA4355F495A48844556485648C495534A5548C4F5584A5B4BB405554B522332235A4B3
2. 密文结构分析
观察密文长度:
明文 长度 密文长度
TLU 3 12
2026 4 24
Hello 5 24
abcd! 5 24
密文长度并非简单的明文 Hex 长度,说明存在额外扰动。
题目提示:
摘要扰动过程只与输入长度有关。
因此推测:
Cipher = Data + Length_Digest
其中:
- Data:明文经过 HexMaze 变换后的数据;
- Length_Digest:只依赖输入长度的固定扰动。
3. 恢复长度扰动
比较相同长度明文:
Hello
34BB405504B5223594B94C53
abcd!
547B475584B5223564BB4553
两者长度相同,因此长度扰动部分一致。
通过比较公共位置,可以分离出:
- 与明文相关的数据部分;
- 与长度相关的固定扰动部分。
4. 恢复半字节偏移
将明文转换为 ASCII Hex。
例如:
TLU
ASCII:
T = 54
L = 4C
U = 55
拆分为 nibble:
5 4 4 C 5 5
分析密文数据部分发现:
5 -> E
4 -> D
C -> 5
满足:
[ x'=(x+9)\bmod16{=tex} ]
其中:
9 = 121 mod 16
因此:
加密:
[ x'=(x+9)\bmod16{=tex} ]
解密:
[ x=(x'-9)\bmod16{=tex} ]
5. 恢复固定位置重排
偏移恢复后,数据顺序仍然不一致。
通过四组已知明文/密文比对,恢复固定置换规则。
加密过程:
原始 nibble
↓
整体逆序
↓
每三个字符固定换位
↓
长度扰动交织
解密过程:
密文
↓
去除长度扰动
↓
逆三字符换位
↓
逆序
↓
nibble - 9 mod16
↓
Hex 转 ASCII
6. FLAG 解密
对目标密文执行逆过程:
- 去除长度扰动;
- 恢复固定位置排列;
- 进行 nibble 逆偏移;
- Hex 解码得到 ASCII。
最终得到:
flag{T1u_2026_Kc7f_Crypt0_M4ster!}
7. 验证
重新执行正向过程:
flag{T1u_2026_Kc7f_Crypt0_M4ster!}
经过:
ASCII
↓
Hex nibble
↓
模16偏移
↓
固定重排
↓
长度扰动交织
得到题目给出的目标密文。
验证成功。
8. 总结
本题属于典型的已知明文攻击。
核心思路:
- 利用相同长度样本恢复长度扰动;
- 根据 ASCII Hex 找到 nibble 偏移;
- 利用多个样本恢复固定置换;
- 编写逆向流程恢复 FLAG。
最终 FLAG:
flag{T1u_2026_Kc7f_Crypt0_M4ster!}
最后于 2026-8-21 13:45
被kanxue编辑
,原因:
赞赏
赞赏
雪币:
留言: