当前位置: 首页 > article >正文

pyarmor加密python脚本

文章目录

  • 一、pyarmor是什么?
  • 二、原理
  • 三、加密的方式
    • 1.指定入口脚本
    • 2.不指定入口脚本
  • 总结


一、pyarmor是什么?

PyArmor 是一个强大的工具,可以有效地保护 Python 代码,防止源代码被逆向工程。简单来说,就是对代码进行加密,防止别人查看到代码内容,了解具体的实现。

二、原理

安装pyarmor 7.x 版本后,使用命令加密一个python项目,项目的结构如下:

├── my.py
│       
└── test.py

其中每个脚本都是一个 print语句即可。

加密命令如下:

pyarmor obfuscate test.py

经过一串INFO信息后,将会在同级目录下生成一个dist目录,dist目录内容如下:

├── pytransform
│   ├── __init__.py
│   └── _pytransform.so
├── my.py   
└── test.py

进入dist目录后,直接执行python test.py,发现可以直接执行,生成结果。这就是pyarmor的最大特点:加密脚本无缝替换原来的脚本。那就是可以和非加密脚本之间互相替换。pytransform包是pyarmor的运行辅助包,运行加密python脚本必须被导入。

查看一下dist中test.py内容:

from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x06\x0f...')

可以发现执行脚本前导入前文提及的运行辅助包。但是my.py脚本内容如下:

__pyarmor__(__name__, __file__, b'\x06\x0f...')

直接python my.py 也会直接报错,只是因为在运行时缺少运行辅助包,但是在原始的test.py 脚本中导入my.py脚本中的函数,可以直接正常运行test.py脚本。

到此处,我们也知道 pyarmor obfuscate test.py 命令的大致含义了,该命令能够将当前目录(子目录则加 -r 参数)下的python脚本进行加密,最后的位置参数 test.py 就是python项目的主入口,类似与main函数。

那么pyarmor是如何加密python代码的呢?

实际上,pyarmor首先对源码进行混淆,比如函数名、类名等替换成无意义的字符串。然后把源代码编译成字节码,然后对字节码中填充一些多余的动作(不影响机器的理解,但是混淆使得人为难以阅读),最后使用加密算法对字节码进行加密即可。

三、加密的方式

章节二基本上将这种方式描述清楚了,但是章节二中的方式主要用来加密单个脚本,对于加密整个工程项目还存在更加标准的方法。

1.指定入口脚本

  1. 进入加密项目中,使用命令 pyarmor init --entry=main.py初始化整个项目,并设置项目的唯一入口脚本是main.py(如果有多个,用逗号分隔即可)。
  2. 使用命令 pyarmor build 加密项目中的python脚本,同级目录中将生成一个dist目录,dist目录的结构在前文已有描述。

2.不指定入口脚本

  1. 进入加密项目中,使用命令 pyarmor init
  2. 使用命令pyarmor build加密
  3. 执行命令pyarmor runtime -i 生成运行辅助包 pytransform_bootstrap,将辅助包复制添加到python环境中,比如(site-packages目录下)
  4. 每一个python文件都必须导入运行辅助包,可以采用在site.py中的main函数中导入pytransform_bootstrap包,pytransform_bootstrap的__init__.py文件中恰好就是:
from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x06\x0f...')

site.py 是 Python 启动时自动执行的模块之一。它负责添加一些特定的路径到 sys.path 中(比如site-packages 目录)。

因此,导入pytransform_bootstrap可以使得每个python文件执行时可以导入运行时辅助包。

但是必须放在main函数中,因为site.py 也同时在添加site-packages路径,防砸其他位置,可能找不到。


总结

本文简单介绍了一下使用pyarmor混淆加密的用法。


http://www.kler.cn/a/471682.html

相关文章:

  • 若依框架简介
  • ffmpeg将mp4等文件转mp3
  • Linux内核学习——数据结构
  • 怎么用vs编python文件
  • linux audio(1)-pulseaudio模块数据流
  • 基于selenium和python的UI自动化测试方案
  • 明源地产ERP VisitorWeb_XMLHTTP.aspx SQL注入漏洞复现
  • Scala 模式匹配
  • JavaScript网页设计案例:响应式动态购物车
  • Python自学 - property装饰器(方法变成属性)
  • MySQL时提示,服务正在启动或者停止中,请稍候片刻后再试一次
  • 企业级Java 实体对象类定义规范
  • 汽车信息安全 -- S32K1如何更新BOOT_MAC
  • 【Java项目】基于SpringBoot的【垃圾分类系统】
  • Java爬虫获取淘宝关键字API接口:技术与应用指南
  • Rust编程语言
  • 141.环形链表 142.环形链表II
  • Azure主机windows2008就地升级十步
  • torch.max和torch.softmax python max
  • hpm使用笔记————使用usb作为从机接收来自上位机的数据然后通过spi主机发送给spi从机