使用圣天诺加密锁保护Python应用程序的方法:
1.Sentinel LDK Envelope 带 Sentinel LDK 数据文件保护(DFP)
此方法结合使用SentinelLDK加密锁Envelope外壳加密工具与版本2数据保护模式的数据文件加密工具(dfcrypt)来保护Python应用程序。这种方法的原理是将应用程序的Python代码视为受Envelope保护的Python解释程序访问的加密数据文件
2.Cython (https://cython.org/)后使用Sentinel LDK Envelope
此方法结合使用Cython与Sentinel LDK Envelope 来保护Python应用程序。这首先要将敏感的Python模块转换为原生模块(PYD/SO文件),然后使用Sentinel Envelope进行保护。
通常,上述第二种方法(“Cython”)可提供更高的安全级别,因为附加的编译步骤降低了代码的抽象级别,使Sentinel LDK Envelope可以将应用程序作为代码(而非数据)进行保护。这样可获得更复杂的保护措施。但是,第二种方法的设置稍微复杂一些,因为它需要Cython和有效的C编译器。
说明:这两种方法都不能保护应用程序的启动脚本,只能保护其Python模块。因此,建议将应用程序的实际入口点放在一个Python模块中并仅使用启动脚本调用该模块。
以下是详细介绍保护方法
第一种方法:
使用数据文件保护来保护Python应用程序
可以使用Sentinel LDK Envelope结合数据文件加密工具(dfcrypt)(版本2数据保护模式)保护Python应用程序。这种方法的原理是将应用程序的Python代码视为受Envelope保护的Python解释程序访问的加密数据文件。
保护Python应用程序包含以下步骤:
1.收集应用程序的Python字节码(PYC)模块。
2.使用Envelope外壳加密工具保护Python解释程序并包含数据文件保护模块,从而使解释程序可以执行加密的数据文件。
3.使用dfcrypt工具保护应用程序的Python字节码。
可以使用将受保护的解释程序与加密的代码封装在一起的方式分发受保护的应用程序(例如使用pyinstaller)。
说明:一定要保护编译的Python字节码(PYC文件),而不是明文Python源码(PY文件)。Python解释程序先将PY转换成PYC文件,然后再写到磁盘上以加快后续执行速度。如果提供的是受保护的PY文件而不是PYC文件,Python解释程序会生成明文PYC文件,然后将其写到磁盘,然后即可对其进行分析。
您可以在Windows或Linux下执行保护流程。本主题介绍了如何在Windows机器上执行这个流程。
代码示例
安装Sentinel LDK后,可在以下位置找到演示如何在Windows下保护Pyhton应用程序的示例:
%homepath%\Documents\Thales\Sentinel LDK version\Samples\Envelope\Python
此文件夹包含以下文件和文件夹:
sample_app
此文件夹中包含一个简单的Python命令行应用程序,包括一个开始脚本(main.py)和三个模块(moduleA.py,moduleB.py,moduleC.py)。示例应用程序使用在Python2和Python3下运行完全相同的编写方式。
data_file_protection
此文件夹包含以下文件:
•build_dfp_protected_python2_app.bat
此脚本使用试用开发商代码(DemoMA)、Sentinel LDK Envelope、dfcrypt和pyinstaller在Windows下为Python2保护和封装示例应用程序。
•envelope_python2.prjx
这是一个Envelope项目文件,指定了使用上面的脚本保护Python2解释程序(python27.dll)的设置。
•build_dfp_protected_python3_app.bat
此脚本使用试用开发商代码(DemoMA)、Sentinel LDK Envelope、dfcrypt 和pyinstaller在Windows下为Python3保护和封装示例应用程序。
•envelope_python3.prjx
这是一个Envelope项目文件,指定了使用上面的脚本保护Python3解释程序(python37.dll)的设置。
保护Python应用程序的流程
使用下面的步骤创建一个受保护的应用程序。
1.收集应用程序的字节码模块
使用"-d noarchive"开关为明文应用程序运行pyinstaller。例如:
pyinstaller -d noarchive main.py
此步骤收集应用程序的依赖关系并将它们编译成为Python字节码。“-d noarchive” 开关指示pyinstaller将编译的Python模块保留为独立的文件,这是后面的加密步骤的要求
此步骤的结果就是包含您的应用程序及其所有依赖关系的独立文件夹(dist/<application_name>)。
说明:较旧的pyinstaller版本不支持开关"-d noarchive"。如果有需要,请如下使用pip更新pyinstaller的版本:
pip install pyinstaller --upgrade
2.使用Envelope保护Python解释程序
使用SentinelLDK Envelope(数据文件保护版本2)保护Python解释程序共享库(DLL/SO)和数据文件保护支持。
在常规选项卡上,确保选择启用数据文件保护。确保已显示版本2。这可以将数据文件保护模块插入受保护的解释程序。这样受保护的Python解释程序可以执行加密的Python模块。
3.加密应用程序的Python字节码
使用dfcrypt工具和版本2数据保护模式加密应用程序的敏感字节码模块。例如:
dfcrypt --encrypt --encver:2 “–key:A secret” --vcf:DEMOMA.hvc --fid:0 dist/<application_name>/moduleA.pyc encrypted/moduleA.pyc
dfcrypt --encrypt --encver:2 “–key:A secret” --vcf:DEMOMA.hvc --fid:0 dist/<application_name>/moduleB.pyc encrypted/moduleB.pyc
虽然它不是强制性的,但建议您使用开关“–key:”为应用程序的所有模块指定公共加密密钥。这样的缓存逻辑可以大幅提高使用很多受保护模块的应用程序的启动速度。如果您不使用"–key:"开关,dfcrypt会为各个文件选择一个随机密钥。
加密字节码模块完成后,将原始文件更换为加密后的相应文件。例如:
copy encrypted/moduleA.pyc dist/<application_name>/
copy encrypted/moduleB.pyc dist/<application_name>/
有关更多信息,请参见 Sentinel LDK软件保护和授权指南中对于dfcrypt的描述。
分发应用程序
将受保护的输出文件复制到文件夹dist/<application_name>。
要部署受保护的应用程序,请复制文件夹dist/<application_name>到目标机器。
然后即可通过执行dist/<application_name>/<application_name>启动受保护的应用程序。
第二种方法待续……