Python源码保护[通俗易懂]

Python源码保护[通俗易懂]1混淆改方法主要将函数、类名以及变量名等替换为其他符号,提高了阅读的难度,Python代码混淆网站。但该方法未改变程序的主体结构,实际效果并不是很好。具体如下图1所示:2pycpython是先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行。最简单的加密方法是将编译后的pyc二进制文件发布,详情可以参考blog。但与其他语言一样编译后的产生的pyc依然可以通过反编译得…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  由于Python开源的特性,在一些商业场景下,若不想将源码暴露,可通过混淆、编译为pyc或so(Windows下为pyd)文件等方法起到保护源码的效果。其中,将源码编译为so文件是常用且较好的一种保护方法。

1 混淆

  代码混淆是将函数、类名和变量名等替换为其他符号,提高了阅读的难度。Oxyry网站提供的在线代码混淆(或使用pyminifier),如下图所示:
在这里插入图片描述
  代码混淆简单且成本代价低,但由于未改变程序的主体结构,仅降低代码的可读性,实际对源码的保护并不是很好。

2 pyc

  pyc是Python脚本编译后形成的字节文件。生成后的pyc文件可以直接替换对应的py文件。但需注意Python编译版本与运行版本需要一致。pyc生成并使用流程如下:
  1)通过Python标准库中py_compile(或compileall)或被调用的脚本(如A.py被调用),都将在__pycache__文件夹中生成pyc文件,py_compile使用代码如下:

import py_compile  
py_compile.compile(file="xxx.py") # 需转换为pyc文件在——__pycache__中 

  2)将pyc文件直接替换对应py文件

  与其他语言相同,pyc也可以通过反编译获取源码。pyc反编译反编译通过uncompyle6,使用如下所示:

# 安装
pip install uncompyle6
# 使用
uncompyle6 xxx.pyc

在这里插入图片描述

3 so或pyd

  so(pyd是windows平台)文件是通过cython转换为c后,再进行编译形成的文件。生成so并使用流程如下:

  1)安装cython,Linux平台需安装gcc,Windows平台需安装对应版本的Visual Studio

pip install cython

  2)新建一个build.py文件,内容如下

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("xxx.py"))  # xxxe.py是需要转换pyd的py文件

  3)在终端下,输入如下命令:

python build.py build_ext

so文件在目录下的build->lib命名开头文件夹中,如下图so文件在build/lib.macosx-10.7-x86_64-3.6中:

在这里插入图片描述
  4)将so(或pyd)文件直接替换对应的py文件
  相对混淆和pyc,so(或pyd)对保护效果最好的一种方案。但在使用时,需注意Python版本和gcc版本,不一致可能会发生错误。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172346.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么修改WiFi频段_wifi5g与2.4g怎么切换

    怎么修改WiFi频段_wifi5g与2.4g怎么切换在网络应用中对带宽要求较高的在线视频、高清点播等业务,如果使用5GHz频段进行传输,无线连接稳定性和传输速速率将更有保障,在这里以TP-LINK双频无线路由器作为演示,教你如何设置使用5GHz频段无线路由器。下面以TL-WDR4310为例介绍双频无线路由器在5GHz频段下的设置步骤。步骤一:在浏览器的地址栏上输入“192.168.1.1”打开路由器管理界面,输入用户名和密码(默认均为“admin”…

    2022年10月20日
  • java多线程–同步锁、

    java多线程–同步锁、同步代码块:语法:synchronized(同步锁){     需要同步操作的代码}—————————————————同步锁:为了保证每个线程都能正常执行原子操作,Java引入了线程同步机制.同步监听对象/同步锁/同步监听器/互斥锁:对象的同步锁只是一个概念,可以想象为在对象上标记了一个锁….

    2022年6月13日
  • 十七岁的单车 影评

    十七岁的单车 影评

    2021年8月25日
  • Java实现简单的递归操作[通俗易懂]

    Java实现简单的递归操作[通俗易懂]在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做“递归”,这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的。虽然对于很多递归算法都可以由相应的循环迭代来代替,但是对于一些比较抽象复杂的算法不用递归很难理解与实现。递归分为直接递归和间接递归,就简单分享一下两个小的直接递归。对于递归的概念,其实你可以简单的理解为自己定义自己,记得小时候看过一部电视剧《狼毒花》,…

    2022年9月18日
  • java中scanner是什么意思_java中Scanner是什么?怎么用?

    java中scanner是什么意思_java中Scanner是什么?怎么用?在java中有一种类可以获取我们输入的信息,这也是java中的新特征,有小伙伴知道这是什么类吗?小编最近在学Scanner类,发现还需要结合正则表达式一起使用,这对我们以前知识的掌握来说,得有比较好的基础才能完成。下面我们就一起看看Scanner类如何在java中使用吧。1.概念一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。2.语法Scanners=newScanner(S…

    2022年7月21日
  • Java8 stream数组转List[通俗易懂]

    Java8 stream数组转List[通俗易懂]双重检查锁(Double-checkedLocking)可以降低直接使用synchronized同步共享资源带来的性能开销,使用DCL实现延迟加载的代码如下:1publicclassDoubleCheckedLocking{2 privatestaticInstanceinstance;3 publicstaticInstancegetInstance(){4 …

    2022年8月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号