python脚本加密之pyarmor

继续上篇的代码加密,今天写下第二种方式pyarmor,反正就是很牛逼

1、特点

代码加密与混淆:PyArmor 会对 Python 源代码编译后的字节码进行高强度加密,使其无法被标准反编译工具直接读取。此外,它还提供代码混淆功能,例如重命名函数、变量名(名称混淆)和控制流扁平化等,即使部分代码被解密,其逻辑也难以分析。

灵活的授权管理:这是 PyArmor 的一大亮点。开发者可以生成许可证文件(license.lic),对加密脚本的使用进行精细控制。具体包括:

设置有效期:可以指定脚本在某个具体日期(如 2024-12-31)或一段时间后(如 30 天后)自动失效。

绑定硬件信息:可以将脚本绑定到特定设备的硬盘序列号、网卡 MAC 地址等硬件信息上,确保脚本只能在授权的机器上运行。 ○ 自定义绑定数据:支持绑定开发者自定义的字符串数据,可用于实现更复杂的授权逻辑,如绑定客户ID或用户名。

跨平台支持:PyArmor 支持 Windows、Linux 和 macOS 等主流操作系统,并能兼容不同架构(如 x86_64, ARM)。需要注意的是,加密后的脚本依赖平台特定的 _pytransform动态库,因此分发时需要确保库与目标环境匹配。

2、原理

  • 加密期:PyArmor 并非直接加密原始的 .py源代码文件,而是对 Python 解释器将源代码编译后产生的字节码(.pyc文件)进行加密处理。

  • 运行时:不会在程序启动时将整个脚本的所有字节码一次性解密到内存中,而是采用"按需解密"的策略。当运行一个被加密的脚本时,只有当前即将被调用的特定函数或代码块的字节码会被动态解密并送入 Python 虚拟机执行,一旦执行完毕,这部分内存中的字节码会被重新加密

3、试用版和正式版

PyArmor默认安装的是试用版适合用于个人学习、功能测试和非商业项目的初步体验。 如果你需要将PyArmor用于商业软件保护、需要高级加密功能,或者希望对加密后的脚本进行有效的授权控制,那么购买相应的正式版许可是必要的。

4、使用

4.1、安装pyarmor

复制代码
pip install pyarmor
pyarmor --version

可以看到我这个是试用版。

4.2打包项目

切换到项目的根目录

复制代码
pyarmor gen -O dist -r .  

执行完成之后在当前项目的根目录生成dist文件夹

可以看到生成了具体的代码,可以正常执行

复制代码
python can_sender_node

这里dist文件可以直接发布

5、打包脚本介绍

命令格式

复制代码
pyarmor [options] <command> [command-options] <script or path>

command是核心操作,如 gen(生成加密脚本)或 obfuscate(混淆脚本),后跟具体的脚本或路径参数

5.1 生成单个文件

复制代码
pyarmor gen .\changes.py

5.2 生成整个项目

复制代码
pyarmor gen -O dist -r .  

5.3 生成脚本带时间

设置有效期(-e / --expired):可以为加密脚本设置一个过期时间,例如 -e "2024-12-31"或 -e "30"(表示30天后失效)。过期后脚本将无法运行。

复制代码
pyarmor gen -O dist2 -e 30 .\changes.py 

5.4 生成绑定硬件设备

绑定硬件设备:可以将加密脚本绑定到特定的硬件设备上,确保脚本只能在授权的机器上运行。常用的绑定参数包括 --bind-disk(绑定硬盘序列号)、--bind-mac(绑定网卡MAC地址)等

复制代码
pyarmor gen -O dist2 --restrict harddisk=00:16:3e:35:19:3d changes.py
pyarmor gen -O dist2 --restrict mac=00:16:3e:35:19:3d changes.py

● 如果版本是 8.x.x → 用新语法(--restrict harddisk=...) ● 如果版本是 7.x.x → 用旧语法(--bind-disk)

6、一些注意点

  • 只发布 dist文件夹,不安装 PyArmor,完全可以运行加密后的脚本 只需将 PyArmor 加密后生成的 dist目录(包含加密脚本、pyarmor_runtime辅助包和 _pytransform动态库)完整分发给用户即可。用户无需安装 PyArmor

  • 脚本和具体的python版本绑定

相关推荐
顾林海37 分钟前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱3 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽8 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码8 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱18 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵19 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate