一个计算机技术爱好者与学习者

0%

好好学Python:基于Pyarmor加密Python代码

1. 前言

Python是一种解释型语言,相较于编译型语言,代码更容易泄露。
为了保护知识产权、防止代码被未授权访问或修改、以及保护商业机密,有时候我们需要进行Python代码加密(混淆)。

目前比较好的Python代码加密产品是Pyarmor,它具有免费版本和付费版本。
Pyarmor 加密后的脚本输出的是同名的 .py 文件和一个运行辅助包。它们和普通 Python 模块一样,可以被
Python 解释器调用执行,这也是 Pyarmor 的一个加密特点,可以使用加密后的脚本无缝替换原来的脚本。
本文中,我们来学习一下Pyarmor的使用。

参考文档:

2. 免费版与付费版区别

参考文档:License Types

下载和安装本软件表示自动接受试用许可协议,试用版本(免费版本)有如下的限制:

  • 加密功能对脚本大小有限制,不能加密超过限制的大脚本。
  • 混淆字符串功能在试用版中无法使用。
  • RFT 加密模式,BCC 加密模式在试用版无法使用。
  • 不可以用于加密商用产品。特别的,如果商用产品的累计销售额小于基础版许可证费用乘以30,可以暂时使用;但是一旦累计销售额超过阀值,就不可以在继续使用。
  • 运行辅助包的名称 “pyarmor_runtime_000000” 不可以被设置和修改
  • 不可以使用本软件提供任何形式的加密服务,不管是通过应用程序还是网络服务。总之在任何情况下都不允许使用本软件加密其他人的脚本。
  • 不支持 obf-code 大于 1 的任何加密模式

试用版本中功能限制,需要通过许可授权来解锁相关功能。但是第 (6) 条限制没有任何许可证可以解锁。

3. 使用免费版Pyarmor

3.1. 加密单个文件

1、准备一个测试文件 demo.py

1
print("hello")

2、安装pyarmor

1
pip install pyarmor

3、加密文件

1
pyarmor gen demo.py

4、运行加密后文件

1
2
cat dist/demo.py
python dist/demo.py

3.2. 加密代码包

1、准备一个代码包 mypkg

1
2
3
mypkg
├── __init__.py
└── demo.py

2、加密代码包

1
pyarmor gen -O dist2 mypkg

3、测试运行代码包

1
2
cd dist2
python -c 'import mypkg'

3.3. 设置过期时间

设置30天之后过期

1
pyarmor gen -O dist4 -e 30 foo.py

设置指定日期过期

1
pyarmor gen -O dist4 -e 2020-12-31 foo.py

3.4. 绑定设备

1、获取设备信息

1
2
python -m pyarmor.cli.hdinfo
# pyarmor-7 hdinfo # Before Pyarmor 8.4.6, using pyarmor-7 hdinfo to get hardware information.

得到输出:

1
2
3
Default Harddisk Serial Number: 'HXS2000CN2A'
Default Mac address: '00:16:3e:35:19:3d'
Default IPv4 address: '128.16.4.10'

2、绑定设备

1
2
3
4
pyarmor gen -O dist5 -b 00:16:3e:35:19:3d foo.py
pyarmor gen -O dist5 -b 128.16.4.10 foo.py
pyarmor gen -O dist5 -b HXS2000CN2A foo.py
pyarmor gen -O dist5 -b "00:16:3e:35:19:3d HXS2000CN2A" foo.py

4. 使用付费版Pyarmor

1、根据购买Licence时获取到的链接,下载 pyarmor-regfile-xxx.zip

2、注册Licence

1
pyarmor register /path/to/pyarmor-regfile-xxx.zip

3、验证注册信息

1
pyarmor register

4、使用Pyarmor
付费版用法和免费版基本相同。