打包保护你的 Python 程序

Table of Contents

1. 编译成可执行文件

可以使用工具将 Python 脚本转换为独立的可执行文件:

  • 工具:
  • PyInstaller: 支持多平台(Windows、macOS 和 Linux)。
pyinstaller --onefile your_script.py

上述命令会生成一个单独的可执行文件,位于 dist/ 目录下。

  • cx_Freeze: 也是一个常用的工具,支持类似功能。

    cxfreeze your_script.py --target-dir dist/
  • py2exe(Windows 专用): 将 Python 脚本编译成 Windows 下的可执行文件。

  • 优点:

    • 生成的可执行文件不需要 Python 环境即可运行。
    • 部分情况下可以混淆或隐藏源代码。
  • 缺点:

    • 用专业的反编译工具可能仍然还原部分代码逻辑。

2. 字节码保护

Python 源代码在运行时会被编译成字节码文件(.pyc),可以通过生成 .pyc 文件分发代码:

  • 使用 compileall 模块生成字节码文件:

    python -m compileall your_script.py

    然后分发生成的 .pyc 文件。

  • 配合工具如 cython 或 Pyarmor,可以加密或进一步保护字节码文件。

3. 使用 Cython 将 Python 转换为 C 代码

使用 Cython 将 Python 脚本转换为 C 代码,并编译为共享库或可执行文件:

  • 步骤:

    1. 安装 Cython:

      pip install cython
    2. 创建一个 setup.py 文件:

      
      from setuptools import setup
      from Cython.Build import cythonize

setup(
ext_modules=cythonize("your_script.py"),
)


 3. 编译:
```shell
python setup.py build_ext --inplace
  1. 生成 .so 或 .pyd 文件后,分发而不是源代码。

    • 优点:
      • 性能可能会提升。
      • 生成的二进制文件难以逆向还原源代码。

4. 加密与运行时解密

使用加密工具将代码加密,然后运行时动态解密:

  • 工具:
  • Pyarmor: 对 Python 脚本进行加密并限制运行环境(例如,绑定到指定设备或时间)。
pyarmor pack -x " --onefile" your_script.py
  • 自己实现一个加密-解密逻辑:但运行时解密的部分可能被逆向工程。

5. Docker 镜像封装

将 Python 脚本封装到 Docker 镜像中,用户只运行容器,而无法直接访问代码:

  • 创建 Dockerfile,将脚本拷贝到镜像内。
  • 分发 Docker 镜像,而非源代码。

6. 代码混淆

使用代码混淆工具将代码结构和变量名混淆:

  • 工具:
    • pyminifier: 代码压缩和混淆工具。
pyminifier --obfuscate your_script.py
  • 效果:
    • 增加阅读难度,但对高级攻击者可能作用有限。

总结

  • 如果你需要简单保护,PyInstaller 或 Cython 是不错的选择。
  • 如果需要更高的安全性,可以结合 Cython 和 Pyarmor。
  • 部署时,可以使用 Docker 来封装环境,从而避免直接暴露代码。

Comments |0|

Legend *) Required fields are marked
**) You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Category: 似水流年