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版本绑定

相关推荐
云和数据.ChenGuang1 小时前
tensorflow生成随机数和张量
人工智能·python·tensorflow
在坚持一下我可没意见1 小时前
HTTP 协议基本格式与 Fiddler 抓包工具实战指南
java·开发语言·网络协议·tcp/ip·http·java-ee·fiddler
樱花开了几轉2 小时前
element ui下拉框踩坑
开发语言·javascript·ui
报错小能手2 小时前
C++笔记(面向对象)RTTI操作符
开发语言·c++·笔记
草明2 小时前
Go 的 IO 多路复用
开发语言·后端·golang
测试老哥2 小时前
python+requests+excel 接口测试
自动化测试·软件测试·python·测试工具·测试用例·excel·接口测试
晟盾科技2 小时前
报表类系统后端API设计思路
开发语言·windows·php
AI纪元故事会2 小时前
冰泪与雨丝:一个AI的Python挽歌
开发语言·人工智能·python
ColderYY2 小时前
Python连接MySQL数据库
数据库·python·mysql
我不是程序猿儿3 小时前
【C#】WinForms 控件句柄与 UI 刷新时机
开发语言·ui·c#