Unsupported Python version, 3.12.0, for decompilation

# uncompyle6 version 3.9.3
# Python bytecode version base 3.12.0 (3531)
# Decompiled from: Python 3.12.3 (tags/v3.12.3:f6650f9, Apr  9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)]
# Embedded file name: ui.py

Unsupported Python version, 3.12.0, for decompilation

你遇到的核心问题是:uncompyle6 最高仅支持 Python 3.8 的字节码反编译,而你的 .pyc 是 Python 3.12 编译的,版本完全不兼容,因此直接提示 Unsupported Python version

下面给出 3种解决方案,按「易用性优先级」排序:

方案1:改用支持 Python 3.12 的反编译工具(推荐)

decompyle3uncompyle6 的升级版,专门适配 Python 3.7~3.12,是解决该问题的最优解:

步骤1:安装 decompyle3

# 优先用清华源加速安装
pip install decompyle3 -i https://pypi.tuna.tsinghua.edu.cn/simple

步骤2:用 decompyle3 反编译(替换 uncompyle6 命令)

# 反编译你的 ui.pyc 文件(替换为实际路径)
decompyle3 dy2.exe_extracted/ui.pyc > ui.py

# 若主程序是 dy2.pyc,同理:
decompyle3 dy2.exe_extracted/dy2.pyc > dy2.py

方案2:用跨平台的 pycdc 反编译(兼容所有 Python 3.x)

如果 decompyle3 仍有个别语法报错,可尝试 pycdc(C++ 编写,兼容性更强,支持 Python 3.0~3.12):

步骤1:下载 pycdc 预编译包(无需编译,直接用)

  • 官网:https://github.com/zrax/pycdc/releases
  • 选择对应系统版本:
    • Windows:下载 pycdc-windows-amd64.zip
    • Mac/Linux:下载对应架构的二进制包

步骤2:解压后运行反编译

# Windows 示例(假设 pycdc.exe 放在桌面,ui.pyc 也在桌面)
cd Desktop
pycdc.exe ui.pyc > ui.py

方案3:降级字节码版本(进阶,适合复杂场景)

如果上述工具仍无法反编译,可通过「降级字节码」的方式让 uncompyle6 识别(原理:修改 .pyc 文件的版本头,伪装成 3.8 字节码):

步骤1:了解 .pyc 版本头格式

Python .pyc 文件前4字节是「魔法数」(对应版本): | Python 版本 | 魔法数(16进制) | 十进制 | |------------|------------------|--------| | 3.8 | 0x3C0D0D0A | 1005539594 | | 3.12 | 0x4E0D0D0A | 1305539594 |

步骤2:用十六进制编辑器修改(以 HxD 为例)

  1. 下载 HxD(Windows 免费十六进制编辑器:https://mh-nexus.de/en/hxd/);
  2. 用 HxD 打开 ui.pyc,修改前4字节:
    • 4E 0D 0D 0A(3.12 魔法数)改为 3C 0D 0D 0A(3.8 魔法数);
  3. 保存后,再用 uncompyle6 反编译:
    uncompyle6 ui.pyc > ui.py
    

⚠️ 注意:该方法可能导致部分 3.12 新语法(如 match-case)反编译出错,仅作为兜底方案。

关键总结

工具 支持 Python 版本 易用性 适配性
uncompyle6 2.7~3.8 低(不支持3.12)
decompyle3 3.7~3.12
pycdc 3.0~3.12 极高

优先用 decompyle3,99% 的 Python 3.12 字节码都能正常反编译;若遇到个别语法报错,再换 pycdc 即可。