Python源码保护[通俗易懂]

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

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

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

  由于Python开源的特性,在一些商业场景下,若不想将源码暴露,可通过混淆、编译为pycso(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • termux安装gcc

    termux安装gcc最近在手机上(termux)需要用到gcc以下方法若不想太慢的话,自行科学上网先安装golangpkginstallgolang安装gcc在这里需要添加一下源在该文件下添加$PREFIX/etc/apt/sources.list源vi$PREFIX/etc/apt/sources.list没有vi的使用vim,或者pkginstallvim添加源​debhttps:/…

    2022年5月9日
    62
  • js 判断字符串中是否包含某个字符include的坑「建议收藏」

    js 判断字符串中是否包含某个字符include的坑「建议收藏」方法一indexOf()(推荐)varstr=”123″;console.log(str.indexOf(“3″)!=-1);//trueindexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回-1。方法二test()varstr=”123”;varreg=RegExp(/3/);console.log(reg.test(str));//truetest()方法用于检索字

    2022年10月6日
    4
  • 各种光纤接口类型介绍图_光纤sc接口是什么形状

    各种光纤接口类型介绍图_光纤sc接口是什么形状各种光纤接口类型介绍ST、SC、FC光纤接头是早期不同企业开发形成的标准,使用效果一样,各有优缺点。ST、SC连接器接头常用于一般网络。ST头插入后旋转半周有一卡口固定,缺点是容易折断;SC连接头直接插拔,使用很方便,缺点是容易掉出来;FC连接头一般电信网络采用,有一螺帽拧到适配器上,优点是牢靠、防灰尘,缺点是安装时间稍长。MTRJ型光纤跳线由两个高精度塑

    2025年7月30日
    3
  • Django(18)聚合函数

    Django(18)聚合函数前言orm模型中的聚合函数跟MySQL中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍聚合函数所有的聚合函数都是放在django.db.models

    2022年7月28日
    4
  • nginx多域名配置

    nginx多域名配置

    2022年2月8日
    35
  • Python 中return用法及意义「建议收藏」

    Python 中return用法及意义「建议收藏」return意义其实说白了,函数就是个你招来的工人。你给他一些材料,告诉他怎么用这些材料拼装,然后他负责把拼装好的成品交给你。材料就是函数的参数,成品是函数的输出,而怎么拼装就是你写的函数体代码了。比如这段代码defworker(a,b,c):x=a+by=x*c这个工人worker在你的指导下,用abc三个材料,装配出了x和y两个成品。但是程…

    2025年7月7日
    2

发表回复

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

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