首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
CTF对抗
发新帖
0
0
[原创]KCTF 第二题 Writeup
发表于: 2026-8-11 15:38
84
[原创]KCTF 第二题 Writeup
SandTea
2026-8-11 15:38
84
## 结论 正确的 key 是:**`yb6tcr`** ## 分析过程 **1. 识别打包方式** `题目.exe` 是 PyInstaller 打包的 Python 程序。用 `pyinstxtractor-ng` 解包后发现 `main.pyc` 只是个 `sys.exit(0)` 空壳,`PYZ.pyz` 里也只有标准库,表面上没有业务代码。 **2. 定位真实代码** 真正代码藏在 `python313.dll` 中:标准模块 `<frozen os>` 被改写过,其 marshal 数据位于 `.rdata`,偏移 `0x4D00E0`。程序启动时 `os` 必然被导入,附加在模块尾部的挑战代码因此会执行。 反序列化该模块后,末尾可见附加逻辑: - 定义假的 `my_function`,初始只打印 `666` - 用 `byte ^ 85` 解出一段文字并打印,即运行时提示 `请输入key还原代码(请输入6个字符)` - 等待输入 6 字符 key,然后按 `enc[i] ^ key[i % 6]` 解密两段数据: - `my_function.__code__.co_code`(26 字节) - `co_consts` 中的常量(15 字节) - 还原后把 `my_function.__code__` 替换掉并调用它 **3. 反推 key** `co_consts` 还原目标显然是 `"恭喜成功!"`,其 UTF-8 为: ``` e6 81 ad e5 96 9c e6 88 90 e5 8a 9f ef bc 81 ``` 对应的密文是: ``` 9f e3 9b 91 f5 ee 9f ea a6 91 e9 ed 96 de b7 ``` 逐字节异或恢复 key: ``` 9f^e6=79 'y' e3^81=62 'b' 9b^ad=36 '6' 91^e5=74 't' f5^96=63 'c' ee^9c=72 'r' ``` 后 9 字节用同一 key 循环验证结果一致,得到 6 位 key:`yb6tcr`。 **4. 验证** 用 `yb6tcr` 解密 26 字节的 `co_code`,得到指令: ``` RESUME 0 LOAD_GLOBAL print LOAD_CONST 1 CALL 1 POP_TOP RETURN_CONST 0 ``` 配合常量 `"恭喜成功!"`,执行后输出 `恭喜成功!`,校验通过。 ## 一句话总结 PyInstaller 解包后真正的逻辑在 `python313.dll` 的 `<frozen os>` 模块里,key 用于异或还原 `my_function` 的字节码和常量;用已知明文 `"恭喜成功!"` 与密文逐字节异或即可直接得到序列号 **`yb6tcr`**。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
SandTea
2
发帖
0
回帖
0
RANK
关注
私信
他的文章
[原创]KCTF 第二题 Writeup
84
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部