工具
uncompyle6 跨版本 Python 字节码反编译器
跨版本的 Python 反编译器,可把 Python 字节码还原为等价的 Python 源码,支持 Python 1.0 至 3.8 的字节码,以及部分 PyPy 字节码和 Dropbox 的 Python 2.5 字节码。它借助配套的 xdis 库反汇编代码对象,再把指令流解析成基于语法的树并据此输出源码;它还能只反解析给定字节码偏移附近的代码片段,作者的 trepan 调试器即用此功能精确报告位置。它是早期 decompyle、uncompyle 和 uncompyle2 等分支的后继项目。
使用条件与局限
- 审阅时最新版本为 3.9.3,于 2025-09-29 在 GitHub 和 PyPI 发布;所审阅的 master 提交比该版本晚 34 个提交,版本号为 3.9.4.dev0。与 master 分支一样,从 PyPI 安装的版本面向 Python 3.11+ 运行环境;更早的解释器(最早到 Python 2.4)需使用 GitHub Releases 中按版本区分的源码包、egg 或 wheel,它们由各自独立的 git 分支构建。依赖 xdis 6.3+、spark-parser 和 click。
- README 称已用 Python 1.4、2.1–2.7、3.0–3.8 以及较新 PyPy 版本的字节码测试过。对 Python 3 的支持以 3.3–3.4 附近最好,离这两个版本越远越弱;控制流是最大的已知问题,作者也不打算认真投入 3.8 或 3.9 的支持,并建议 3.7 和 3.8 改用独立的 decompyle3。高于 3.8 的字节码不会被反编译;候选发布版本的魔数、部分 Python 3.6 魔数变体、除 Dropbox 旧版 2.5 以外的加密或定制解释器字节码、混淆代码以及 Cython 和 MicroPython 均不受支持。
- 输入的 .pyc 或 .pyo 文件由使用者提供;它不能直接反编译 Py2EXE 生成的可执行文件,这类打包程序中的字节码需先行提取。--syntax-verify 选项只检查输出是否为合法的 Python 语法,因此 README 建议用其他版本的 uncompyle6 或 pycdc 等其他反编译器交叉核对。恢复出的源码仍受原程序权利人的权利约束。
- pyproject.toml 声明采用 GPL-3.0-or-later,COPYING 收录 GPL-3.0 全文。本次未安装或反编译任何内容。
关于此条目
- 类型
- 工具
- 类别
- 原生分析工具
- 关联
- 基础工具
- 目标
- 应用 · 二进制
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.rst GitHub · rocky/python-uncompyle6 · 修订 91298ba
- README.rst#L77-L126 GitHub · rocky/python-uncompyle6 · 修订 91298ba
- README.rst#L176-L299 GitHub · rocky/python-uncompyle6 · 修订 91298ba
- NEWS.md GitHub · rocky/python-uncompyle6 · 修订 91298ba
- pyproject.toml GitHub · rocky/python-uncompyle6 · 修订 91298ba
- uncompyle6/version.py GitHub · rocky/python-uncompyle6 · 修订 91298ba
- COPYING GitHub · rocky/python-uncompyle6 · 修订 91298ba
- https://github.com/rocky/python-uncompyle6/releases/tag/3.9.3
- https://pypi.org/project/uncompyle6/3.9.3/