-
-
[原创]wp: 第二题:巳时·绿光幽语
-
发表于: 3天前 2
-
key:yb6tcr
q2.exe 是 PyInstaller 打包程序。解包后得到:
其中 main.pyc 是 Python 3.13 字节码,magic 为 f3 0d 0d 0a。
用 xdis 反汇编后可以看到它只是一个壳:
等价于:
所以真正的逻辑不在 main.pyc,而在被修改过的 python313.dll 中。
在 python313.dll 里可以直接搜到:
其附近还有如下可疑数据:
进一步观察附近字节,可以发现这是 Python marshal 序列化数据。该数据属于 DLL 中冻结的 os 模块。
本样本中 frozen os 模块的 marshal blob 位于文件偏移:
使用与样本一致的 Python 3.13 解析:
解析结果中可以看到一个被插入的 my_function:
即初始占位函数是:
my_function 在 root.co_consts 中的下标是 143。后面的常量依次是:
把第 145 项中的 8 段 bytes 拼接后,每个字节异或 0x55,得到:
对 frozen os 模块顶层代码反汇编,插入逻辑的核心等价于:
也就是说,程序并不是直接比较 key,而是:
提示中已经给出了目标输出:
其 UTF-8 编码为:
加密后的成功字符串为:
由于 key 长度为 6,并且循环异或,所以直接计算前 6 个字节:
得到:
十六进制为:
验证后两段密文均使用该 key 循环异或:
解密出的 co_code 与占位函数字节码相同,语义为:
真正的变化是 co_consts 从:
被替换为:
因此调用 my_function() 后输出目标字符串。
赞赏
他的文章
赞赏
雪币:
留言: