如何使用 pyarmor 加密 Python 脚本成为扩展模块

pyarmor 是一个高安全性的 Python 脚本加密工具,从 v6.6.0 开始,提供了将加密脚本直接转换成为扩展模块或者可执行文件的功能,从而更进一步的提高了安全性。

使用方法

确认已经安装 pyarmor

pip install pyarmor

点击这里下载 buildext.py,

查看脚本的命令行选项

python buildext.py -h

在 v6.6.0 之后,不需要下载 buildext,可以直接使用下面的等价命令

python -m pyarmor.helper.buildext -h

生成扩展模块

  • 首先加密脚本,必须使用 --no-cross-protection--restrict 0 选项,否则运行时候会出现约束错误

    pyarmor obfuscate --no-cross-protection --restrict 0 foo.py
    
  • 转换所有在 dist 目录下面的加密脚本成为扩展模块

    python buildext.py dist/
    ls dist/
    

选项 -i可以在转换成为扩展模块之后把相应的加密脚本直接删除,这样dist 目录下面就只有相应的扩展模块,例如

python buildext.py -i dist/
ls dist/

需要注意的是

  • 不支持转换 pytransform.py 或者 pytransform/__init__.py 成为扩展模块,但是这个模块是运行加密扩展模块必须的,如果也想把这个脚本转换成为扩展模块,请使用 Cython 或者 Nuitka 等工具单独转换这个模块
  • 不支持递归目录,也就是说只有 dist 下面的加密脚本被转换成为了扩展模块。如果需要递归操作,可以指定多个目录,例如
    python buildext.py dist/ dist.pkg/
    
    或者在命令行列出所有文件,例如
    # 在 Linux 平台
    python buildext.py $(find dist/ -name "*.py")
    # 在 Windows 平台
    FOR /R dist\ %I IN (*.py) DO python buildext.py %I 
    
  • 这种方式转换成为的扩展模块,在导入的时候是不会运行原来脚本中的语句块
    if __name__ == '__main__':
    

生成可执行文件

如果需要运行if __name__ == "__main__": 这个语句块,那么需要使用选项 -e 转换加密脚本成为可执行文件

python buildext.py -e dist/foo.py
dist/foo.exe

需要注意的是

  • 加密脚本也必须使用 --no-cross-protection--restrict 0 选项
  • 和 PyInstaller 打包的可执行文件不同,这里生成的可执行文件不能脱离当前 Python 环境,其本质相当于执行 python foo.py

和其他工具的比较

有两个常用工具 CythonNuitka 也可以将Python脚本转换成为扩展模块,和它们比较,pyarmor 的转换方式有如下不同

  • 扩展模块只是执行下列的 Python 语句
    from pytransform import pyarmor
    pyarmor(__name__, __file__, b'xxxxxx', 2)
    

真正的脚本执行还是由 pyarmor 来完成,所以有的脚本使用 Cython 或者 Nuitka 转换成为扩展模块之后运行不正常,但是使用 pyarmor 转换过去之后可以正常运行。

你可能感兴趣的:(python,python,加密)