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

文章目录

  • 前言
  • 使用 Cython 加密 Python 代码
    • 环境
    • Python 源代码
    • 编写 Cython 编译配置文件
  • 编译
    • 查看输出文件
    • 使用
  • 问题
    • `error: Microsoft Visual C++ 14.0 or greater is required`
    • `pyconfig.h(59): fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory`
    • `dynamic module does not define module export function`
  • 拓展
    • `.py .pyc .pyd .so .pyx` 的区别
      • `.py 文件`
      • `.pyc 文件`
      • `.pyd 文件`
      • `.so 文件`
      • `.pyx 文件`
  • 个人简介

前言

  • 在《如何避免别人反编译我们的 Python .exe 程序》一文中我们介绍了两种给我们 Python 源代码加密的两种方式,本文我们主要介绍如何使用 Cython 加密源代码,虽然 Cython 的作用主要是为了提高代码的运行效率,但是也对源代码有一定的加密效果。

使用 Cython 加密 Python 代码

环境

  • win11
  • Python 3.x

Python 源代码

# dependency.py
def some_function(x, y):return x * y# example.py
from dependency import some_functiondef add(x, y):return x + y + some_function(x, y)if __name__ == '__main__':print(add(3, 4))

编写 Cython 编译配置文件

# setup.py
from distutils.core import setup
from Cython.Build import cythonizesetup(# 程序名name='test',# 需要编译的脚本列表ext_modules=cythonize(["dependency.py","example.py",# ...],# Python 版本language_level=3),
)

编译

  • python setup.py build_ext --inplace 命令的作用是在当前目录中构建 C/C++ 扩展模块,并将编译后的模块放置在当前目录中,以便在开发过程中进行测试和调试。
# 执行成功日志版权所有(C) Microsoft Corporation。保留所有权利。
[1/2] Cythonizing dependency.py
[2/2] Cythonizing example.py
dependency.c正在创建库 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.lib 和对象 build\temp.win-amd64-cpython-312\Release\dependency.cp312-win_amd64.exp
正在生成代码
已完成代码的生成
example.c正在创建库 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.lib 和对象 build\temp.win-amd64-cpython-312\Release\example.cp312-win_amd64.exp
正在生成代码
已完成代码的生成

查看输出文件

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

使用

  • .so 文件和 .pyd 文件 使用和原 .py 文件使用方式一致,但 .pyd 文件名需要和原文件名保持一致。·
# run.pyimport exampleif __name__ == '__main__':print(example.add(3, 4))

问题

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

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

  • 问题很明显,我们需要安装 Microsoft Visual C++14.0或更高版本
  • 下载链接:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
  • 安装并选择对应的组件进行安装:

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

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

  • 由于电脑系统是 win11,所有选择 win11 SDK0

dynamic module does not define module export function

  • 在 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 文件)。

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgresql中JIT函数能否inline的依据function_inlinable

相关 《LLVM的ThinLTO编译优化技术在Postgresql中的应用》 在JIT inline函数的过程中,会通过函数的bc代码,经过一系列规则、成本的判断来决定函数能否Inline,本篇重点分析这段逻辑:function_inlinable。 总结速查: 入…

分布式链路追踪工具Sky walking详解

1,为什么要使用分布式链路追踪工具 随着分布式系统和微服务架构的出现,且伴随着用户量的增加,项目的体量变得十分庞大,一次用户请求会经过多个系统,不同服务之间调用关系十分复杂,一旦一个系统出现错误都可…

iphone忘记锁屏密码怎么解锁?这些解锁方法你必须知道!

在使用iPhone的过程中经常会遇到很多问题,比如忘记了iPhone的锁屏密码。面对这样的情况,许多用户可能会感到手足无措。别担心,本文将为您详细介绍iPhone忘记锁屏密码的解锁方法,让您轻松解决这一烦恼。 一、使用iTunes备份恢复 如…

以gitee为例的git入门使用指北

安装git 在linux中我们首先需要使用 sudo apt install git来下载git 在windows中可以下载msysGit 链接:https://git-scm.com/download/win gitee准备 申请账号 建立仓库 ​ 点击新建仓库 这里一般是私有库,点击创建,这时你就拥有一个线上…

python作业五

题目:注册登录 制作一个注册登录模块 注册:将用户填入的账户和密码保存到一个文件(users.bin) 登陆:将用户填入账户密码和users.bin中保存的账户密码进行比对,如果账户和密码完全相同 那 么登录成功,否则登录失败…

电脑屏幕监控软件有哪些?8款受欢迎的电脑屏幕监控软件

电脑屏幕监控软件有哪些?8款受欢迎的电脑屏幕监控软件 市场上有很多监控软件,因为太多,很多老板不知道怎么选,今天小编从它们各自的特点、优势、未来发展趋势几方面,介绍8款受欢迎的电脑屏幕监控软件。 第一是&#x…

探索网站支付系统的奥秘,从Vue3和Spring Boot开始(入门级项目实战+在线教程)附赠项目源码!

你是否曾经在购物时,对着电脑屏幕前的“支付成功”四个字感到好奇?这背后的秘密究竟是什么? 今天,让我们一起揭开支付系统的神秘面纱,探索其背后的技术实现。 在这个基于Vue3和Spring Boot的支付项目实战中&#xff…

MySQL学习笔记10——日志

日志 一、日志1、通用查询日志(1)开启通用查询日志(2)查看通用查询日志(3)删除通用查询日志 2、慢查询日志3、错误日志4、二进制日志(1)查看二进制日志(2)刷新…

Ansible-Playbook——部署LNMP架构

目录 环境准备 一、配置Nginx的Roles角色 1.创建Nginx所需的文件夹 2.编写Nginx配置文件 3.编写Nginx安装文件 4.编写Nginx控制器文件 5.编写Nginx任务文件 6.编写Nginx变量文件 二、配置Mysql的Roles角色 1.创建Mysql所需的文件夹 2.编写Mysql启动文件 3.编写Mysql…

源码部署与SaaS账号:企业软件选择的自建房与租赁公寓之辩

在数字化运营的时代,企业选择软件解决方案就如同在选择住所:源码部署类似于“自建房屋”,而SaaS账号则更像是“租赁公寓”。 自建房屋(源码部署) 当你选择自建房屋时,你需要投入大量的时间和资金来购买土地…

二叉树遍历总结

7.二叉树 二叉树理论基础 二叉树的种类 在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树。 满二叉树 完全二叉树 二叉搜索树 平衡二叉搜索树 C中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增…

实现左上角的固定视口但是网格以图片中心放大缩小

仅仅修改了showbk() 函数部分,增加bkv4 直接采样,然后粘贴到左上角,实现多余部分裁剪,形成视口内放大缩小 // 程序:2D RPG 地图编辑器与摄像机追随 // 作者:bilibili 民用级脑的研发…

C语言(指针)1

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

【操作系统】内存管理——地址空间连续内存分配与非连续内存分配

内存管理——地址空间&连续内存分配与非连续内存分配 一、地址空间1.1 计算机存储层次1.2 地址和地址空间1.3 虚拟存储的作用 二、内存分配2.1 静态内存分配2.2 动态内存分配 三、连续内存分配3.1 动态分区分配3.2 伙伴系统(Buddy System) 四、非连续…

深入浅出(五)JsonCpp库

JsonCpp库 1. JsonCpp 库1.1 JsonCpp库下载 2. JsonCpp库编译与部署3. C示例 1. JsonCpp 库 JsonCpp 是一个开源的 C 库,用于解析、生成和操作 JSON 数据。它提供了简单易用的 API,使得在 C 程序中处理 JSON 数据变得方便和高效。以下是 JsonCpp 库的一…

适合宝妈的项目,一单20,看似不起眼的小生意,却能闷声发财!

向大家推荐一个小项目,信息差较大,每单至少有20元的利润。目前参与的人还不多,是个不错的机会。操作方法也非常简单,只需利用京东家政券赚取差价。可能很多人是第一次了解到这个——京东竟然还有家政券。 周周近财:让…

Android11 InputReader分析

InputReader线程主要负责读取输入数据,并把数据交给InputDispatcher线程。本文以多指触摸屏为例,梳理一下InputReader的流程。 InputReader线程主要完成以下工作: 处理已有的输入设备处理新增或者移除的输入设备对输入设备产生的输入数据进行…

数字工厂管理系统如何实现生产过程透明化

随着科技的飞速发展,数字化转型已成为制造业不可逆转的趋势。数字工厂管理系统作为实现生产自动化、智能化的重要工具,其在提升生产效率、降低运营成本、优化资源配置等方面的作用日益凸显。其中,实现生产过程的透明化是数字工厂管理系统的重…

一文彻底学会Vue3路由:全面讲解路由流程、路由模式、传参等——全栈开发之路--前端篇(7)路由详解

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

数据中台:企业数字化转型的驱动力量_光点科技

在当今数字化快速发展的时代,企业正积极寻求转型升级的新路径。在这个过程中,数据中台以其独特的功能和价值,逐渐成为了企业数字化转型的关键驱动力。本文将深入探讨数据中台的角色、架构及其在企业中的应用,以期为企业的数字化转…