-
-
[原创]第七题:戌时·暗能潜流
-
发表于: 2026-8-21 09:17 50
-
1. 从等长样例确定主体数据位
Hello 和 abcd! 的长度相同,因此只依赖长度的摘要/填充位在逐位差分时
完全相消。把明文拆成高、低半字节后做模 16 差分,7 个发生变化的明文
半字节恰好对应密文中的 7 个变化位置。结合其余样例,可分离出每个 12 位
输出单元中的真实数据位置:
满 6 个数据位:0, 2, 3, 5, 8, 10
余 4 个数据位:4, 6, 7, 9
余 2 个数据位:8, 10
其余位置是固定的 4/5 标签;末组不满时再按输入长度填入固定的2233 摘要单元。因此密文长度总是 12 的倍数,摘要扰动确实只与输入
长度(更准确地说是 2*len(plain) mod 6)有关。
2. 半字节偏移
令密钥三位为 a,b,c = 1,2,1,基础偏移为:
s = a + b + c = 4
ASCII 字节拆成高、低半字节后:
H' = (H + s + a) mod 16 = (H + 5) mod 16
L' = (L + s) mod 16 = (L + 4) mod 16
3. HexMaze 位置重排
先把整个已偏移的半字节序列反转。随后每 6 位一组,以中间密钥数字b=2 作为路线宽度:先取头 2 位,再逆序取尾 2 位,最后取中间剩余位。
完整分组的位置表是:
[0,1,2,3,4,5] -> [0,1,5,4,2,3]
尾组只有 4 位或 2 位时,同一规则自然退化为:
4 位:[0,1,3,2]
2 位:[0,1]
最后根据上一节的数据位置表嵌入 12 位输出单元,并填固定标签和长度摘要。
4. 密钥 121 三位的作用
- 第一位
a=1:区分高、低半字节,高半字节比低半字节多循环偏移 1;
同时令长度摘要的成对值由2扩为2/3。 - 中间位
b=2:规定 HexMaze 每组“取头/取尾”的宽度为 2,也是长度摘要
基值2。 - 最后一位
c=1:作为奇偶方向位;1表示在分组路线前反转整个半字节
序列。 - 三位之和
1+2+1=4是低半字节循环偏移和固定标签的基值,高半字节
使用4+1=5。
5. 验证
solve.py 同时实现了解密和正向加密。它会先逐组验证四个样例,再把解出
的 FLAG 正向加密;只有重新得到题目中完全相同的 144 位密文才通过断言。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
赞赏
他的文章
谁下载
赞赏
雪币:
留言: