Skip to main content

代码加密

常见几种代码保护方式

  • .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 代码,但如果一旦发现部分代码不支持,完善成本较高