Goldenmask 直译为金色的罩子,灵感来自“金钟罩”的“翻译”。因为 Goldenmask 是一个用来对 Python 源码进行加密保护的工具,有点像金钟罩这种防御性武功的意思,因此用了金钟罩这个名字。同时,还引入了一个选项叫做 layer,对应着武功的层数,实际上则代表了不同层级的 Python 源码保护方法。当前,Goldenmask 只有两层功力,一层用的是 Python 自带的 Compileall 这个库,一层用的是 Cython
目前,Goldenmask 支持对 Python 文件、Python Wheel 包、Python 源码包以及 Python 模块文件夹进行加密,你可以选择替换原始的文件,也可以将加密保护后的文件放到临时的编译文件夹 __goldenmask__
里去 。此外,每一次保护,还会生成一个叫做 .goldenmask
的文件,里面记录了编译 Python 文件使用的 Python 版本( sys.version
)和操作系统信息(platform.uname()
)。因为考虑到源代码一般会通过 git 或者 svn 进行源码管理,不适合直接替换,因此保护 Python 源码的默认方式是会生成 __goldenmask__
这个文件夹的。此外,默认的保护方法是 Compileall,Cython 因为自身的限制,以及其实际的用途,有时加密效果并不是很理想。
小试牛刀
$ pip install goldenmask
# 默认方法是使用 Compileall 编译为 pyc
$ goldenmask yourpythonfile.py
All done! ✨ ✨
$ tree -a .
.
├── __goldenmask__
│ ├── .goldenmask
│ └── yourpythonfile.pyc
└── yourpythonfile.py
1 directory, 3 files
# 用生成的 .so 文件替换原始的 py 文件
$ goldenmask -i -l 2 yourpythonfile.py
All done! ✨ ✨
$ tree -a .
.
├── .goldenmask
└── yourpythonfile.so
0 directories, 2 files
安装方法
可以直接使用 pip 进行安装:
$ pip install -U goldenmask
当然更推荐使用虚拟环境,可以使用 Python 自带的 vevn 模块或者第三方的 virtualenv:
$ python -m venv env
# On Windows:
$ .venvScriptsactivate
# On Linux:
$ source env/bin/activate
$ pip install goldenmask --upgrade
因为 Goldenmask 依赖了 Cython 这个项目,因此你还需要确保你的机子上安装了合适的 C 代码编译器。你可以查看 Cython 的 文档 获得详细的安装方法。总的来说,根据不同的操作系统有以下三种方法:
- 在 Linux 系统上,可以使用
sudo apt-get install build-essential
或者yum groupinstall "Development Tools"
完成 C 编译器及其依赖的安装。 - 在 Macosx 系统上,安装 XCode。
- 在 Windows操作系统上,安装 MinGW 或者 Microsoft’s Visual C。
使用说明
Goldenmask 的帮助文档有详细的说明,可以直接使用 help
选项查看。
$ goldenmask --help
Usage: goldenmask [OPTIONS] [FILES_OR_DIRS]...
Goldenmask is a tool to protect your python source code easily.
FILES_OR_DIRS can be python files, wheel packages,source packages or dirs
contain python files.
Options:
-l, --layer <int> Level of protection: 1 - compileall; 2 - cython.
-i, --inplace Whether compile python files in place.
--no_smart This will copy and compile everything you specified.
--help Show this message and exit.
对 wheel 包进行保护:
$ goldenmask goldenmask-0.2.1-py3-none-any.whl
All done! ✨ ✨
$ tree -a .
.
├── __goldenmask__
│ ├── .goldenmask
│ └── goldenmask-0.2.1-py3-none-any.whl
├── .goldenmask
└── goldenmask-0.2.1-py3-none-any.whl
1 directory, 4 files
对源码包进行加密:
$ goldenmask -l 2 --inplace goldenmask-0.1.2.tar.gz
running build_ext
building 'goldenmask.cli' extension
...
All done! ✨ ✨
$ tree -a .
.
├── .goldenmask
└── goldenmask-0.1.2.tar.gz
对包含 Python 代码的模块文件夹进行保护:
$ goldenmask pip-download/
All done! ✨ ✨