首页 > 其他分享 >pyarmor的使用

pyarmor的使用

时间:2023-05-20 22:31:57浏览次数:38  
标签:INFO license demo py 使用 diff pyarmor

官方文档

作用: 用于python脚本的加密


切换到虚拟环境python3.x下(这里是用的3.6,个人开发环境下推荐使用miniconda3来实现虚拟环境管理)


这里演示的脚本叫 diff_demo.py ,用于比较 old和new 这2个文件的差异

1 原始文件和目录如下:
tree
.
├── diff_demo.py
├── new
└── old

pip install pyarmor


2 加密文件
pyarmor obfuscate diff_demo.py

3 查看目录结构
tree
.
├── compare.html
├── diff_demo.py
├── dist
│    ├── diff_demo.py
│    └── pytransform
│        ├── __init__.py
│        └── _pytransform.so
├── new
└── old


其中, dist/diff_demo.py  就是加密后的文件 
$ cat dist/diff_demo.py 
from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x06\x00\x33\x0d\x0d\x0a\x09\x34\xe0\x02\x00\x00\x00\x00 
下面内容省略
...
            
            
4 创建有效期文件
pyarmor  licenses -e 2020-12-21 r001  # 故意设置一个过期的日期

5 查看目录结构      
tree
.
├── compare.html
├── diff_demo.py
├── dist
│    ├── diff_demo.py
│    └── pytransform
│        ├── __init__.py
│        ├── __pycache__
│        │    └── __init__.cpython-36.pyc
│        └── _pytransform.so
├── licenses
│    └── r001
│        ├── license.lic
│        └── license.lic.txt
├── new
└── old


6 执行加密
pyarmor obfuscate --with-license licenses/r001/license.lic diff_demo.py


7 执行测试
python dist/diff_demo.py
这里直接提示 License is expired


另外,我们进到 dist 目录下执行也行。 或者把文件拷贝到其它地方(确保依赖相对路径的一致就行)去执行都可以。



8 此外,还可以绑定到网卡mac, 如果更换机器后 网卡mac不一致就无法执行
pyarmor hdinfo
日志如下 
INFO     PyArmor Trial Version 7.7.4
INFO     Python 3.6.13

Hardware informations got by PyArmor:

Failed to get harddisk information.

Default Mac address: "00:0c:29:4e:e7:f6"

Multiple Mac addresses: "<00:0c:29:4e:e7:f6,02:42:53:d3:63:0c>"

Ip address: "x.x.x.x"

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



9 这里故意绑定一个错误的mac地址
pyarmor licenses --bind-mac "00:0c:29:4e:f7:ff" r002
日志如下: 
INFO     PyArmor Trial Version 7.7.4
INFO     Python 3.6.13
INFO     Generate licenses with capsule /root/.pyarmor/.pyarmor_capsule.zip ...
INFO     Make output path of licenses: licenses
INFO     The license file is generated in restrict mode
INFO     The license file is generated in period mode disabled
INFO     Make path: licenses/r002
INFO     Generate license: *IFMAC:00:0c:29:4e:f7:ff*CODE:r002
INFO     Write license file: licenses/r002/license.lic
INFO     Write information to licenses/r002/license.lic.txt
INFO     Generate 1 licenses OK.


10 查看下当前目录结构
tree
.
├── compare.html
├── diff_demo.py
├── licenses
│    └── r002
│        ├── license.lic
│        └── license.lic.txt
├── new
└── old

11 使用mac地址绑定方式来加密文件
pyarmor obfuscate --with-license licenses/r002/license.lic diff_demo.py
日志如下:
......
INFO     Start obfuscating the scripts...
INFO     	diff_demo.py -> dist/diff_demo.py
INFO     Insert bootstrap code to entry script dist/diff_demo.py
INFO     Obfuscate 1 scripts OK.


12 执行测试
python dist/diff_demo.py
提示 License is not for this machine




13 此外,还可以打包成独立可执行文件
$ pip install pyinstaller  # 需要确保 pyinstaller已安装

$ pyarmor pack diff_demo.py

$ cd dist/diff_demo
$ ./diff_demo old new  这样可以执行成功

# 如果把 diff_demo 拷贝到其它目录(如/tmp/下,则执行会报错,因为会提示找不到.so文件)下面是拷贝到/tmp下执行的样子
$ ./diff_demo old new
[11552] Error loading Python lib '/tmp/libpython3.6m.so.1.0': dlopen: /tmp/libpython3.6m.so.1.0: cannot open shared object file: No such file or directory


14 开启web页面 (生产上基本用不到,了解下即可)
pip install pyarmor-webui
pyarmor-webui --host 0.0.0.0

            





标签:INFO,license,demo,py,使用,diff,pyarmor
From: https://blog.51cto.com/lee90/6318143

相关文章

  • 使用 Elasticsearch 的 REST API 来查询节点的内存使用情况
    curl-XGET'http://172.18.10.96:9200/_nodes/node-1/stats?pretty&human&filter_path=nodes.*.jvm.mem.heap_used_percent'{"nodes":{"WKECtNqYSuCKgHu-HNJTfg":{"jvm":{"mem":......
  • Java中的并发编程:线程池的使用与优化
    在Java编程中,处理并发任务是一项常见而重要的任务。合理地管理线程可以提高程序的性能和响应性。本文将介绍Java中线程池的使用和优化技巧,帮助开发者更好地处理并发编程的挑战。1.线程池的基本概念线程池是一种用于管理线程的技术,它通过预先创建一组线程,并将任务分配给这些线程来......
  • LeetCode 746.使用最小花费爬楼梯
    1.题目:给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例1:输入:cost=[10,15,20]输出:15解释:你......
  • 使用ShardingShpere来实现读写分离跟分库分表
    环境准备两个mysql集群,一主一从我们简单的用docker-compose来快速搭建一个version:'3'services:master1:image:mysql:5.7environment:MYSQL_ROOT_PASSWORD:123456ports:-"3307:3306"volumes:-./master1/data:/var/lib/mysql......
  • 云原生之使用Docker部署etherpad文档编辑器
    (云原生之使用Docker部署etherpad文档编辑器)一、Etherpad介绍1.Etherpad简介Etherpad是一个高度可定制的开源在线编辑器,提供真正实时的协作编辑。2.Etherpad特点Etherpad允许您实时协作编辑文档,就像在浏览器中运行的实时多人编辑器一样。与您的朋友、同学或同事一起撰写......
  • ABBAC900F学习笔记301:使用securityLock做解除联锁按钮的权限限制功能
    这一篇学习笔记,我在新浪博客记录过,因为担心丢失,在这里再记录一遍,新浪博客地址ABBAC900F学习笔记301:使用securityLock做解除联锁按钮的权限限制功能_来自金沙江的小鱼_新浪博客(sina.com.cn) 这个学习练习,实际上还是在以前学习基础上做的,没有多少新意,权当复习一遍吧。在虚拟......
  • 使用docker安装 rabbitmq
    在Docker中安装RabbitMQ的步骤:安装Docker:如果您还没有安装Docker,请先按照官方文档进行安装。搜索RabbitMQ镜像:打开终端并运行以下命令来搜索可用的RabbitMQDocker镜像:dockersearchrabbitmq选择要使用的RabbitMQ版本:根据您的需求,选择一个RabbitMQ版本。例如,如果您想使用RabbitMQ......
  • 面向对象的使用
    类的定义与使用(类也可以看做成一个容器)类在定义的时候定义阶段就会执行类体的代码,属于类的局部名称空间外界无法直接调用。类名加括号就会产生对象,并且每执行一次都会产生一个全新的对象(内存地址都不一样)。数据和功能也可以叫属性,数据就是属性名、功能就是方法对象.__dict__查......
  • 使用Requests模块进行微博爬虫教程【网络请求分析文档】
    目录写在前面请求热搜获取某个热搜下的内容获取长文本获取图片获取评论第一部分后续部分获取某个用户的微博第一部分后续部分后续部分写在前面该文档是某课程实验需要而整理的,各个接口分析仅凭我个人理解,各个参数以及数据的含义也只是我个人的推测,如有错误的地方,欢迎在评论区或......
  • C++中动态和静态库(dll) 使用(转)
    目录:1.lib与dll介绍2.动态库的生成与使用3.静态库的生成与使用 1.首先介绍下静态库(静态链接库,.lib文件),动态库*(动态链接库,.dll文件)的概念,两者都是代码共享的方式.静态链接:静态链接是指在编译的时候就把模块的内容加载进来一起编译,这样编出来的exe文件包含了模块......