Python EXE 反编译教程(.exe 转 .py)
(2026 年最新完整实战版,基于 PyInstaller 打包的 .exe)
重要声明:
本教程仅用于学习、自己打包的程序找回源码、代码审计、安全研究等合法用途。
请勿用于激活成功教程他人商业软件或侵犯知识产权!
1. 原理简述(面试/理解必备)
大多数 Python .exe 是用 PyInstaller(最常见)打包的。
打包过程: → (字节码)→ 打包进 EXE(包含 Python 解释器 + 资源)。
反编译流程:
EXE → 提取 .pyc 文件 →(修复文件头)→ 反编译成 .py
2. 准备工作
- 安装 Python:必须与原 EXE 打包时使用的 Python 版本完全一致(3.8、3.9、3.10、3.11、3.12 等)。
查看 EXE 的 Python 版本方法:用 pyinstxtractor 提取后看 .pyc 的 magic number。 - 下载核心工具(全部免费开源):
- pyinstxtractor.py(提取 EXE → .pyc):
GitHub:https://github.com/extremecoders-re/pyinstxtractor
下载 单文件即可。 - uncompyle6(Python 3.8 及以下**):
GPT plus 代充 只需 145
- pycdc(Decompyle++)(Python 3.9 及以上推荐,支持到 3.13):
GitHub:https://github.com/zrax/pycdc
需要用 CMake + C++ 编译(Windows 可下载 Releases 的 exe,或自己 build)。
3. 完整反编译步骤(以 PyInstaller 为例)
步骤 1:提取 .pyc 文件
把 和目标 放在同一文件夹。
运行命令(用原打包版本的 Python 执行):
成功后会出现文件夹:
里面包含:
- 、 等
- 主程序通常是 (或与 exe 同名无后缀的文件)
步骤 2:修复 .pyc 文件头(最容易失败的一步)
PyInstaller 打包时去掉了前 16 字节(magic number + timestamp)。
修复方法(推荐):
- 进入 文件夹,随便找一个正常的小 .pyc 文件(如 )。
- 用 010 Editor、WinHex、HxD 等十六进制编辑器打开它,复制前 16 字节。
- 打开你要反编译的主 (如果无后缀,先改名为 ),在文件最开头插入这 16 字节。
- 保存。
快速获取 magic number 方法(Python 代码):
GPT plus 代充 只需 145
步骤 3:反编译 .pyc → .py
情况 A:Python ≤ 3.8(推荐 uncompyle6)
情况 B:Python 3.9 及以上(推荐 pycdc)
GPT plus 代充 只需 145
情况 C:在线工具(快速测试,不推荐大文件)
- https://pylingual.io/
- https://rivers.chaitin.cn/tools/pyc2py
4. 常见问题与解决(2026 年最新坑)
问题 原因 解决办法 “Unknown magic number” 文件头缺失 按步骤2修复 16 字节 uncompyle6 报 “Unsupported Python version 3.10+” 版本不支持 改用 pycdc 提取失败 / unmarshalling error Python 版本不匹配 换成原打包版本的 Python 运行 pyinstxtractor 代码乱码 / 变量名丢失 反编译不完美 正常现象,pycdc 通常比 uncompyle6 更好 EXE 加了 –key 加密(旧版) PyInstaller 老版本加密 新版 PyInstaller v6.0+ 已移除加密,现代工具可自动处理 主程序在 PYZ 里面 没找到主 pyc 解压 PYZ-00.pyz(用 pyinstxtractor 已自动解)
5. 一键自动化脚本(推荐)
很多人把整个流程写成脚本,推荐参考:
- https://github.com/WithSecureLabs/python-exe-unpacker
- 或者自己写一个简单包装脚本。
6. 如何防止别人反编译你的 EXE(加分知识)
- 使用 Nuitka 或 Cython 编译成 C 扩展(真正机器码,极难反编译)
- PyInstaller + UPX 压缩 + 混淆工具(但仍可提取 pyc)
- 商业方案:PyArmor(付费加密)
本教程已覆盖 2026 年最新 PyInstaller 6.x 版本的实际情况。
现在就试试:把你的 exe 放进文件夹,运行 pyinstxtractor.py,看看能恢复多少源码!
有具体报错、想看某一步的详细截图、或需要 pycdc 编译教程,直接告诉我,我立刻补充!
记住:技术无罪,用途合法!🐍
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/237304.html