别再问我exe反编译成Python脚本了!

本文介绍了如何反编译Python打包的exe文件,包括使用pyinstxtractor.py脚本和pyi-archive_viewer工具提取pyc文件,使用uncompyle6库将pyc反编译为py脚本,以及批量反编译的方法。同时,文章讨论了如何防止exe被反编译,通过在打包时添加加密参数来增加反编译难度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是小五????

今年年初的时候,我写了一篇:别再问我Python打包成exe了!(终极版),相信解决了不少小伙伴的Pyinstaller打包问题。

不过我最近遇到了一个问题,自己打包好的exe文件还在,但是Python源文件不知什么时候被误删了。现在想改动一下功能,重写Python脚本工程量也太大了,怎么办?

请看下文:

作者简介

小小明,数据、Python爱好者。个人博客地址:https://blog.csdn.net/as604049322

今天我将教大家如何反编译exe文件,即将自己或别人写好的exe,还原成Python源码。

以最近写Python一键自动整理归类文件为例进行演示,运行所需的代码和文件都会在文末提供给大家。

打包成单文件所使用的命令为:

pyinstaller -Fw --icon=h.ico auto_organize_gui.py --add-data="h.ico;/"

打包成文件夹所使用的命令为:

pyinstaller -w --icon=h.ico auto_organize_gui.py --add-data="h.ico;."

不管是哪种打包方式都会留下一个exe文件。

首先我们需要从exe文件中抽取出其中的pyc文件:

抽取exe中的pyc文件

抽取pyinstaller打包的exe中的pyc文件,提取pyc文件有两种方法:

  1. 通过 pyinstxtractor.py 脚本提取pyc文件

  2. 通过 pyi-archive_viewer 工具提取pyc文件

脚本提取pyc文件

pyinstxtractor.py 脚本可以在github项目 python-exe-unpacker 中下载,地址:

https://github.com/countercept/Python-exe-unpacker

下载该项目后把其中的pyinstxtractor.py脚本文件复制到与exe同级的目录。

然后进入exe所在目录的cmd执行:

Python pyinstxtractor.py auto_organize_gui.exe

执行后便得到exe文件名加上_extracted后缀的文件夹:

对两种打包方式产生的exe提取出的文件结构稍有区别:

工具提取pyc文件

pyi-archive_viewer是PyInstaller自己提供的工具,它可以直接提取打包结果exe中的pyc文件。

详细介绍可参考官方文档:ttps://pyinstaller.readthedocs.io/en/stable/advanced-topics.html#using-pyi-archive-viewer

执行pyi-archive_viewer [filename]即可查看 exe 内部的文件结构:

pyi-archive_viewer auto_organize.exe

操作命令:

U: go Up one level
O <name>: open
<think>嗯,用户的是如何将Python脚本加密打包exe。首先,我得回忆一下常用的工具,比如PyInstaller、py2exe这些。PyInstaller比较流行,支持跨平台,所以可能先介绍这个。然后,用户提到加密,可能需要考虑如何保护源代码不被反编译。普通的打包其实并不能真正加密,所以需要额外的方法。 接下来,我需要分步骤解释。先讲基本的打包过程,使用PyInstaller的命令,比如pyinstaller -F script.py,生单个exe文件。然后,指出这并不能防止反编译,因为生exe还是可以被工具反编译回代码。这时候需要介绍加密的方法,比如使用AES加密,或者用Cython编译pyd文件,或者商业工具如PyArmor。 还要考虑不同方法的优缺点。比如Cython需要配置编译环境,可能对新手不太友好。PyArmor可能更方便,但商业版需要付费。另外,可以提到修改打包后的文件结构,增加反编译的难度,但这也只是权宜之计。 用户可能的真实需求是保护知识产权,防止代码泄露。这时候需要说明没有绝对安全的方法,但可以增加破解难度。同时,提醒用户注意依赖项的题,比如隐藏导入或者数据文件需要正确处理。 可能需要检查是否有遗漏的工具,比如Nuitka也是一个选项,可以将Python代码编译C,再生exe,这样可能更安全。不过Nuitka的配置和使用步骤可能更复杂,需要简单说明。 另外,用户可能对加密的具体步骤不太清楚,比如如何使用PyInstaller配合加密工具。应该给出具体的例子,比如先使用PyArmor加密脚本,再用PyInstaller打包,或者使用Cython生中间文件再打包。 还要注意常见题,比如打包后的exe文件过大,或者运行时出现找不到模块的错误,这时候需要提示如何处理这些情况,比如添加--hidden-import参数,或者确保所有依赖都被正确包含。 最后,总结一下各个方法的优缺点,帮助用户根据自身情况选择最合适的方案。同时强调,虽然这些方法能提高安全性,但无法完全阻止破解,重要代码最好放在服务端。</think>将 Python 脚本加密打包 EXE 文件的常见方法如下,分步骤介绍: --- ### **一、基础打包工具(无加密)** #### 1. **PyInstaller**(最常用) ```bash pip install pyinstaller # 基础打包(生单个EXE) pyinstaller -F your_script.py # 添加图标(可选) pyinstaller -F -i icon.ico your_script.py ``` - **输出位置**:`dist` 文件夹内生 EXE - **缺点**:可通过反编译工具(如 `pyinstxtractor`)提取源码 #### 2. **Nuitka**(编译为C代码,安全性较高) ```bash pip install nuitka # 基础编译 python -m nuitka --standalone --onefile your_script.py ``` - **优点**:生二进制文件,反编译难度高于 PyInstaller --- ### **二、加密增强方案** #### 1. **代码混淆(基础防护)** - 工具:PyArmor(免费版/商业版) ```bash pip install pyarmor # 混淆代码 pyarmor obfuscate your_script.py # 打包混淆后的脚本 pyinstaller -F dist/your_script.py ``` #### 2. **Cython 编译(转C再编译)** 1. 将 `.py` 文件转为 `.pyd`(Windows)或 `.so`(Linux): ```python # 编写 setup.py from setuptools import setup from Cython.Build import cythonize setup(ext_modules=cythonize("your_script.py")) ``` 2. 执行编译: ```bash python setup.py build_ext --inplace ``` 3. 将生的 `.pyd` 文件与主脚本一起打包(主脚本导入 `.pyd` 模块)。 #### 3. **商业加密工具** - **VMProtect**:直接对 EXE 进行虚拟机加密(非开源) - **Themida**:专业加壳工具(需付费) --- ### **三、反编译防御技巧** 1. **删除调试信息**(PyInstaller): ```bash pyinstaller -F --strip --no-embed-manifest your_script.py ``` 2. **自定义运行时逻辑**:将核心代码放在服务端,本地 EXE 仅作通信。 3. **代码分块加密**:运行时解密关键代码片段(需配合 AES 等算法)。 --- ### **四、注意事项** 1. **依赖题**:确保打包时包含所有第三方库(`--hidden-import` 解决缺失模块)。 2. **杀软误报**:加密后的 EXE 可能被误判为病毒,需自行签名或添加白名单。 3. **性能损耗**:加密和混淆可能增加启动时间。 --- ### **五、总结方案** - **轻度防护**:PyInstaller + PyArmor 混淆 - **中度防护**:Cython 编译 + PyInstaller 打包 - **高强度防护**:Nuitka 编译 + VMProtect 加壳 最终选择取决于代码敏感性和预算。注意:没有绝对安全的加密,重要逻辑建议部署在服务端。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱小五是凹凸君呀

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值