首页
社区
课程
招聘
第二题:巳时·绿光幽语
发表于: 2026-8-11 13:12 22

第二题:巳时·绿光幽语

2026-8-11 13:12
22

一、题目信息


目标文件为“题目.exe”。程序运行后显示一段待还原的 Python 代码,并要求输入 6 个字符的 key。

二、初步识别


首先使用 IDA  打开题目.exe。该文件是一个 Windows x64 的 PyInstaller 程序。


主要特征如下:


PE32+,x64,控制台程序。

文件尾部存在 MEI cookie 和 PyInstaller CArchive。

导入表中包含 Python 初始化相关函数。

可以看到 PyMarshal_ReadObjectFromString、PyRun_SimpleStringFlags 等字符串。


使用 PyInstaller archive viewer 查看文件内容,可以看到:


main

base_library.zip

python313.dll

PYZ.pyz


其中 PYZ.pyz 主要是 Python 标准库,main 解压后只有 159 字节,并没有明显的题目逻辑。因此题目代码不在普通 Python 主模块中。

从 CArchive 中提取 python313.dll,然后在 DLL 中搜索以下字符串:


my_function

co_code

co_consts

b_key

input


这些字符串集中出现在文件偏移 0x4DACE9 附近。


通过 Python DLL 的 frozen module 表,定位到被修改的 frozen os 模块:


模块名:os

代码偏移:0x4D00E0

代码大小:47420 字节


因此,题目作者将校验代码插入了 CPython 内置的 frozen os 模块中。程序启动并导入 os 时,隐藏代码会自动执行。


使用 xdis 解析 Python 3.13 的 marshal 数据后,新增代码逻辑可以还原为:


原始的 my_function 内容是:



对应的 Python 3.13 字节码为:


95 00 5b 01 00 00 00 00 00 00 00 00

53 01 35 01 00 00 00 00 00 00 20 00

67 00


也就是 26 字节:


95005b0100000000000000005301350100000000000020006700


密文 c 与原始 co_code 的长度都是 26 字节。程序使用 6 字节 key 循环 XOR,因此可以直接计算:



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

最后于 2026-8-12 13:28 被mb_fpexwoie编辑 ,原因:
收藏
点赞 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回