脚本加密

通过本章节,您可以了解如何加密在 FIRERPA 内置 Python 环境中运行的模块或脚本。本章节不涉及在 PC 端对脚本进行加密,而是介绍对 ~/modules/task~/modules/extension 等目录中的模块,以及使用内置 Python 命令执行的脚本进行加密。我们提供了相关工具帮助您快速完成加密操作。

脚本加密采用 Cython 将 Python 代码转换为 C 语言,再编译成 .so 文件的方法,对性能影响很小。但我们建议您只加密核心逻辑,而非所有脚本文件;同时,请勿加密第三方库的文件,因为这些操作是徒劳的。请始终遵循“只加密自己的逻辑”这一原则。

构建工具镜像

本工具重度依赖 Docker,因此在继续之前请确保已安装 Docker。现在请克隆仓库 https://github.com/firerpa/compiler,并按照文档或以下命令构建镜像:

docker build -t compiler .

加密脚本代码

使用以下命令将源代码映射到容器内并编译。支持的架构(arch)包括 armarm64x86x86_64,分别对应 FIRERPA 服务端的不同架构。不同架构编译出的文件互不兼容。

docker run -it --rm -v /source/dir:/data compiler:latest compile.sh --arch arm64 /data/my_important_script.py

正常情况下,运行命令后,您将在脚本所在的目录获得一个名为 my_important_script.cpython-39.so 的文件。请勿重命名此文件;如需使用其他名称,请直接修改原始脚本的文件名。在发布脚本时,您可以删除相应的 .py 源文件,并将 .so 文件放入相应目录即可。

注意

如果您的代码不是 FIRERPA 模块(例如 extension 或 task),且仅由一个 Python 文件构成,Python 解释器无法直接运行 .so 文件。此时您需要编写一个入口 .py 脚本,用来导入并启动加密后的 .so 文件。如果代码本身是一个模块,则直接将 .so 文件放入对应目录,然后重启服务即可。