把编译好的 .pyc(或 .pyo)拖进来,就能拿回可读的 .py 源码。不需要装任何环境,也不用上传到别处 —— 文件只在内存里过一遍,结果直接显示在页面上。
有些从安装包、加固壳或旧项目里翻出来的字节码,文件头被剥掉或版本标记被清零,普通的反编译工具会直接判成「不是 pyc」。这里会先看内容再判断:缺头就按候选版本逐个试,能读出完整代码的那一份才采用,并在结果里注明版本号是推断的。
| 字节码版本 | 还原成源码 | 指令级反汇编 | 说明 |
|---|---|---|---|
| Python 1.0 – 3.12 | 支持 | 支持 | 常规项目直接看源码 |
| Python 3.13 | 暂不支持 | 支持 | 新版本指令尚未覆盖,给指令清单 |
| 文件头缺了 / 被抹掉 | 支持 | 支持 | 自动补全并推断版本,结果里会标注「推断」 |
| 认不出的版本 | — | — | 直接报错,不返回假结果 |
| 想做什么 | 怎么做 | 输出 |
|---|---|---|
| 源码丢了只剩部署产物 | 把 __pycache__ 里的 pyc 拖进来,拿回能读的 .py 再继续改 | Python 源码 |
| 接手别人的项目 | 反编译后看调用顺序、常量表、异常分支,比读字节码快得多 | Python 源码 |
| 排查「线上跑的和仓库不一样」 | 反编译线上 pyc,和仓库源码对比,差异一目了然 | Python 源码 |
| 教学 / 学习字节码 | 同一份代码先编译再反编译,对照看 CPython 把你的写法变成了什么 | 两者都行 |
| 新版格式暂无源码 | 看反汇编里的常量与函数结构,定位到关键函数再逐条还原 | 反汇编 |
用途限定:本工具仅面向自己拥有著作权的代码恢复、丢失源码找回、经授权的安全审计与教学研究。
使用责任:反编译第三方闭源软件并用于复制代码、绕过授权校验或商业牟利,可能违反《计算机软件保护条例》及相关许可协议。请在法律与授权允许的范围内使用,由此产生的一切后果由使用者自行承担。
结果不作保证:反编译产物由机器自动生成,可能缺失注释、改变写法、与原代码不完全等价,仅供阅读参考;因使用结果造成的任何直接或间接损失,本站不承担责任。
文件处理:上传的文件仅在内存中处理,不落盘、不写日志、不用于任何其他用途,也不会被执行。
Python 3.13 改了字节码指令,目前还不能把它的源码结构完整还原出来。为了避免给出「看着成功、其实错了」的结果,这类文件统一提供指令级反汇编:常量、函数结构、调用顺序都在,只是没有成段的源码语句。
常见写法基本可用,但不要指望逐字还原:注释全部丢失,缩进统一重排,部分局部变量名会退化。循环与异常这类控制流最容易走样(例如 while 被拆成 if + continue,逻辑就变了)。页面会做语法与结构检查,问题会点出行号或说明「哪几处要手改」;标了提示的位置,建议对照反汇编改回来再用。
不会留存,也不会被执行。文件上传后只在内存中处理,结果返回即刻丢弃;全程只做静态还原,没有任何执行你代码的动作,也不会把文件交给第三方。
能。有些工具在打包或加固时会剥掉 pyc 开头那段「版本 + 时间戳」,甚至把前几个字节写成 0,导致普通工具直接认不出来。这里先看内容像不像代码,再按常见版本逐个试解,挑还原得最完整、语法最通顺的那一份;结果里的版本号后面会标「推断」,说明它不是文件里写着的。整段头都没了、只剩下裸代码的情况同样能处理。
常见三种情况:文件被截断(网盘下载没传完)、拿到的其实是加密 / 加固后的 pyc(正文被加密,不是头部问题)、以及这压根不是 pyc(比如 .pyd / .dll 这类机器码文件)。换一个完整的文件重新上传即可。
PyInstaller 可以:先解包出内部的 pyc 文件,逐个拖进来(能不能出源码看打包用的 Python 版本,3.13 及以上只能拿反汇编)。Nuitka、Cython 编出来的是机器码,不含 Python 字节码,这类工具帮不上忙。
用手机相机扫描二维码,即可继续使用该工具
遇到问题或有好建议?告诉我们。