小墨の博客

梦想需要付诸行动,否则只能是梦

Python 代码加密 PyArmor(代码保护、设置许可日期等)

使用 PyArmor 对代码进行保护

PyArmor 文档:https://pyarmor.readthedocs.io/zh/latest/index.html

安装

pip install pyarmor


查看版本

pyarmor --version

成功在终端看到版本号即安装成功。

PyArmor Trial Version 7.7.4

PyArmor is a command line tool used to obfuscate python scripts, bind
obfuscated scripts to fixed machine or expire obfuscated scripts.

For more information, refer to https://pyarmor.readthedocs.io

【备注】第一次使用 PyArmor 命令时会在当前用户 ~ 目录下自动创建一个 .pyarmor 文件夹,

INFO     Create pyarmor home path: /home/xxx/.pyarmor
INFO     Create trial license file: /home/xxx/.pyarmor/license.lic


加密

# 加密主脚本 main.py 以及同目录的其他 *.py
pyarmor obfuscate main.py
# 默认情况下,只有和主脚本相同目录的其他 *.py 会被同时加密

# 递归加密子目录下的所有 *.py 文件
pyarmor obfuscate --recursive main.py

命令 obfuscate 用来加密脚本,最常用的一种情况是切换到脚本 main.py 所在的路径,然后执行。

PyArmor 会加密 app.py 和相同目录下面的所有 *.py 文件到 dist 文件夹中。

发布加密脚本给客户只需要把输出路径 dist 的所有文件拷贝过去即可

【备注】运行加密脚本无需安装 PyArmor


生成新的许可文件

运行加密脚本必须有一个认证文件 license.lic 。一般在加密脚本的同时,会自动生成一个缺省的认证文件。但是这个缺省的认证文件允许加密脚本运行在任何机器并且永不过期。

如果需要设置加密脚本的使用期限或者限制脚本在特定的机器使用,需要生成新的许可文件, 并使用新的许可文件加密脚本。


设置加密脚本的使用期限

生成一个带有效期的认证文件

pyarmor licenses --expired 2023-03-10 "auth-license"

生成的认证文件会保存在 licenses/auth-license/ 目录下


使用新生成的许可文件加密脚本

pyarmor obfuscate --with-license licenses/auth-license/license.lic main.py

这样,在2023年03月10日之后运行脚本就会报错


绑定加密脚本到固定机器上

如果想绑定加密脚本到固定机器上,首先在该机器上面运行下面的命令获取硬件信息

pyarmor hdinfo

会得到如下输出(以下输出是在Ubuntu 22.04 系统下得到的,硬件信息已打码)

INFO     Generating public capsule ...
INFO     PyArmor Trial Version 7.7.4
INFO     Python 3.8.15

Hardware informations got by PyArmor:

Failed to get harddisk information.

Default Mac address: "0c:7a:xx:xx:xx:xx"

Multiple Mac addresses: "<0c:7a:xx:xx:xx:xx>"

Ip address: "192.168.2.4"

Domain name: "(none)"

Change logs

        v6.2.0(r21): Remove trailing dot from harddisk serial number
        v6.4.2(r34): Support binding multiple mac addresses
        v6.5.3(r37): Support binding named harddisk
        v6.7.5(r45): Support mmc/sd card in Linux

然后在生成绑定到固定机器的许可文件:硬盘信息(如果一台机器上有多个硬盘,那么 pyarmor 只检查默认的硬盘,也就是命令 hdinfo 打印出来的默认硬盘)

pyarmor licenses --bind-disk "100304PBN2081SF3NJ5T" --bind-mac "0c:7a:xx:xx:xx:xx" r002

同样,使用这个许可文件加密脚本,加密脚本就只能在指定机器上运行

pyarmor obfuscate --with-license licenses/code-002/license.lic app.py



运行加密代码

进入 dist 目录,按照原来的方式启动项目即可。



本文参考了以下文章:

https://blog.csdn.net/Disany/article/details/124505304

张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:508
    • 页面总数:20
    • 分类总数:92
    • 标签总数:208
    • 评论总数:61
    • 浏览总数:225323

    | | |
    | |  Z-Blog PHP