python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > PyInstaller EXE程序修改与反编译

PyInstaller打包的EXE程序修改与反编译完全指南

作者:学亮编程手记

在实际工作中,我们经常会遇到需要修改已打包的Python EXE程序的情况,可能是界面文字需要调整,也可能是功能需要微调,本文将系统介绍如何对PyInstaller打包的EXE程序进行反编译、修改和重新打包,帮助你掌握这一实用技能,需要的朋友可以参考下

前言

在实际工作中,我们经常会遇到需要修改已打包的Python EXE程序的情况——可能是界面文字需要调整,也可能是功能需要微调。本文将系统介绍如何对PyInstaller打包的EXE程序进行反编译、修改和重新打包,帮助你掌握这一实用技能。

一、为什么需要反编译PyInstaller程序?

PyInstaller是Python生态中最常用的打包工具,它将Python脚本及其依赖打包成独立的可执行文件。但有时我们会遇到以下需求:

二、核心思路:先解包,再反编译

PyInstaller打包的EXE文件本质上是一个归档文件,包含了压缩后的Python字节码(.pyc)和各种资源。修改的总体思路是:

EXE文件 → 提取PYC文件 → 反编译为PY源码 → 修改代码 → 重新打包

三、完整操作流程

3.1 准备工作:安装必需工具

工具名称作用安装方式
pyinstxtractor从EXE中提取PYC文件从GitHub下载
uncompyle6将PYC反编译为PY源码pip install uncompyle6
PyInstaller重新打包pip install pyinstaller
16进制编辑器修复PYC文件头wxMEdit、HxD等

重要提示:请使用与目标程序相同版本的Python环境进行操作,否则可能遇到解码错误。

3.2 第一步:解包EXE文件

# 将pyinstxtractor.py和目标exe放在同一目录
python pyinstxtractor.py your_program.exe

执行成功后,会生成 your_program.exe_extracted 文件夹,内部包含了所有打包的文件。

3.3 第二步:找到并准备目标PYC文件

在解压出的文件夹中,找到:

将主入口文件重命名为 .pyc 后缀。

3.4 第三步:修复PYC文件头(关键步骤)

PyInstaller提取出的PYC文件通常缺少开头的16字节Magic Head,需要手动修复:

  1. 用16进制编辑器打开主PYC文件
  2. 同时打开同目录下的 struct.pyc 文件
  3. 复制 struct.pyc 开头的前16个字节
  4. 粘贴覆盖到主PYC文件的开头
  5. 保存文件

这一步至关重要,否则反编译工具无法识别。

3.5 第四步:反编译为Python源码

uncompyle6 your_program.pyc > your_program.py

生成的PY文件即可用文本编辑器打开修改。

3.6 第五步:修改代码

使用任意文本编辑器打开PY文件,进行需要的修改:

注意:反编译的代码会丢失注释,变量名可能与原始代码略有差异。

3.7 第六步:重新编译并打包

# 编译为PYC
python -m py_compile your_program.py
# 使用PyInstaller重新打包
pyinstaller --onefile --windowed your_program.py

四、进阶方案:快速修改界面文字

如果只是想修改界面上的文字,有更简单的方法,无需完整反编译。

4.1 方法一:使用pyinstailor工具

pyinstailor 可以直接替换EXE内部的文件,跳过重新打包步骤。

安装

pip install pyinstailor

使用流程

# 1. 查看EXE内部文件列表
pyinstailor your_program.exe
# 2. 替换内部文件
pyinstailor your_program.exe main.py
# 3. 处理深层目录(忽略前N层路径)
pyinstailor -s 1 your_program.exe src/main.py

常见问题:如果遇到 ModuleNotFoundError: No module named 'PyInstaller.loader...',需要在环境中安装PyInstaller:

pip install pyinstaller

4.2 方法二:16进制编辑器直接修改

对于长度不变的文本(如将"OK"改为"Yes"),可以直接用16进制编辑器搜索替换。

# 使用wxMEdit打开EXE
# 搜索目标文本 → 直接修改 → 保存

局限性

五、常见问题与解决方案

5.1 Python版本兼容性问题

uncompyle6 主要支持Python 3.8及以下版本。如果程序使用更高版本编译,可尝试:

5.2 pyinstailor报错处理

错误ModuleNotFoundError: No module named 'PyInstaller.loader...'

解决

pip install pyinstaller
# 如果版本不兼容,尝试降级
pip install pyinstaller==5.13.0

5.3 加密打包的处理

如果打包时使用了 --key 参数加密,提取出的PYC也是加密的,上述方法无法直接反编译。

六、方法与工具对比

方法难度适用场景优点缺点
完整反编译⭐⭐⭐需要大改代码逻辑完全可控,任意修改步骤繁琐
pyinstailor替换⭐⭐只修改少量文件跳过重打包,高效工具小众,可能有兼容问题
16进制直接改修改短文本(长度不变)极其简单局限性大,不支持中文

七、实操建议

根据你的具体需求,选择合适的方案:

  1. 只想改几个英文单词 → 先用16进制编辑器试试
  2. 需要改中文或较多文字 → 优先尝试pyinstailor
  3. 需要修改代码逻辑 → 走完整反编译流程

重要提醒:操作前务必备份原EXE文件!

到此这篇关于PyInstaller打包的EXE程序修改与反编译完全指南的文章就介绍到这了,更多相关PyInstaller EXE程序修改与反编译内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文