python 自定义模块加密_Python代码混淆加密相关

## 代码加密

### (一)py 脚本编译成 pyc 二进制文件

编译命令:

```bash

python -m py_compile file.py

```

pyc 文件是一个二进制文件,但是可以被很轻松的被逆向,在线反编译工具:`https://tool.lu/pyc/`。当然也有针对这个问题的解决方案,解决方案是可以通过修改 python 源代码中的 opcode,然后重新编译 py 代码,可以一定程度上防止被逆向,因为逆向者需要知道被修改的 opcode 才能还原出来。如果使用私有的 Bytecode 指令集,那么通常的 Python 反汇编器和反编译器无法工作在由你私有 Python 编译器产生的 pyc 文件上,也相当于保护了你的 Python 代码。但是这么做的代价是你的 Python 应用只能在你的私有 Python 解释器上运行。(实际在发布一款产品时,并不适用)

### (二)py 脚本打包成 exe 文件

exe 文件针对 windows 平台使用,一般是使用打包程序(py2exe、PyInstaller 等)打包成 exe,这些工具用于将一个 Python 项目打包成单个可执行的文件,方便(在没有 Python 环境的机器上)使用。但通过压缩包可以方便地得到所有 pyc 文件或源文件,与 C/C++ 编译生成的可执行文件有本质上的区别,基本上是零保护,所以需要将 exe 进行加壳操作。

### (三)py 脚本编译成 c 文件(cython)

用 cython 将核心代码 py 模块文件转化成。c 文件,再用 gcc 编译成 so(unix)文件,或者将其编译成 pyd(windows)文件。

编译过程:

1. 服务器安装依赖

```bash

pip install python

yum install python-devel gcc

```

2. 编写 setup.py 文件,内容如下:

```bash

from distutils.core import setup

from Cython.Build import cythonize

setup(

ext_modules = cythonize("test.py",language_level=2)

)

# 批量编译

setup(

ext_modules = cythonize(["test.py","test2.py".......],language_level=2)

)

```

3. 运行以下命令

```bash

python setup.py build_ext —inplace

```

会生成一个 test.so,删除其余文件,直接引用 test.so 即可(跟引用 py 文件一样)

## 代码混淆

### 在线网站

https://pyob.oxyry.com/

### 开源库

https://pypi.org/project/pyminifier/

https://github.com/astrand/pyobfuscate

## 参考:

https://zhuanlan.zhihu.com/p/71892833

使用 python 语言如何保密源代码以防止逆向工程? - z weijar 的回答 - 知乎

https://www.zhihu.com/question/20069661/answer/33563533

你可能感兴趣的:(python,自定义模块加密)