ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

pyinstxtractor 使用教程:一文快速还原 PyInstaller 打包程序的源码

pyinstxtractor 使用教程:一文快速还原 PyInstaller 打包程序的源码 pyinstxtractor 使用教程一文快速还原 PyInstaller 打包程序的源码【免费下载链接】pyinstxtractorPyInstaller Extractor项目地址: https://gitcode.com/gh_mirrors/py/pyinstxtractor周五下班前运维同事递来一个.exe「客户线上程序出了故障原始.py源码找不到了你帮忙看看逻辑。」你双击运行界面一切正常但源码就像被锁进了保险柜——所有 Python 代码都被 PyInstaller 压进了二进制文件里无从下手。这正是pyinstxtractorPyInstaller 提取器的用武之地一个纯 Python 编写的开源脚本一条命令就能把 PyInstaller 打包的可执行文件拆开取出全部 Python 模块字节码.pyc并自动修复文件头让反编译工具开箱即用。前提是只分析你有权访问的程序比如自己打包的产物或已授权的审计目标。读完这篇文章你将得到一条命令拆开 PyInstaller 程序拿到全部.pyc字节码并看懂输出日志每一行的含义摸清可执行文件内部「CArchive PYZ」两层归档结构知道该从哪个文件下手分析3 个提升效率的实操技巧外加一张高频报错速查表遇到问题一查即走一句话认识它一把「万能开箱刀」PyInstaller 打包程序的过程就像把源码、第三方依赖、动态库一层层塞进快递箱再用胶带封死。pyinstxtractor 干的事就是把胶带划开、把每一层纸箱依次拆开把里面的东西按原样摆到你面前。它只负责「拆箱」不负责「翻译」——还原成可读的.py源码还需要反编译工具接手这一点下文会演示。核心特性速览特性解决了什么适合谁单文件脚本、零依赖只用 Python 标准库无需安装 PyInstaller想快速上手、不愿折腾环境的人覆盖 PyInstaller 2.0 ~ 6.19.0官方测试支持绝大多数主流版本面对各种「年久失修」老程序的人跨平台原生支持Windows 的.exe、Linux 的 ELF 直接处理在服务器或本机做安全审计的人自动修复 pyc 文件头提取出的字节码可直接被反编译器识别不想手动补二进制头的新手加密归档不崩溃解不开的 PYZ 会原样导出为.encrypted文件研究加密打包逻辑的进阶用户实战三步完成一次完整提取第一步获取脚本打开终端克隆仓库仓库地址https://gitcode.com/gh_mirrors/py/pyinstxtractor目录下只有一个核心脚本pyinstxtractor.py没有多余依赖git clone https://gitcode.com/gh_mirrors/py/pyinstxtractor cd pyinstxtractor第二步运行提取命令把待分析的打包程序假设叫myapp.exe放到脚本同目录执行python pyinstxtractor.py myapp.exe文件在其他位置就写完整路径例如python pyinstxtractor.py /path/to/myapp.exeLinux 的 ELF 可执行文件同样直接处理。成功长什么样屏幕滚动出以[]开头的日志最后一行出现Successfully extracted即为成功。一个典型输出[] 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读日志只需抓三个关键点Python version如38表示 Python 3.8反编译选工具就靠它、Possible entry point主程序入口从它开始分析事半功倍、CArchive / PYZ archive可执行文件内部的两层归档工具会分别解析还原。第三步查看与反编译提取结果同目录下会多出一个myapp.exe_extracted文件夹里面包含主程序字节码如myapp.pyc、第三方依赖目录PYZ-00.pyz_extracted内有os.pyc、__future__.pyc等、以及程序运行时依赖的.dll/.so和数据文件。提取出的.pyc文件头已被自动补齐直接交给反编译工具即可。Uncompyle6 支持 Python 2.7~3.8更新的字节码版本建议用 Decompylepycdcuncompyle6 myapp.exe_extracted/myapp.pyc myapp.py uncompyle6 myapp.exe_extracted/PYZ-00.pyz_extracted/__future__.pyc3 个进阶玩法让分析效率翻倍用与打包环境相同的 Python 版本运行提取器解压 PYZ 归档依赖 Python 内置的marshal模块版本不一致可能出现Unmarshalling FAILED。先看输出的Python version再切换到对应版本的解释器重跑是最稳妥的做法。顺着入口点建立代码地图先反编译Possible entry point指出的文件再顺着它的import语句逐层追踪比在几百个.pyc里盲目翻找高效得多。把提取结果当安全审计素材在PYZ-00.pyz_extracted里核对第三方库版本排查已知漏洞在资源文件中搜索硬编码的密钥、API 地址与配置项——这些在安全测试里往往价值极高。高频问题速查表现象原因解决办法提示Unmarshalling FAILED运行脚本的 Python 版本与打包版本不一致按日志中的Python version切换解释器重跑反编译出的.pyc无法识别反编译工具不支持对应字节码版本Python 3.9 换用 pycdc / Decompyle报错找不到MEI魔数标记文件并非 PyInstaller 打包产物确认文件来源换用其他分析思路遇到加密 PYZ 归档归档被加密无法直接解开工具会原样导出.encrypted文件配合调试器研究解密逻辑Linux / macOS 程序能否提取支持无需额外工具直接传入 ELF 可执行文件路径即可现在就去试试pyinstxtractor 的价值是把「拿到一个陌生可执行文件」到「还原出可读源码」这条逆向路径压缩成了三步克隆、运行、反编译。它不生产源码只负责把被封存的字节码原样交到你手里——至于你拿它去恢复丢失的工程、做合规的安全审计还是学习 PyInstaller 的内部结构都由你决定。找出手头第一个 PyInstaller 打包程序跑一次提取亲眼看看那行Successfully extracted带来的惊喜吧。【免费下载链接】pyinstxtractorPyInstaller Extractor项目地址: https://gitcode.com/gh_mirrors/py/pyinstxtractor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表