工具

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 全文。本次未安装或反编译任何内容。

关于此条目

类型
工具
类别
原生分析工具
关联
基础工具
目标
应用 · 二进制

来源复核于

说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。

一手来源

  1. README.rst GitHub · rocky/python-uncompyle6 · 修订 91298ba
  2. README.rst#L77-L126 GitHub · rocky/python-uncompyle6 · 修订 91298ba
  3. README.rst#L176-L299 GitHub · rocky/python-uncompyle6 · 修订 91298ba
  4. NEWS.md GitHub · rocky/python-uncompyle6 · 修订 91298ba
  5. pyproject.toml GitHub · rocky/python-uncompyle6 · 修订 91298ba
  6. uncompyle6/version.py GitHub · rocky/python-uncompyle6 · 修订 91298ba
  7. COPYING GitHub · rocky/python-uncompyle6 · 修订 91298ba
  8. https://github.com/rocky/python-uncompyle6/releases/tag/3.9.3
  9. https://pypi.org/project/uncompyle6/3.9.3/