使用PyDecipher反编译PyInstaller打包的Python exe缺失文件问题
解决PyInstaller打包exe反编译缺失依赖文件的问题
1. 查看exe内部归档结构
用PyInstaller自带的工具检查exe包含的所有内容,运行:
pyi-archive_viewer your_app.exe
重点关注类似PYZ-00.pyz的文件——PyInstaller通常会把所有依赖模块打包到这个zip格式的归档中。
2. 提取PYZ归档文件
在pyi-archive_viewer的交互界面里,输入x PYZ-00.pyz(替换为实际的PYZ文件名),将该归档提取到当前目录。
3. 解压PYZ归档
PYZ本质是标准zip文件,用Python自带模块解压:
python -m zipfile -e PYZ-00.pyz extracted_pyz
进入extracted_pyz目录后,你会找到所有依赖模块的.pyc文件,包括config.pyc、libraries.pyc,以及includes目录下的database.pyc、convertor.pyc等。
4. 反编译单个pyc文件
使用decompyle3或uncompyle6工具将pyc文件还原为Python源码:
- 先还原原项目的目录结构:
mkdir includes records
- 反编译核心模块:
decompyle3 extracted_pyz/config.pyc > config.py decompyle3 extracted_pyz/libraries.pyc > libraries.py
- 反编译includes目录下的文件:
decompyle3 extracted_pyz/includes/database.pyc > includes/database.py decompyle3 extracted_pyz/includes/convertor.pyc > includes/convertor.py
5. 提取资源文件(如names.csv)
回到pyi-archive_viewer界面,搜索names.csv或直接查找records/names.csv,找到后用x命令提取,放到新建的records目录下。
注意事项
- 确保反编译工具版本与原项目的Python版本匹配,比如原项目用Python 3.9,就安装对应版本的
decompyle3。 - 如果打包时使用了
--key加密,能反编译app.py说明密钥已被PyDecipher处理,其他模块可按相同流程反编译。 - 反编译后的代码可能存在少量语法糖丢失或变量名简化,需要手动验证调整。
内容的提问来源于stack exchange,提问作者Amin Matola
相关产品推荐
相关产品推荐

