资讯动态

5分钟上手pyinstxtractor:把PyInstaller打包的exe拆开,还原可反编译的pyc字节码

发布时间:2026/8/20 18:43:58 来源:尧图企业网站定制
5分钟上手pyinstxtractor把PyInstaller打包的exe拆开还原可反编译的pyc字节码【免费下载链接】pyinstxtractorPyInstaller Extractor项目地址: https://gitcode.com/gh_mirrors/py/pyinstxtractor市面上用 Python 写的桌面工具绝大多数靠 PyInstaller 打包成单个可执行文件对外分发。打包很爽拆包却难——你拿到一个 exe双击能跑却完全看不到里面的 Python 源码。这种黑盒困境几乎每个做 Python 分发的人都撞上过。pyinstxtractor就是来拆这个黑盒的一条命令把打包产物里的全部 pyc 字节码提取出来并自动修复文件头让反编译工具开箱即用。 它是什么又不是什么先把工具的边界说清楚免得抱错期待。它是什么一个拆包器把 PyInstaller 产物内部的归档结构解出来还原出一个个 .pyc 字节码文件一个补头匠PyInstaller 5.3 之后的打包产物不再携带 pyc 文件头脚本会按打包时的 Python 版本把头部补全反编译器拿到就能认一个跨平台选手Windows 的 .exe、Linux 的 ELF 可执行文件都能原生处理无需额外工具。它不是什么不是反编译器它只负责提取和修头把 .pyc 变回可读的 .py 源码还要靠 Uncompyle6、Decompylepycdc这类工具接力完成不是解密器遇到加密的 PYZ 归档它不硬解而是把内容原样导出留给你后续研究。一句话定位它是从可执行文件到字节码这一段路程的搬运工至于从字节码到源码的最后一公里交给反编译器。 拆包背后的三道工序了解脚本内部干了什么能帮你更好地读懂输出信息。整个过程可以简化成三道工序工序一定位小饼干。PyInstaller 产物文件末尾固定写着一串魔数MEI\014\013\012\013\016脚本里叫 cookie。它从文件尾部开始反向搜索这串标记找不到就直接告诉你这不是 PyInstaller 打包的。工序二解析 CArchive。顺着 cookie 里的信息找到目录表TOC把内部归档中的每个条目读出来该解压的解压zlib、该跳过的跳过得到主程序相关的 .pyc 和各类数据文件。工序三拆 PYZ 归档。第三方依赖模块被集中打包在 PYZ 归档里脚本用 Python 内置的 marshal 模块解析目录结构逐一把依赖模块还原成 .pyc。最后统一检查一遍把缺头的 pyc 文件补上 magic number。三道工序跑完一个死二进制就变成了一堆活的字节码文件。 动手前的准备获取工具只需一步git clone https://gitcode.com/gh_mirrors/py/pyinstxtractor cd pyinstxtractor克隆下来你会发现整个目录干净得过分——只有一个核心脚本pyinstxtractor.py外加 README 和 LICENSE没有任何多余的依赖要装。脚本本身只使用 Python 标准库兼容 Python 2.x 和 3.x这正是它零门槛的底气。关于运行环境官方有一个明确建议尽量用与打包程序相同的 Python 版本运行脚本。原因在于解 PYZ 归档依赖 marshal 模块版本不一致时可能出现反序列化失败。后面踩坑章节还会专门讲这个问题这里先记住这个原则。 初次体验跑通第一个最小案例假设你手头有个名为myapp.exe的 PyInstaller 打包程序把它和脚本放在同一目录执行python pyinstxtractor.py myapp.exe文件在其他路径也没关系直接写完整路径即可python pyinstxtractor.py /path/to/myapp.exeWindows 下的写法是python pyinstxtractor.py C:\path\to\myapp.exe一条命令脚本会噼里啪啦打印一屏进度。一次典型的成功输出长这样[] Processing myapp.exe [] Pyinstaller version: 2.1 [] Python version: 38 [] Length of package: 5612452 bytes [] Found 59 files in CArchive [] Beginning extraction...please standby [] Possible entry point: pyiboot01_bootstrap.pyc [] Possible entry point: myapp.pyc [] Found 133 files in PYZ archive [] Successfully extracted pyinstaller archive: myapp.exe看到最后一行Successfully extracted就说明拆包成功了。这几行输出信息量不小给你翻译一下Pyinstaller version识别出的打包器版本决定解析策略2.0 和 2.1 的 cookie 结构不同Python version打包时的 Python 版本38就是 3.8。这个数字后面反编译时要反复用到务必记下来Possible entry point程序的入口脚本通常是主程序对应的 .pyc逆向时从这里切入效率最高CArchive / PYZ archive两层归档结构分别存放主程序相关文件和第三方依赖模块脚本会分层还原。 提取结果里到底有什么执行完命令当前目录会多出一个以_extracted结尾的文件夹比如myapp.exe_extracted里面大致有三类东西内容说明分析价值主程序字节码如myapp.pyc最核心的分析目标先反编译它PYZ-00.pyz_extracted第三方依赖模块目录查看程序用了哪些库、版本几何.dll / .so 与资源文件运行依赖的动态库和数据可能藏有密钥、API 地址等敏感信息拿到这些 .pyc 后就可以请反编译器上场了例如uncompyle6 myapp.exe_extracted\myapp.pyc myapp.py uncompyle6 myapp.exe_extracted\PYZ-00.pyz_extracted\__future__.pyc注意一点Uncompyle6 只支持到 Python 3.8 左右的字节码更年轻的版本需要换 Decompylepycdc这类新工具具体版本支持范围以官方文档为准。 继续深入三个进阶玩法基础流程跑通后下面这几个技巧能让你的提取效率再上一个台阶。1. 顺着入口点画代码地图。入口 .pyc 是程序启动时第一个执行的模块先反编译它再顺着 import 语句一层层往外追比在海量文件里瞎翻高效得多。遇到业务逻辑复杂的程序这条路能帮你快速建立全局认知。2. 用打包同款 Python 版本跑脚本。前面说过marshal 反序列化对版本敏感。稳妥流程是先看输出里的 Python version再切换到同版本解释器重新执行脚本把 PYZ 归档完整解出。3. 加密归档不放弃治疗。如果程序启用了加密 PYZ脚本不会直接报错退出而是把无法解压的条目原样导出为.encrypted后缀文件。你可以结合调试器跟踪程序运行时的解密过程或从主程序的解密逻辑里找突破口。顺便说说生态官方还维护着pyinstxtractor-ng免 Python 的独立二进制版支持加密产物和pyinstxtractor-web浏览器里跑的 Go 版本。如果你想绕开 Python 环境限制或追求更快的处理速度可以关注这两个衍生项目具体能力以官方文档为准。️ 高频踩坑与自救手册实践中最常见的几个坑基本都能对号入座坑一报错 Unmarshalling FAILED。原因脚本运行环境的 Python 版本与打包版本不一致marshal 解析 PYZ 目录失败。 解决查看输出里的 Python version 字段切换到同版本解释器重跑即可。坑二反编译出的 .pyc 无法识别。原因字节码版本太新反编译器跟不上。 解决先确认打包的 Python 版本再选匹配的反编译器——3.8 及以前用 Uncompyle6更新的版本换 pycdc 等新工具。坑三提示 Missing cookie / not a pyinstaller archive。原因文件末尾找不到 PyInstaller 的固定魔数标记说明它根本不是 PyInstaller 产物或者版本过于冷门。 解决换用其他分析思路别在这个文件上继续耗时间。坑四Linux 下的可执行文件能不能提取答案是可以。pyinstxtractor 原生支持 Linux ELF 二进制不需要任何额外工具或转换步骤。⚖️ 别忘了使用边界工具本身没有立场但用的人得有边界感。请只提取和分析你拥有权限的程序——自己打包的产物、已授权的测试目标。尊重原作者著作权和软件许可协议别把他人代码用于商业用途也别越过法律法规划下的线。技术研究无罪守规矩才能走远。 下一步行动到这里你已经掌握了 pyinstxtractor 的完整使用链路克隆 → 一条命令提取 → 反编译还原。核心就三步从现在起就可以动手克隆仓库用一个自己打包的测试程序跑通流程记下输出里的 Python version 和入口点用匹配版本的解释器完整提取再用反编译器还原主程序源码。手头要是正好有个 PyInstaller 打包的程序别犹豫现在就去体验一把一条命令拆开二进制的畅快吧。【免费下载链接】pyinstxtractorPyInstaller Extractor项目地址: https://gitcode.com/gh_mirrors/py/pyinstxtractor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价