首页
社区
课程
招聘
[原创]KCTF2026 - 第七题:戌时·暗能潜流 题解(AI)
发表于: 1天前 13

[原创]KCTF2026 - 第七题:戌时·暗能潜流 题解(AI)

1天前
13

题目只给四组明密文样例和"密钥 121",要求还原加密流程并解出 FLAG。密文是一套
逐字符 nibble 加常数 + 定长块模板的编码:低 nibble +4、高 nibble +5
三个字符按"低位在前 / 高位在前 / 低位在前"的之字形(即密钥 1-2-1)写进 12 个 hex 的块模板。
真正的坑在于整条明文在分块前先被整体逆序

先看长度:TLU(3) → 12 hex,Hello(5) / abcd!(5) / 2026(4) 全都 → 24 hex。
唯一自洽的读法是 12 hex 一块、每块吃 3 个字符,明文补齐到 3 的倍数。
FLAG 共 144 hex = 12 块 = 34 个字符 + 2 个 padding。

把不含 padding 的块(4 个样例首块 + FLAG 前 11 块,共 15 个)按 nibble 位对齐,
发现 索引 1/4/9 恒为 4、索引 6/7/11 恒为 5,15/15 无例外:

剩下 6 个数据 nibble = 24 bit,正好和 3 个字节等宽。另外
FLAG[blk7] == 2026[blk0] 逐字节相同,说明块之间完全独立,没有链式或块计数器。

这一步是突破口。统计 15 个块里每个数据位取到多少种不同值:

可打印 ASCII 的高 nibble 只有 2..7(6 种),低 nibble 有 16 种。
所以 idx2/3/10 一定各是某个高 nibble 的函数,idx0/5/8 是低 nibble 的函数——
而且 2..7 恰好平移 5 就是 7..C,直接给出 HI(x) = (x>>4) + 5

回头看那六个"常量":4 = 0 + 45 = 0 + 5,正是 LO(0)HI(0)——
padding 字节 0x00 自己的编码
。它们从来不是分隔符。于是低 nibble 的规则也定了:
LO(x) = (x & 0xF) + 4

按上面直接套样例会处处矛盾:Hello 首块若当成 "Hel",同一个高 nibble 6
会同时要求映射到两个不同值。改为整条明文先逆序后全部自洽——
Hello 首块实际是 "oll"2026 首块是 "620"

密钥 121 = 块内三个字符 cell 的朝向模式,即迷宫的之字形回折:

因此三元组 (a,b,c) 在块中的发射顺序是 a、c、b2 这一步跨过中间字符,
走回头路才把它补上。两个加法常数同样出自密钥——低 nibble 用 1+2+1 = 4,高 nibble 用 4+1 = 5

块尾 nibble 5 表示整块,3 表示该块含 padding;2233 / 2235 分别是
2 个和 1 个 padding 的固定前缀。完整求解:

运行输出:

逆序串为 }!rets4M_0tpyrC_f7cK_6202_u1T{galf,翻转即得 FLAG(Kc7fKCTF 的 leet 写法)。


冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 1天前 被星野安全编辑 ,原因:
上传的附件:
收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回