pyarmor加密python脚本


一、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混淆加密的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值