首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
CTF对抗
发新帖
0
20
[原创]KCTF2026第四题Writeup
发表于: 2026-8-16 06:16
549
[原创]KCTF2026第四题Writeup
F1ux_Team
1
2026-8-16 06:16
549
程序依次执行 `DayDayUp`、`MengXinQiuFangGuo`、`GoodGoodStudy` 三段 64 位代码,外层主程序是 32 位程序。三段代码通过 Heaven's Gate 进入 64 位模式,并大量使用异常、返回地址改写和无效指令混淆控制流。 最终使用的用户名为 `KCTF`,密码长度为 9226 字节。密码的 SHA256 为: ```text e34dc3a75754abf44a96d4902bac38b5dd0310fffb2974b27cc84b932ae5847b ``` ## DayDayUp 序列号由固定的 5 字节头、9216 字节主体和固定的 5 字节尾组成: ```text lI|0O || body || Il1|! ``` 主体使用 64 字节字母表: ```text Il1|!ijJL`oO0QDSs5$Zz2B8gq96nNmMWwUuVvRrPpCc({tT+7xXKkYyAa4Ee3FH ``` 标准 Base64 的第 `i` 个六位值记为 `v[i]`,实际字符索引为: ```text (v[i] - 51 - 27*i) mod 64 ``` 6912 字节输入恰好编码为 9216 字节主体,不涉及补位字符。逆向 Meng 后按这个公式编码即可得到最终序列号。 ## MengXinQiuFangGuo 去掉返回地址改写和 32/64 位切换后,每个 16 字节块包含 9 次核心变换和一次末轮。内部状态采用转置布局,核心轮为: ```text A[0] = InvMixColumns(S(InvShiftRows(P xor K[0]))) A[r+1] = InvMixColumns(S(InvShiftRows(A[r] xor K[r+1]))) ``` 末轮的 16 个输出位置为: ```text 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 ``` 实际运行使用的 S 盒由环境初始化,不能套用插桩环境中得到的旧 S 盒。公开样例共有 432 个块,每块在故障指令处产生 9 份轮状态,共 3888 份状态。设 `T` 为逆 S 盒,对相邻轮状态有: ```text T(MixColumns(A[r+1]))[i] xor K'[r][i] = InvShiftRows(A[r])[i] ``` 把 256 个 `T[x]` 和 128 个轮密钥字节作为图节点,每条状态方程作为带异或标签的边。432 个块生成的图只有一个连通分量,传播标签后可一次恢复完整逆 S 盒和 8 组轮密钥。初始密钥由第一轮状态直接计算,末轮的输入、输出掩码则对 432 个块逐字节求唯一解。 恢复出的逆 S 盒为: ```text 00e524f9c9d707568a52aa399e952bb1292a0b025e62fb7bea1f798471f196cf 1776104ed536b2a70ac0a9d91d9246948583bfc31c4147a4f02003f6607445f3 8ebc13a0dc092d1b4d0fa1d4e469b33a5306665f0d18d165de3e6f750e8bd87d ee4f14bdada2ac9fa673488735a3ab0478438644edb0fdcb9d77d2ec642e8c2fc 6f557df50ff23ef11ba40d3e3f249f497547c316737e66cbe58c43fb668c71625 ddf7b561e28fe0913305cd083cb751267e5ca8e122fabb1e5d80c59c3d5be812 989ad663afe755c1c2b9b4aeca30a5ccdb7072c881906e341a9b5a4be9f8da0c ce0193eb89fc38599927326a7a197f884cb82c426d4a8d21fe6b1582283bd0 ``` 等效初始密钥为: ```text 99925e25c9ac9413d1e45a21878bde79 ``` 8 组等效轮密钥为: ```text a4e5083f2c138924e68773be5d625e84 27a86c751866118b5a046a0a2b75bdaa 9c059c7baf5eed6ed2f2eb11e1e14730 f321c12ba3cbe185ed3c96efa3833cb1 67995386c07ab03ede67e7fade2f3ace fb61f5ff377373288e8dc75490d84da4 cda7bf7f5c821647296e24ec8ec51a60 52fece8101b539a8e57ca23b373bae1c ``` 末轮输入、输出掩码为: ```text input = 291e8e9ac3db67b974590b0342d79cb7 output = c278383051a64a233e27004fc6a78343 ``` 这套参数分别在公开输入和一组 432 块互异的输入上进行正向、逆向验证,两组 6912 字节结果均逐字节一致。 逆运算先撤销末轮,再从最后一组轮密钥向前计算: ```python for i, position in enumerate(final_positions): state[i] = inverse_sbox[cipher[position] ^ final_output_key[i]] ^ final_input_key[i] for key in reversed(round_keys): state = ShiftRows(inverse_sbox[MixColumns(state)]) ^ key plain = ShiftRows(inverse_sbox[MixColumns(state)]) ^ initial_key ``` ## GoodGoodStudy 用户名 `KCTF` 生成 100 个 14 位行号。每行在索引表中有 11 个对象,索引公式为: ```text index = 11*row + selector, selector = 0..10 ``` 索引项高 8 位是长度,低 24 位是数据区偏移。对象的逐字节解码过程为: ```text mix = running xor (row*0x9E3779B9) xor (selector*0x517CC1B7) mix = mix xor (mix >> 16) mix = mix * 0x5BD1E995 mix = mix xor (mix >> 13) decoded_byte = encoded_byte xor (mix & 0xff) running = running + 0x85EBCA6B ``` 解码对象首字节低 7 位表示十进制数字数,高位表示符号,剩余内容是压缩十进制数。`selector=0..10` 依次给出一个首一十次多项式从常数项到十次项的 11 个系数。 对 100 个多项式在整数环中因式分解,每个多项式恰好得到 10 个非负整数根。每行根升序排列后拼接,共得到 1000 个互异整数。第一行和最后一行为: ```text 149982 182871 188530 199607 206187 576399 756853 789216 875674 969329 9530 93190 179455 290750 602281 620308 756691 787461 857252 877763 ``` ## Shape 检查 Meng 输出会由 Shape 解析。完整条件为: - 恰好 1000 个无符号十进制整数,以 `-` 分隔; - 每 10 个整数为一组,组内严格递增; - 文本必须完整消费; - 去掉尾部零字节后的文本长度向上按 16 对齐必须等于 6912。 1000 个根直接拼接后的长度是 6891。两个十进制解析器都允许前导零,因此在第一个整数前补 6 个 `0`,数值保持不变,文本长度变为 6897: ```text align_up(6897, 16) = 6912 ``` 随后补 15 个零字节得到完整的 6912 字节 Meng 目标明文。对它逐块执行 Meng 逆运算,再执行 Day 编码,即可生成最终密码。
回复或点赞可查看完整内容
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
上传的附件:
solve.py
(7.85kb,5次下载)
收藏
・
0
点赞
・
20
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
git_51951meggadf3df
非常支持你的观点!
5天前
mb_dvqqrcce
你的帖子非常有用,感谢分享!
5天前
晨曦。
为你点赞!
2026-9-9 07:23
t_max
感谢你分享这么好的资源!
2026-8-28 17:22
ntdll
这个讨论对我很有帮助,谢谢!
2026-8-27 11:55
0xC5
为你点赞!
2026-8-27 07:52
mb_lthgjpwj
为你点赞!
2026-8-21 07:32
KuCha128
你的帖子非常有用,感谢分享!
2026-8-21 00:13
Magic丶
这个讨论对我很有帮助,谢谢!
2026-8-20 14:20
风子
你的帖子非常有用,感谢分享!
2026-8-18 06:54
Jiyeon2
期待更多优质内容的分享,论坛有你更精彩!
2026-8-18 00:37
mb_iesvmzqc
感谢你分享这么好的资源!
2026-8-17 17:28
ONewTach
这个讨论对我很有帮助,谢谢!
2026-8-17 17:20
huangyalei
你的分享对大家帮助很大,非常感谢!
2026-8-17 16:34
海风月影
你的分享对大家帮助很大,非常感谢!
2026-8-17 14:33
教教我吧~
为你点赞!
2026-8-17 14:33
mxym_
你的分享对大家帮助很大,非常感谢!
2026-8-17 13:22
TeddyBe4r
你的分享对大家帮助很大,非常感谢!
2026-8-17 13:03
backer
感谢你的积极参与,期待更多精彩内容!
2026-8-17 12:47
0xCCCC
你的分享对大家帮助很大,非常感谢!
2026-8-17 12:34
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
5
)
mb_tnqoqsdv
雪 币:
0
活跃值:
(2064)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
56
粉丝
1
关注
私信
mb_tnqoqsdv
2
楼
前来学习
2026-8-17 13:50
0
落音吹雪
雪 币:
205
活跃值:
(135)
能力值:
( LV2,RANK:10 )
在线值:
发帖
1
回帖
41
粉丝
0
关注
私信
落音吹雪
3
楼
唉
2026-8-17 14:31
0
number_Z
雪 币:
2653
活跃值:
(2400)
能力值:
( LV8,RANK:125 )
在线值:
发帖
6
回帖
16
粉丝
2
关注
私信
number_Z
2
4
楼
学习一下
2026-8-17 17:17
0
Midsw
雪 币:
29
活跃值:
(1165)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
97
粉丝
1
关注
私信
Midsw
5
楼
6666666666666
2026-8-18 05:16
0
秋白
雪 币:
260
活跃值:
(110)
能力值:
( LV2,RANK:10 )
在线值:
发帖
6
回帖
12
粉丝
0
关注
私信
秋白
6
楼
111
2026-8-20 15:49
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
F1ux_Team
1
10
发帖
0
回帖
70
RANK
关注
私信
他的文章
[原创] 第十题:卯时·曦光初现
323
[原创] 第九题:丑寅同墟·星海抉择 Writeup
17
[原创]第五题 申时·忆海倒带 Writeup
833
[原创]第六题:酉时·书院迷局 Writeup
586
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
huangyalei
number_Z
ONewTach
教教我吧~
mb_lthgjpwj
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部