代码加密
常见几种代码保护方式
- .pyc文件
- 代码混淆
- 打包exe - py2exe
- .pyd Cpython 编译
.pyc 文件
Python 标准库中提供了一个名为 compileall 的库,可以轻松地进行编译。
pyc 转换 py文件
pyc 是python编译后的二进制文件,可以通过官方工具将其转译为代码形式
代码:
# 转移器文件位置
commands = r'xxx\python\Scripts\uncompyle6.exe'
# 需要转译的目录、或者文件
folder = r'D:\CPS\MyProject\github\ST3_DoxyDoxygen\doxy_libs'
for each in file_list:
(filename, extname) = os.path.splitext(each)
if extname !='.pyc': continue
pyc_file = os.path.join(folder,each)
py_file = os.path.join(folder,filename+'.py')
run_command([ commands, '-o', py_file, pyc_file ], shell=False)
代码混淆
打包exe
- 编写setup.py
from distutils.core import setup
import py2exe
setup(console=['hello.py'])
- 生成可执行文件
python setup.py py2exe
缺点
- 生成的可执行文件内的布局是明确、公开的,可以找到源码对应的 .pyc 文件,进而反编译出源码
- 只能运行在 Windows 系统上
优点
- 简单方便,快捷
Cypthon .pyd
- 编写setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(name='Hello World app',
ext_modules=cythonize('hello.pyx'))
- 编译
python setup.py build_ext --inplace
优点
- 生成的二进制 .so 或 .pyd 文件难以破解
- 同时带来了性能提升
缺点
- 兼容性稍差,对于不同版本的操作系统,可能需要重新编译
- 虽然支持大多数 Python 代码,但如果一旦发现部分代码不支持,完善成本较高