翼度科技»论坛 编程开发 python 查看内容

使用Cython加密Python代码防止反编译

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
前言


  • 本文我们主要介绍如何使用
    1. Cython
    复制代码
    加密源代码,虽然
    1. Cython
    复制代码
    的作用主要是为了提高代码的运行效率,但是也对源代码有一定的加密效果。

使用 Cython 加密 Python 代码


环境


  • win11
  • Python 3.x

Python 源代码
  1. # dependency.py
  2. def some_function(x, y):
  3.     return x * y


  4. # example.py
  5. from dependency import some_function


  6. def add(x, y):
  7.     return x + y + some_function(x, y)


  8. if __name__ == '__main__':
  9.     print(add(3, 4))
复制代码
编写 Cython 编译配置文件
  1. # setup.py
  2. from distutils.core import setup
  3. from Cython.Build import cythonize

  4. setup(
  5.     # 程序名
  6.     name='test',
  7.     # 需要编译的脚本列表
  8.     ext_modules=cythonize(
  9.         [
  10.             "dependency.py",
  11.             "example.py",
  12.             # ...
  13.         ],
  14.         # Python 版本
  15.         language_level=3
  16.     ),
  17. )
复制代码
编译


    1. python setup.py build_ext --inplace
    复制代码
    命令的作用是在当前目录中构建 C/C++ 扩展模块,并将编译后的模块放置在当前目录中,以便在开发过程中进行测试和调试。
  1. # 执行成功日志

  2. 版权所有(C) Microsoft Corporation。保留所有权利。
  3. [1/2] Cythonizing dependency.py
  4. [2/2] Cythonizing example.py
  5. dependency.c
  6.   正在创建库 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.lib 和对象 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.exp
  7. 正在生成代码
  8. 已完成代码的生成
  9. example.c
  10.   正在创建库 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.lib 和对象 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.exp
  11. 正在生成代码
  12. 已完成代码的生成
复制代码
查看输出文件


  • 可以看到编译完成后,我们在当前目录生成了
    1. .c
    复制代码
    源文件和
    1. .pyd
    复制代码
    的二进制
    1. windows 动态链接库文件
    复制代码
    ,在
    1. linux
    复制代码
    环境下生成的是
    1. .so
    复制代码
    为后缀的共享对象文件。


使用


    1. .so 文件和 .pyd 文件
    复制代码
    使用和原
    1. .py
    复制代码
    文件使用方式一致,但
    1. .pyd
    复制代码
    文件名需要和原文件名保持一致。
  1. # run.py

  2. import example

  3. if __name__ == '__main__':
  4.     print(example.add(3, 4))
复制代码
问题


  • 下面是实践过程中遇到的一些问题,可以参考:

error: Microsoft Visual C++ 14.0 or greater is required



pyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory


  • 这是因为我们还需要另外两个组件,继续使用
    1. visualstudio
    复制代码
    工具进行安装:


  • 由于电脑系统是
    1. win11
    复制代码
    ,所有选择
    1. win11 SDK0
    复制代码


dynamic module does not define module export function


    1. 在 run.py 中使用 .pyd 时,需要和原文件名称保持一致,否则会出现如上错误,比如上面的示例中原文件为 example.py 则生成的链接文件应该为 example.pyd
    复制代码

拓展


.py .pyc .pyd .so .pyx 的区别


.py 文件


  • 标准的 Python 源代码文件,包含 Python 代码。你可以使用文本编辑器(如Notepad++、Sublime Text、Atom等)来编辑这些文件。

.pyc 文件


  • Python 编译后的字节码文件。当你运行一个 .py 文件时,Python 解释器会将其编译成字节码,然后将字节码保存到 .pyc 文件中,以便下次运行时可以更快地加载。这些文件是平台无关的,因此可以在不同的操作系统上共享。

.pyd 文件


  • Windows 平台上的 Python DLL 文件。它们包含编译后的 Python 模块,通常是用C、C++或其他语言编写的扩展模块。这些文件允许 Python 与底层操作系统或硬件进行交互,例如,访问操作系统的API或使用硬件设备。

.so 文件


  • 类Unix系统(如Linux)上的共享对象文件,类似于 Windows 上的 DLL 文件。它们通常是使用 C 或 C++ 编写的 Python 模块的编译版本。这些文件通常用于扩展 Python 的功能,以便与底层系统进行交互或提高性能。

.pyx 文件


  • Cython 代码文件。Cython 是一种使 Python 代码能够与 C 语言进行混合编程的工具。.pyx 文件包含了同时具有 Python 和 C 语法的代码,可以通过 Cython 编译器转换为 C 代码,然后编译成 Python 可执行模块(.pyd 或 .so 文件)。
以上就是使用Cython加密Python代码防止反编译的详细内容,更多关于Cython加密Python代码的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/python/3208401os.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具