Skip to main content

python的源代码保护方案

· 3 min read

PYC编码

使用python自带的编译命令,编译成对应的二进制程序,还是可以被反编译,但是至少无法被直接查看。

pyc除了看不到源代码,其他使用上和py文件,没有太大差异。

在settools打包egg

# 打包
python ./setup/all.py bdist_egg --exclude-source-files

# 运行
egg_path='/home/shahid/suds_2.4.egg'
sys.path.append(egg_path)
import suds

suds.run()

普通情况下的编译

这种方式比较麻烦,因为pyc作为临时文件,是不推荐直接删除python文件。需要自己编写脚本完成下面部署:

  1. py_compile 强制编译生成pyc.
  2. 删除py文件。
python -m compileall .

find . -name "__pycache__" -exec rm -f {} \;
find . -name "*.py" -exec rm -rf {} \;

CPYTHON

使用cpython将python代码编译成C/C++,然后再编译成python扩展模块,windows上为pyd文件,Linux上为so文件.

打包成可执行文件

发现pyinstaller这个打包工具比较受人欢迎,经它打包后的exe文件可以在无python的环境下运行。

如果项目是只是服务中的依赖包例如egg就无法实现了。

代码混淆

命令: pyminifier

在线:http://pyob.oxyry.com/

代码混淆方案的缺陷在于,只能针对一个文件进行混淆,这样作为一个项目互相调用肯定有问题。(类名和方法名会变化)

需要针对需要混淆的文件,进行模块化设计。

虚拟机封装

在虚拟机安转好以后,修改登录密码,并且不告知客户。所有对虚拟机的操作通过开发服务进行调用。