首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
CTF对抗
发新帖
0
0
看雪·2026 KCTF > 第二题:巳时·绿光幽语
发表于: 2026-8-11 14:07
138
看雪·2026 KCTF > 第二题:巳时·绿光幽语
htg
7
2026-8-11 14:07
138
# 方法: 采用 **Codex** + **IDA9** + **MCP** + **deepseek-v4-flash** 提示词: ```text 这是KCTF2026第二题:巳时·绿光幽语,Reverse,请给出flag。 ``` AI分析用时 12分钟17秒 # 1.题目信息 + 题目:巳时·绿光幽语(Reverse) + 文件:题目.exe + 大小:7,438,179 字节(约 7.4MB) + SHA256:F6B192F9EE87C4AD2BC8681291CA428CF8E98FEC26FA5D7B82C6E791A7A90EAD + PE 信息:x64 (PE32+),GUI 子系统,入口点 0xD4C0,无壳特征(非 UPX/VMProtect/Themida) # 2. 初步识别:PyInstaller 打包 在文件尾部 0x717F0B 处找到 PyInstaller 归档魔数 MEI\x0c\x0b\x0a\x0b\x0e,确认是 PyInstaller onefile 打包程序。用 pyinstxtractor-ng 解包: ``` [+] Python version: 3.13 [+] Found 21 files in CArchive [+] Possible entry point: main.pyc [+] Found 112 files in PYZ archive ``` 解包得到的入口 main.pyc 反汇编后却只是: ```python import sys sys.exit(0) ``` 而 PYZ 中 112 个模块全部是标准库(argparse、base64、socket……),**没有任何自定义业务代码**。运行程序却会打印: 提示,需要还原的代码 ``` def my_function(): print("恭喜成功!") ``` 请输入key还原代码(请输入6个字符) 这说明真正逻辑不在常规位置。 # 3. 定位隐藏代码:被修改的 python313.dll 在所有 pyc 中都搜不到提示字符串,于是怀疑运行时组件被改动。对比同版本官方 DLL: | 文件|大小| | :----: | :----: | | 题目自带的 python313.dll | 7,127,552 B | | 官方 3.13.5 python313.dll|6,110,416 B | 自带 DLL 大了约 1MB,且在偏移 0x4DACEE 处直接找到字符串 my_function。用 Python 3.13 的 marshal 加载该偏移附近的代码对象,确认: + 偏移 0x4D00E0 是 <frozen os> 冻结模块的 marshal 数据; + **挑战代码被注入到了 <frozen os> 模块的模块级代码末尾**(os 是启动时必然导入的模块,注入其中即可在 PyInstaller 引导阶段自动执行)。 # 4. 算法还原 <frozen os> 的模块级字节码中,偏移 0xAD2(约 2758)之后是注入的挑战代码。其相关常量如下: | const 索引 | 值 | 含义 | | :----- | :----- | :----- | | 142 | 20 | 循环次数(最多重试 20 次) | | 143 | <code my_function> | 待还原的函数(当前为 print(666)) | | 145 | 8 个 bytes | 提示文本密文(XOR 0x55) | | 146 | 85 (0x55) | 提示文本 XOR 密钥 | | 148 | 6 | key 长度 | | 149 | b'\xecbmucryb6tcr*c\x03ucryb6tCr\x1eb' | co_code 密文 | | 150 | ('co_code',) | 关键字参数 | | 151 | b'\x9f\xe3\x9b\x91\xf5\xee\x9f\xea<br>\xa6\x91\xe9\xed\x96\xde\xb7' | 成功串密文 | | 152 | ('co_consts',) | 关键字参数 | 还原后的逻辑为: ```python while x < 20: # 用 0x55 异或 8 段密文,拼出提示并打印 buffer = b''.join(enc_list) # 8 段密文 w = b''.join(bytes([b ^ 85]) for b in buffer) print(w.decode('utf-8')) # 提示文本 key = input() # 读取 6 字符 key if len(key) != 6: continue # 长度不对则重试 b_key = key.encode() c = b'\xecbmucryb6tcr*c\x03ucryb6tCr\x1eb' buf = b''.join(bytes([c[i] ^ b_key[i % 6]]) for i in range(len(c))) my = my_function.__code__.replace(co_code=buf) # 恢复字节码 succ = b'\x9f\xe3\x9b\x91\xf5\xee\x9f\xea\xa6\x91\xe9\xed\x96\xde\xb7' buf2 = b''.join(bytes([succ[i] ^ b_key[i % 6]]) for i in range(len(succ))) my = my.replace(co_consts=(None, buf2.decode('utf-8'))) # 恢复打印内容 my_function.__code__ = my my_function() # 执行还原后的函数 ``` 关键点: + 用户 key 作为重复 XOR 密钥,分别解密 co_code 密文和成功提示密文; + 若 key 错误,buf2.decode('utf-8') 抛出 UnicodeDecodeError(或 co_code 非法导致 ValueError),被 except Exception 捕获后跳回循环重新询问; + 只有正确的 key 能让解密后的 co_consts[1] 成为合法 UTF-8 文本并让字节码正确执行。 # 5. 密钥求解 成功串密文只有 15 字节,而目标明文就是提示里给出的 恭喜成功!(UTF-8 恰好 15 字节)。逐字节异或即可还原重复密钥: ``` 密文: 9f e3 9b 91 f5 ee 9f ea a6 91 e9 ed 96 de b7 明文: e6 81 ad e5 96 9c e6 88 90 e5 8a 9f ef bc 81 ("恭喜成功!" UTF-8) 密钥: 79 62 36 74 63 72 79 62 36 74 63 72 79 62 36 y b 6 t c r y b 6 t c r y b 6 ``` 得 6 字符密钥:yb6tcr 验证 co_code 密文用同一密钥解密: ``` 密文: ec 62 6d 75 63 72 79 62 36 74 63 72 2a 63 03 ... 明文: 95 00 5b 01 00 00 00 00 00 00 00 00 53 01 35 ... ``` 反汇编得到的正是完整有效的 my_function 字节码: ``` RESUME 0 LOAD_GLOBAL print LOAD_CONST 1 ('恭喜成功!') CALL 1 POP_TOP RETURN_CONST 0 (None) ``` # 6. 验证 实际运行 题目.exe 并输入 yb6tcr: ``` 提示,需要还原的代码 def my_function(): print("恭喜成功!") 请输入key还原代码(请输入6个字符) 恭喜成功! ``` 程序成功还原代码并打印 恭喜成功!,密钥有效 ✅ # 7. Flag ``` yb6tcr ``` # 总结要点 + 表面是普通 PyInstaller 程序,实际业务逻辑不在 PYZ/pyc 中,而是被编译进修改版 python313.dll 的 <frozen os> 冻结模块,属于典型的"隐藏层"手法; + 反混淆核心是重复密钥 XOR:提示文本用固定单字节 0x55,关键数据用用户输入的 6 字符 key; + 由于密文长度与目标明文长度一致且明文已展示在提示中,直接异或即可反推密钥,无需爆破。
登录后可查看完整内容
传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
最后于
2026-8-11 14:09 被htg编辑 ,原因:
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
htg
7
30
发帖
119
回帖
624
RANK
关注
私信
他的文章
[原创] 看雪·2026 KCTF > 第九题:丑寅同墟·星海抉择
40
[原创] 看雪·2026 KCTF > 第五题:申时·忆海倒带
22
看雪·2026 KCTF > 第二题:巳时·绿光幽语
138
[原创]Kanxue2026KCTF 第八题:亥子合辰·塔影迷楼 设计思路
57
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部