工具
PyLingual Python 字节码反编译器
面向 Python 3.6 及以后版本 CPython 字节码的研究型反编译器,将按版本训练的 Transformer 模型与控制流重建相结合。分段模型把字节码切分为语句,语句模型将每段翻译为源码,再由模板重建循环、条件分支、异常处理、with 块和 match 语句。生成结果会用目标 Python 版本重新编译,并与原字节码比较控制流,未通过的片段会改用其他分段方案重试;其设计见 IEEE S&P 2025 论文《PyLingual: Toward Perfect Decompilation of Evolving High-Level Languages》。
使用条件与局限
- 审阅时的首个版本为 v0.0.1,发布于 2026-09-21,其发布说明称在独立的 pylingual_eval_dataset 上,Python 3.6–3.12 的反编译成功率约为 82–87%,3.13–3.15 约为 71%;这些均为项目自报数据。所审阅的 main 提交比该版本晚 67 个提交,声明的版本为 0.1.0。README 提醒,这份注重可读性的代码在控制流准确度上起初可能不及在线服务。
- 需从克隆的仓库用 uv tool install 安装;pyproject.toml 要求 Python 3.12+,并依赖 PyTorch、Transformers、Hugging Face Hub 和 xdis。各版本的分段模型和语句模型从 syssec-utd 的 Hugging Face 组织下载,使用未固定的 main 修订版;有 CUDA 时在 GPU 上运行,否则使用 CPU。各模型卡声明的许可证不一:3.12 语句模型标为 Apache-2.0,其分段模型则未声明。
- 检查重建结果需要用目标版本编译:uv 管理的解释器覆盖 3.8–3.15,3.6 和 3.7 则需要 pyenv 或 pyenv-win,可通过 --init-pyenv 安装。可选的 Redis 实例用于缓存模型预测,缓存键包含版本和规范化后的字节码,但不包含模型修订版。pylingual.io 网页服务是托管的替代方案,因此机密的 .pyc 文件应只用本地命令行处理。
- 采用 GPL-3.0-only 许可。通过控制流检查并不能证明恢复出的源码与原始源码完全一致,恢复出的代码仍归原权利人所有。本次未安装或运行任何模型,论文仅核对了其书目信息。
关于此条目
- 类型
- 工具
- 类别
- 原生分析工具
- 关联
- 基础工具
- 目标
- 应用 · 二进制
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · syssec-utd/pylingual · 修订 509ea92
- pyproject.toml GitHub · syssec-utd/pylingual · 修订 509ea92
- pylingual/decompiler_config.yaml GitHub · syssec-utd/pylingual · 修订 509ea92
- pylingual/decompiler.py GitHub · syssec-utd/pylingual · 修订 509ea92
- pylingual/equivalence_check.py GitHub · syssec-utd/pylingual · 修订 509ea92
- pylingual/models.py GitHub · syssec-utd/pylingual · 修订 509ea92
- pylingual/control_flow_reconstruction/templates GitHub · syssec-utd/pylingual · 修订 509ea92
- LICENSE GitHub · syssec-utd/pylingual · 修订 509ea92
- https://github.com/syssec-utd/pylingual/releases/tag/v0.0.1
- https://huggingface.co/syssec-utd/py312-pylingual-v1-statement
- https://doi.org/10.1109/SP61157.2025.00052