如何打包发布加密的 Python 源代码

这里介绍一种使用 PyInstallerPyArmor 来发布加密 Python 源代码的方式,能够达到以下目的

  • 把所有 Python 源代码打包成为可执行文件,客户不需要 Python 就可以运行
  • 所有 Python 的源代码都经过加密
  • 在 Python 源代码执行过程中,每一个函数执行完成之后,其代码块会重新被加密
  • 可以设置 Python 源代码的有效期,过时之后无法在运行
  • 可以绑定 Python 源代码到指定硬盘或者网卡

这里面是有到两个工具 PyInstaller 和 PyArmor,其中前者可以主要用于把源代码打包成为一个可执行文件,自动查找依赖的包,如果用到了图形库,例如 Tkinter, Qt, 使用这个工具可以很方便的进行打包。后者则可以加密源代码,并且把加密的代码绑定到硬盘和网卡,也可以设置有效期。

和其他打包工具一样,PyInstaller 对 Python 源代码只是简单编译成为 .pyc 文件,然后打到一个压缩包里面。虽然它提供了一个简单的加密方式[^1],但是很容易就可以使用调试器破解,真正的加密还依赖 PyArmor

PyArmor 对代码的加密分为两个层次,首先是对整个 .pyc 文件进行加密,其次是对每一个函数进行动态加密,即在函数开始调用的时候解密,执行完成之后在重新加密,这样从更高层次的确保了 Python 源代码的安全[^2]。

下面用一个具体的例子来说明如果打包发布一个脚本 hello.py

首先安装 PyInstaller 和 PyArmor

pip install pyinstaller
pip install pyarmor

然后使用 PyArmor 打包并加密脚本成为可执行文件,打包好的可执行文件放在 dist/hello 下面

pyarmor hello.py

运行打包好的文件

dist/hello/hello

生成一个限制使用时间并绑定到网卡的认证文件 licenses/code-01/license.lic

pyarmor licenses --expired 2019-01-01 --bind-mac 01:a2:b3:c4:d6:e6 code-01

使用新的授权文件替换默认授权文件,再次运行打包好的可执行文件

cp licenses/code-01/license.lic dist/hello
dist/hello/hello

更多功能,请访问 PyInstaller 主页PyArmor 主页


[^1] Hidden source code by PyInstaller
[^2] PyArmor 加密原理

猜你喜欢

转载自blog.csdn.net/weixin_43572000/article/details/83986683