首页
社区
课程
招聘
[原创]密码学wpKCTF07 - HexMaze Writeup
发表于: 2026-8-21 01:45 40

[原创]密码学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 解密

对目标密文执行逆过程:

  1. 去除长度扰动;
  2. 恢复固定位置排列;
  3. 进行 nibble 逆偏移;
  4. Hex 解码得到 ASCII。

最终得到:

flag{T1u_2026_Kc7f_Crypt0_M4ster!}

7. 验证

重新执行正向过程:

flag{T1u_2026_Kc7f_Crypt0_M4ster!}

经过:

ASCII
↓
Hex nibble
↓
模16偏移
↓
固定重排
↓
长度扰动交织

得到题目给出的目标密文。

验证成功。


8. 总结

本题属于典型的已知明文攻击。

核心思路:

  1. 利用相同长度样本恢复长度扰动;
  2. 根据 ASCII Hex 找到 nibble 偏移;
  3. 利用多个样本恢复固定置换;
  4. 编写逆向流程恢复 FLAG。

最终 FLAG:

flag{T1u_2026_Kc7f_Crypt0_M4ster!}

传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

最后于 2026-8-21 13:45 被kanxue编辑 ,原因:
收藏
点赞 ・0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回