Arianlavi/Pypack
GitHub: Arianlavi/Pypack
PyPack 是一个基于 CustomTkinter 的 Python 打包 GUI 工具,封装并增强了 PyInstaller,同时提供内置 AES-256 源码加密层以支持闭源发布。
Stars: 3 | Forks: 0
# PyPack V3
一个桌面 GUI 工具,用于将 Python 项目转换为独立的可执行文件。它封装了 PyInstaller,修复了其在 import 检测和 Qt 冲突方面的一系列粗糙问题,并为那些希望发布闭源构建而不想引入第三方混淆器的用户添加了可选的加密层。
基于 CustomTkinter 构建,因此它看起来像一个现代的桌面应用,而不是 2004 年的 Tk 对话框。
## 为什么会有这个项目
PyInstaller 很可靠,但其 CLI 工作流很快就会让人感到繁琐,尤其是当项目中混入图标、额外数据文件、隐藏 imports 和 UPX 时。PyPack 将所有这些功能封装在一个窗口中:选择你的项目,点击 build,观察日志。在底层,它还做了一些普通 CLI 做不到的事情:
- 使用 `ast` 模块而不是 `modulefinder` 扫描你的整个项目。在实践中,`modulefinder` 会遗漏诸如 `tkinter` 子模块之类的内容,并无声无息地生成有缺陷的构建。
- 检测项目何时意外引入了多个 Qt 绑定(如果你在迁移过程中留下了旧代码,PyQt5 + PyQt6 是很常见的情况),并自动排除多余的绑定,而不是让 PyInstaller 在构建中途崩溃。
- 始终将 `dist` 和 `build` 写在你的项目文件夹旁边,即使加密步骤会先将文件暂存在其他地方。
### 屏幕截图
## 功能
- 单文件或单文件夹构建,窗口化或控制台模式
- 自定义 `.ico` 图标和应用名称
- UPX 压缩,支持自定义路径
- 将任意额外数据文件与可执行文件打包在一起
- 如果你更倾向于使用 PyArmor,也提供支持
- PyPack Crypt — 内置的 AES-256 源码保护层(详情见下文)
- 实时构建日志,提供真实的成功/失败状态,而不是一个只会骗你的加载动画
## PyPack Crypt
这是我真正引以为傲的部分。PyPack 不是直接按原样发布你的 `.py` 文件,也不是生硬地外挂 PyArmor,而是可以将项目中的每个模块编译为 bytecode,并在交给 PyInstaller 之前使用 AES-256-GCM 进行加密。
使其有别于典型“混淆器”的几个特点:
- 加密 key 是为每次构建全新生成的。不存在某个 DLL 中驻留的共享 runtime key。
- 容器文件扩展名、暂存文件夹名称,以及生成的 loader 中的每个内部变量/类名都是每次构建随机生成的。同一个项目的两次构建在磁盘上或在反编译器中看起来都不会相同。
- 解密后的代码永远不会写入磁盘。模块在被导入时,会通过自定义的 import hook 直接解密到内存中,随后被丢弃。
- 每个容器都经过认证 (GCM),因此损坏或被篡改的文件将无法解密,而不是无声无息地加载乱码。
我要坦诚地说明它的局限性:它并不是坚不可摧的。任何能在他人机器上运行 Python bytecode 的工具都无法做到绝对安全。它真正为你带来的是消除了固定特征码——不存在一个共享的“PyPack runtime”供逆向工程师提取一次特征后,就能针对所有使用此工具构建的应用进行复用。
## 快速开始
```
git clone https://github.com/Arianlavi/PyPack.git
cd PyPack
pip install -r requirements.txt
python pypack.py
```
需要 Python 3.10+。如果你使用 PyPack Crypt,你还需要 `cryptography` 包(它已经包含在 requirements.txt 中了)## 使用说明
将其指向你的项目文件夹和入口脚本,如果有的话设置一个图标,选择你的构建选项,然后点击 Build。如果你需要源码保护,请在构建前开启 PyPack Crypt——其他操作保持不变。最终生成的可执行文件会存放在 `/dist` 中。
如果你的项目需要尚未包含在项目文件夹中的数据文件,请在 Extra Data Files 下添加它们。如果你使用 UPX,请确保它在你的 PATH 中,或者在 PyPack 中指定其文件夹路径。
## 关于 Qt 项目的注意事项
如果你在代码库的任何地方(甚至在 `try/except` 回退中)同时导入了 PyQt5 和 PyQt6,PyInstaller 将拒绝构建——它不支持同时打包两个 Qt 绑定。PyPack 现在会自动检测到这一点并只保留其中一个,但长远来看,更简洁的修复方法是直接卸载你不再使用的那个绑定。
## 环境要求
```
pyinstaller
customtkinter
Pillow
cryptography
pyarmor # optional
```
## 许可证
MIT。详见 [LICENSE](LICENSE)。
## 作者
Arian Lavi - Made with Love ❤️
## 功能
- 单文件或单文件夹构建,窗口化或控制台模式
- 自定义 `.ico` 图标和应用名称
- UPX 压缩,支持自定义路径
- 将任意额外数据文件与可执行文件打包在一起
- 如果你更倾向于使用 PyArmor,也提供支持
- PyPack Crypt — 内置的 AES-256 源码保护层(详情见下文)
- 实时构建日志,提供真实的成功/失败状态,而不是一个只会骗你的加载动画
## PyPack Crypt
这是我真正引以为傲的部分。PyPack 不是直接按原样发布你的 `.py` 文件,也不是生硬地外挂 PyArmor,而是可以将项目中的每个模块编译为 bytecode,并在交给 PyInstaller 之前使用 AES-256-GCM 进行加密。
使其有别于典型“混淆器”的几个特点:
- 加密 key 是为每次构建全新生成的。不存在某个 DLL 中驻留的共享 runtime key。
- 容器文件扩展名、暂存文件夹名称,以及生成的 loader 中的每个内部变量/类名都是每次构建随机生成的。同一个项目的两次构建在磁盘上或在反编译器中看起来都不会相同。
- 解密后的代码永远不会写入磁盘。模块在被导入时,会通过自定义的 import hook 直接解密到内存中,随后被丢弃。
- 每个容器都经过认证 (GCM),因此损坏或被篡改的文件将无法解密,而不是无声无息地加载乱码。
我要坦诚地说明它的局限性:它并不是坚不可摧的。任何能在他人机器上运行 Python bytecode 的工具都无法做到绝对安全。它真正为你带来的是消除了固定特征码——不存在一个共享的“PyPack runtime”供逆向工程师提取一次特征后,就能针对所有使用此工具构建的应用进行复用。
## 快速开始
```
git clone https://github.com/Arianlavi/PyPack.git
cd PyPack
pip install -r requirements.txt
python pypack.py
```
需要 Python 3.10+。如果你使用 PyPack Crypt,你还需要 `cryptography` 包(它已经包含在 requirements.txt 中了)## 使用说明
将其指向你的项目文件夹和入口脚本,如果有的话设置一个图标,选择你的构建选项,然后点击 Build。如果你需要源码保护,请在构建前开启 PyPack Crypt——其他操作保持不变。最终生成的可执行文件会存放在 `标签:PyInstaller, Python, 代码混淆, 图形界面开发, 打包构建, 无后门, 桌面GUI工具, 漏洞挖掘, 自动化payload嵌入, 软件保护, 逆向工具