查看: 90|回复: 3

PyArmor 实战:Python 脚本加密与授权控制全流程

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
Python 脚本分发时,直接发布源码容易泄露逻辑。PyArmor 是一个命令行加密工具,能对 .py 文件进行混淆与加密,支持设置有效期、绑定机器硬件,甚至打包成独立可执行文件。下面从安装到高级用法完整走一遍。

1. 安装 PyArmor
通过 pip 完成,升级也只需一条命令。
  1. pip install pyarmor
  2. # 如需升级
  3. pip install --upgrade pyarmor
复制代码
安装后执行 pyarmor --version 验证是否成功。

2. 加密单个脚本
假设要加密 foo.py,v8+ 版本推荐用 gen 命令。旧版本也可用 obfuscate。
  1. pyarmor gen foo.py
  2. # 旧版本:pyarmor obfuscate foo.py
复制代码
执行后,dist 目录会生成加密后的 foo.py 以及一个运行时辅助包(如 pyarmor_runtime_000000)。用户拿到完整的 dist 目录即可运行,因为加密脚本依赖运行时环境。

3. 添加有效期
控制试用版过期时间,支持天数或具体日期。
  1. # 30天后过期
  2. pyarmor gen -e 30 foo.py
  3. # 指定具体日期(UTC 时间)
  4. pyarmor gen -e 2026-12-31 foo.py
复制代码
默认检查系统本地时间,用户可能修改系统时间绕过。可配置从 NTP 服务器获取时间,增强安全性。
  1. pyarmor cfg nts=pool.ntp.org
  2. pyarmor gen -e 30 foo.py
复制代码
4. 绑定硬件信息
让脚本只能在指定机器上运行。第一步:在客户机器上获取硬件特征。
  1. # v8.4.6 及以后
  2. python -m pyarmor.cli.hdinfo
  3. # 旧版本
  4. pyarmor hdinfo
复制代码
得到 MAC 地址或硬盘序列号后,加密时绑定。
  1. # 绑定单个 MAC
  2. pyarmor gen -b "00:16:3e:35:19:3d" foo.py
  3. # 绑定硬盘序列号
  4. pyarmor gen -b "HXS2000CN2A" foo.py
  5. # 绑定多个 MAC
  6. pyarmor gen --bind 66:77:88:9a:cc:fa,f8:ff:c2:27:00:7f foo.py
复制代码
多次使用 -b 可绑定多个设备。

5. 增强型加密选项
以下参数需注意授权版本。
  1. --enable-jit    # 启用动态指令生成
  2. --mix-str       # 加密字符串常量(需正版授权)
  3. --assert-call   # 防止函数被替换
  4. # 组合使用示例
  5. pyarmor gen --enable-jit --mix-str --assert-call foo.py
复制代码
6. 打包成独立可执行文件
将加密脚本与 Python 运行时打包,用户无需安装 Python。
  1. # 单文件
  2. pyarmor gen --pack onefile -O dist_onefile main.py
  3. # 目录形式
  4. pyarmor gen --pack onedir -O dist_onedir main.py
复制代码
注意:非 .py 文件(如资源文件)需手动复制到输出目录。

7. 加密完整项目
对包/目录递归加密,保留结构。
  1. pyarmor gen -r -O dist_output src/mypackage
  2. --exclude 可排除某些目录或文件
复制代码
8. 跨平台支持
生成多平台运行时库,但会增加打包体积。
  1. pyarmor gen --platform windows.x86_64,linux.x86_64 your_script.py
复制代码
9. 实用命令速查
- -O, --output:指定输出目录,默认 dist。
- -r, --recursive:递归加密目录下所有 .py 文件。
- --exclude:排除指定目录/文件。
- -d, --debug:调试模式,输出详细错误。
- -h, --help:查看命令用法(如 pyarmor gen -h)。

注意:不同版本命令和选项可能存在差异,遇到问题先用 -h 查看当前版本帮助。

10. 发布结构示例
加密后的发布目录应包含运行时辅助包:
  1. dist/
  2. ├── foo.py
  3. └── pyarmor_runtime_000000/
  4.     ├── __init__.py
  5.     └── pyarmor_runtime.so
复制代码
若使用 --pack 打包为单文件/目录,则运行时已内嵌,用户直接运行可执行文件即可。

通过上述步骤,你可以在不泄露原始 Python 代码的前提下灵活控制脚本的使用期限与运行环境,适合分发试用版或商业软件的 Python 组件。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: PyArmor 实战:Python 脚本加密与授权控制全流程

感谢楼主分享这么详细的 PyArmor 实战教程!从安装、加密、有效期、硬件绑定再到打包和项目加密,整个流程非常清晰,对我们这种需要分发 Python 脚本又担心源码泄露的人来说特别实用。 有个小建议:关于时间校验绑定 NTP 的部分,如果用户环境无法访问外网,可能需要额外的配置或本地时间服务器方案,这个点可以稍微提一下。另外,`--mix-str` 这类高级加密需要正版授权,新手可能需要注意区分社区版和授权版的功能差异。 总之,楼主总结得很到位,我收藏了,以后分发脚本就参照这个流程来。
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: PyArmor 实战:Python 脚本加密与授权控制全流程

感谢楼主的详细教程,从头到尾把 PyArmor 的常见用法都覆盖了,尤其是绑定硬件和设置有效期这部分,对分发试用版特别实用。我有个小疑问:你提到的 NTP 时间校验,在用户断网或者自定义 NTP 服务器的情况下,会不会导致授权验证失败?有没有推荐的回退策略?另外,如果项目里用了非 .py 的资源文件(比如图片、配置文件),打包成独立可执行文件时除了手动复制,有没有更自动化的方式?希望听听你的经验,谢谢!
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: PyArmor 实战:Python 脚本加密与授权控制全流程

学到了,感谢楼主的详细教程!之前一直用混淆库,但功能没这么全。特别是硬件绑定和有效期控制,对分发商业项目太实用了。有个小问题想请教:如果客户机器更换了网卡,绑定MAC地址后脚本就无法运行,有没有什么容错机制?比如允许绑定多个MAC或者支持绑定硬盘序列号更稳定?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-6 13:25 , Processed in 0.035939 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部