首页
社区
课程
招聘
[原创]KCTF2026第四题Writeup
发表于: 2026-8-16 06:16 562

[原创]KCTF2026第四题Writeup

2026-8-16 06:16
562

程序依次执行 DayDayUp、MengXinQiuFangGuo、GoodGoodStudy 三段 64 位代码,外层主程序是 32 位程序。三段代码通过 Heaven's Gate 进入 64 位模式,并大量使用异常、返回地址改写和无效指令混淆控制流。

最终使用的用户名为 KCTF,密码长度为 9226 字节。密码的 SHA256 为:

序列号由固定的 5 字节头、9216 字节主体和固定的 5 字节尾组成:

主体使用 64 字节字母表:

标准 Base64 的第 i 个六位值记为 v[i],实际字符索引为:

6912 字节输入恰好编码为 9216 字节主体,不涉及补位字符。逆向 Meng 后按这个公式编码即可得到最终序列号。

去掉返回地址改写和 32/64 位切换后,每个 16 字节块包含 9 次核心变换和一次末轮。内部状态采用转置布局,核心轮为:

末轮的 16 个输出位置为:

实际运行使用的 S 盒由环境初始化,不能套用插桩环境中得到的旧 S 盒。公开样例共有 432 个块,每块在故障指令处产生 9 份轮状态,共 3888 份状态。设 T 为逆 S 盒,对相邻轮状态有:

把 256 个 T[x] 和 128 个轮密钥字节作为图节点,每条状态方程作为带异或标签的边。432 个块生成的图只有一个连通分量,传播标签后可一次恢复完整逆 S 盒和 8 组轮密钥。初始密钥由第一轮状态直接计算,末轮的输入、输出掩码则对 432 个块逐字节求唯一解。

恢复出的逆 S 盒为:

等效初始密钥为:

8 组等效轮密钥为:

末轮输入、输出掩码为:

这套参数分别在公开输入和一组 432 块互异的输入上进行正向、逆向验证,两组 6912 字节结果均逐字节一致。

逆运算先撤销末轮,再从最后一组轮密钥向前计算:

用户名 KCTF 生成 100 个 14 位行号。每行在索引表中有 11 个对象,索引公式为:

索引项高 8 位是长度,低 24 位是数据区偏移。对象的逐字节解码过程为:

解码对象首字节低 7 位表示十进制数字数,高位表示符号,剩余内容是压缩十进制数。selector=0..10 依次给出一个首一十次多项式从常数项到十次项的 11 个系数。

对 100 个多项式在整数环中因式分解,每个多项式恰好得到 10 个非负整数根。每行根升序排列后拼接,共得到 1000 个互异整数。第一行和最后一行为:

Meng 输出会由 Shape 解析。完整条件为:

1000 个根直接拼接后的长度是 6891。两个十进制解析器都允许前导零,因此在第一个整数前补 6 个 0,数值保持不变,文本长度变为 6897:


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

上传的附件:
收藏
点赞 ・21
打赏
分享
最新回复 (5)
雪    币: 0
活跃值: (2259)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2 楼
前来学习
2026-8-17 13:50
0
雪    币: 205
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3 楼
唉
2026-8-17 14:31
0
雪    币: 2653
活跃值: (2425)
能力值: ( LV8,RANK:125 )
在线值:
发帖
回帖
粉丝
4 楼
学习一下
2026-8-17 17:17
0
雪    币: 28
活跃值: (1530)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5 楼
6666666666666
2026-8-18 05:16
0
雪    币: 260
活跃值: (115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6 楼
111
2026-8-20 15:49
0
游客
登录 | 注册 方可回帖
返回