From f4a349378eff7211c6c39ae54eb8fb53eb9ad2cd Mon Sep 17 00:00:00 2001 From: cfdaily Date: Thu, 9 Apr 2026 23:15:02 +0800 Subject: [PATCH] auto-sync: 2026-04-09 23:15:02 --- .../README.md | 409 ++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 pangtong-value/research/task-20260409-python-encryption-survey/README.md diff --git a/pangtong-value/research/task-20260409-python-encryption-survey/README.md b/pangtong-value/research/task-20260409-python-encryption-survey/README.md new file mode 100644 index 000000000..8c18d4722 --- /dev/null +++ b/pangtong-value/research/task-20260409-python-encryption-survey/README.md @@ -0,0 +1,409 @@ +# Python代码打包加密方案调研报告 + +**调研人**: 庞统 (pangtong-fujunshi) +**调研日期**: 2026-04-09 +**调研任务**: 调研市面上常见的Python代码加密保护方案,对比优缺点、使用难度、安全性 + +--- + +## 一、调研背景 + +用户需求:如果一个工程都是Python写的,想要打包成别人无法修改代码,该如何做? + +Python作为解释型语言,源码天然易读,发布后容易被复制、修改、逆向。本报告调研市面上常见的Python代码保护方案,帮助用户选择合适的加密打包策略。 + +--- + +## 二、主流方案概览 + +| 方案 | 类型 | 保护强度 | 使用难度 | 商业授权 | +|------|------|----------|----------|----------| +| **PyArmor** | 混淆+加密 | ⭐⭐⭐⭐ | ⭐⭐⭐ | 需要授权(¥286) | +| **Nuitka** | 编译为C++ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 免费 | +| **Cython** | 编译为C扩展 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 免费 | +| **PyInstaller** | 打包+轻度保护 | ⭐⭐ | ⭐⭐ | 免费 | +| **PyArmor+Nuitka组合** | 混淆+编译 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 需要授权 | + +--- + +## 三、详细方案对比 + +### 方案1: PyArmor (专业加密混淆工具) + +#### 原理 +- 加密Python字节码 +- 运行时动态解密执行代码 +- 支持硬件绑定、有效期限制 +- 可选的混淆和反调试保护 + +#### 优点 +✅ **安全性高**: 多重加密机制,运行时解密 +✅ **功能丰富**: 支持硬件绑定、时间限制、许可证管理 +✅ **跨平台**: 支持Windows/Linux/macOS +✅ **可组合使用**: 可与Nuitka、PyInstaller组合 +✅ **防止反编译**: 采取反调试和内存保护措施 + +#### 缺点 +❌ **需授权**: 试用版限制加密代码不超过32MB,完整版需付费(¥286) +❌ **商业限制**: 商用产品销售额超过许可证费用100倍需购买 +❌ **使用难度中等**: 需要学习许可证生成和绑定流程 +命令较多:genreg、cfg、obfuscate、licenses等 + +#### 安全性评级 +- **反编译难度**: ⭐⭐⭐⭐(较高) +- **运行时保护**: ⭐⭐⭐⭐⭐(优秀) +- **硬件绑定**: ⭐⭐⭐⭐⭐(优秀) + +#### 适用场景 +- 商业化Python产品发布 +- 需要精确控制授权的产品 +- 需要时间限制或硬件绑定的软件 +- 对安全要求较高的场景 + +#### 快速开始 +```bash +# 安装 +pip install pyarmor + +# 基础加密 +pyarmor gen main.py + +# 生成许可证(绑定硬盘/MAC/IP) +pyarmor licenses --expired "2028-12-31" \ + --bind-disk "100304PBN2081SF3NJ5T" \ + --bind-mac "70:f1:a1:23:f0:94" \ + client001 + +# 使用许可证加密 +pyarmor obfuscate --with-license licenses/client001/license/license.lic foo.py +``` + +--- + +### 方案2: Nuitka (编译为C++) + +#### 原理 +- 将Python源码编译为C++代码 +- 再将C++编译为本地机器码可执行文件 +- 完全脱离Python解释器运行(但仍需Python运行时库) + +#### 优点 +✅ **安全性极高**: 直接编译为机器码,无法反编译回Python源码 +✅ **性能提升**: 编译后执行速度比纯Python快 +✅ **开源免费**: MIT协议,无商业限制 +✅ **独立可执行**: 生成单文件或文件夹打包,方便分发 + +#### 缺点 +❌ **编译速度慢**: 首次编译耗时较长(比PyInstaller慢很多) +❌ **包体积较大**: 编译产物比PyInstaller打包更大 +❌ **兼容性复杂**: 对某些Python库支持不完善,需要额外配置 +❌ **调试困难**: 编译后错误堆栈不够友好 +❌ **不支持热更新**: 修改代码需要重新编译 + +#### 安全性评级 +- **反编译难度**: ⭐⭐⭐⭐⭐(极高,C++逆向工程难度大) +- **运行时保护**: ⭐⭐⭐(无特殊保护) +- **硬件绑定**: ⭐(不原生支持,需自己实现) + +#### 适用场景 +- 对安全要求极高的商业产品 +- 需要提升执行性能的场景 +- 长期稳定发布的版本 +- 不需要频繁更新的应用 + +#### 快速开始 +```bash +# 安装 +pip install nuitka + +# 编译为可执行文件(Windows) +python -m nuitka --onefile --enable-plugin=tk-inter your_script.py + +# 编译为可执行文件(Linux/Mac) +python -m nuitka --standalone your_script.py + +# 编译时排除调试信息(提高安全性) +python -m nuitka --onefile --remove-debug your_script.py +``` + +--- + +### 方案3: Cython (编译为C扩展) + +#### 原理 +- 将Python代码编译为C代码 +- 再编译为Python C扩展模块(.pyd/.so文件) +- 可以选择性暴露接口,隐藏核心逻辑 + +#### 优点 +✅ **安全性高**: 编译为二进制,无法直接反编译 +✅ **灵活性强**: 可选择性地编译部分模块 +✅ **性能优异**: C扩展执行速度快 +✅ **开源免费**: 开源协议,无商业限制 +✅ **可控性好**: 可以精确控制哪些代码暴露 + +#### 缺点 +❌ **使用难度高**: 需要Cython语法知识,需要编写setup.py +❌ **开发效率低**: 修改代码需要重新编译 +❌ **兼容性问题**: 某些Python动态特性不支持 +❌ **跨平台编译**: 不同平台需要分别编译 + +#### 安全性评级 +- **反编译难度**: ⭐⭐⭐⭐(C扩展逆向有一定难度) +- **运行时保护**: ⭐⭐⭐(无特殊保护) +- **硬件绑定**: ⭐(不原生支持) + +#### 适用场景 +- 需要高性能计算的核心模块保护 +- 混合项目(部分模块加密,部分开源) +- 有C/C++开发经验的团队 +- 需要精确控制暴露接口的场景 + +#### 快速开始 +```python +# setup.py +from distutils.core import setup +from Cython.Build import cythonize + +setup( + ext_modules = cythonize("your_module.pyx") +) + +# 编译 +python setup.py build_ext --inplace +``` + +--- + +### 方案4: PyInstaller (打包工具) + +#### 原理 +- 将Python脚本及其依赖打包成单个可执行文件 +- 内嵌Python解释器和依赖库 +- 提取并打包pyc字节码 + +#### 优点 +✅ **使用简单**: 一条命令打包 +✅ **跨平台**: 支持多平台打包 +✅ **开源免费**: 无商业限制 +✅ **体积适中**: 打包产物大小合理 + +#### 缺点 +❌ **安全性较低**: 仅是打包,pyc字节码可被反编译 +❌ **容易被破解**: 使用pycdc等工具可还原源码 +❌ **体积较大**: 内嵌完整Python运行时 +❌ **启动慢**: 解压临时文件需要时间 + +#### 安全性评级 +- **反编译难度**: ⭐⭐(易被反编译) +- **运行时保护**: ⭐(无保护) +- **硬件绑定**: ⭐(不支持) + +#### 适用场景 +- 快速原型和内部工具分发 +- 安全要求不高的场景 +- 开源项目打包 +- 作为其他方案的基础步骤 + +#### 快速开始 +```bash +# 安装 +pip install pyinstaller + +# 打包为单文件 +pyinstaller -F your_script.py + +# 打包为单文件(无控制台窗口) +pyinstaller -F -w your_script.py + +# 打包为文件夹(启动更快) +pyinstaller -D your_script.py +``` + +--- + +### 方案5: PyArmor + Nuitka 组合 (终极方案) + +#### 原理 +- 先用PyArmor加密Python字节码 +- 再用Nuitka将加密后的代码编译为C++ +- 两层保护:混淆+编译 + +#### 优点 +✅ **安全性极高**: 双重保护,几乎无法逆向 +✅ **灵活性高**: 保留PyArmor的授权管理 +✅ **性能优秀**: Nuitka编译后执行更快 + +#### 缺点 +❌ **复杂度高**: 需要掌握两个工具 +❌ **编译耗时**: 两个步骤都需要时间 +❌ **需要授权**: PyArmor需要购买许可证 + +#### 安全性评级 +- **反编译难度**: ⭐⭐⭐⭐⭐(极高) +- **运行时保护**: ⭐⭐⭐⭐⭐(优秀) +- **硬件绑定**: ⭐⭐⭐⭐⭐(优秀) + +#### 适用场景 +- 高价值商业产品 +- 对安全要求极高的场景 +- 需要授权管理的软件 +- 有预算和专业团队支持 + +--- + +## 四、方案推荐 + +### 场景分类推荐 + +| 场景 | 推荐方案 | 理由 | +|------|----------|------| +| **小型项目/快速原型** | PyInstaller | 免费、简单、够用 | +| **中型商业项目** | PyArmor | 专业、灵活、授权管理 | +| **高性能核心模块** | Cython | 性能+安全平衡 | +| **大型商业产品** | PyArmor + Nuitka | 最大安全性 | +| **预算有限的商业产品** | Nuitka | 高安全性且免费 | +| **需要频繁更新的产品** | PyArmor | 支持动态授权更新 | +| **混合开源/闭源项目** | Cython | 选择性编译 | + +### 综合推荐(按优先级) + +**1️⃣ 最佳商业方案: PyArmor** +- 专为Python代码保护设计 +- 授权管理功能完善 +- 社区活跃,文档丰富 +- 价格合理(¥286) +- 可与其他方案组合 + +**2️⃣ 最佳免费方案: Nuitka** +- 完全免费开源 +- 安全性极高(编译为C++) +- 性能提升明显 +- 适合预算有限但安全性要求高的项目 + +**3️⃣ 平衡方案: Cython** +- 适合混合项目 +- 性能与安全平衡 +- 适合有技术积累的团队 + +**4️⃣ 入门方案: PyInstaller** +- 简单易用 +- 适合学习和原型阶段 +- 可作为PyArmor的前置步骤 + +--- + +## 五、成本效益分析 + +### 经济成本 +| 方案 | 授权费用 | 人力成本 | 总成本 | +|------|----------|----------|--------| +| PyArmor | ¥286 | 中等 | 中等 | +| Nuitka | 免费 | 较高 | 较高 | +| Cython | 免费 | 高 | 高 | +| PyInstaller | 免费 | 低 | 低 | +| PyArmor+Nuitka | ¥286 | 高 | 高 | + +### 时间成本 +- PyArmor: 加密快,5-10分钟 +- Nuitka: 编译慢,30分钟-2小时 +- Cython: 中等,15-30分钟 +- PyInstaller: 快,2-5分钟 +- PyArmor+Nuitka: 慢,1-3小时 + +--- + +## 六、安全风险提醒 + +### ⚠️ 重要说明 + +1. **没有绝对的不可破解** + - 所有方案都只是提高破解成本 + - 理论上任何代码都可以被逆向 + C/C++也可被IDA Pro、Ghidra等工具逆向,难度更高 + +2. **PyArmor试用版限制** + - 加密代码不超过32MB + - 商用产品销售额限制 + - 功能受限(如实时保护、动态更新) + +3. **运行时内存可被dump** + - 所有方案都面临内存dump风险 + - 需配合反调试技术 + +4. **核心逻辑建议** + - 最敏感的算法建议放到服务端 + - 客户端只做调用和展示 + - 密钥和关键配置不要硬编码 + +--- + +## 七、实施建议 + +### 短期策略(1-3个月) +1. 使用PyInstaller快速打包原型 +2. 验证打包可行性 +3. 评估用户反馈 + +### 中期策略(3-12个月) +1. 购买PyArmor授权(¥286) +2. 生成硬件绑定许可证 +3. 测试授权管理流程 + +### 长期策略(1年以上) +1. 评估Nuitka集成 +2. 建立CI/CD自动化编译流程 +3. 考虑核心逻辑服务端迁移 + +--- + +## 八、总结 + +### 关键结论 + +1. **推荐方案**: PyArmor + - 专业性强、功能完善、价格合理 + - 适合大多数商业场景 + - 可根据需求升级到PyArmor+Nuitka + +2. **免费替代**: Nuitka + - 安全性与PyArmor相当甚至更高 + - 完全免费开源 + - 适合预算有限的项目 + +3. **组合使用**: PyInstaller → PyArmor → Nuitka + - 先用PyInstaller测试打包 + - 再用PyArmor添加加密授权 + - 最后用Nuitka提升安全性和性能 + +### 下一步行动 + +1. **根据项目选择方案**: + - 小型项目:PyInstaller + - 中型商业:PyArmor + - 大型/高安全:Nuitka或PyArmor+Nuitka + +2. **搭建测试环境**: + - 选择推荐方案 + - 对非核心代码进行测试 + - 验证打包流程和安全性 + +3. **制定授权策略**: + - 是否需要硬件绑定 + - 是否需要时间限制 + - 授权价格和发放方式 + +--- + +## 参考资料 + +1. [PyArmor官方文档](https://pyarmor.readthedocs.io/) +2. [Nuitka官方文档](https://nuitka.net/doc/) +3. [Cython官方文档](https://cython.readthedocs.io/) +4. [PyInstaller官方文档](https://pyinstaller.org/) +5. [PyArmor许可模式说明](https://pyarmor.readthedocs.io/zh/latest/licenses.html) + +--- + +**报告完成时间**: 2026-04-09 19:10 +**提交人**: 庞统 (pangtong-fujunshi)