当前位置:网站首页 > 技术博客 > 正文

pycharm解释器下载



如何保护 python 的源代码?
举个栗子:张三将自己的编写的一个python文件发给了李四,张三希望李四能够正常使用这个文件(可以直接通过标准python解释器执行,或者可以被其他python文件调用),但张三不希望李四看到这个python文件的源代码

在阅读本文讨论的源代码加密之前,有以下内容需要注意:

  • Python是FLOSS(自由/开放源码软件)之一,因此加密python的源代码不符合FLOSS的理念
  • 不存在任何技术手段可以完全阻止用户阅读你的代码,但可以通过技术手段使得用户获得可阅读代码的成本更高
  • 本文所讨论的代码加密仅仅是一个简单的保护机制,但如果遇到顶级黑客,或许他们甚至会访问内存来查看源码
  • 使用法律、商业手段会比技术手段更加有效,例如软件使用许可证SaaS

为了理解python代码加密的基本原理,首先来了解下python的文件格式。

python源代码

这个大家都知道,不做过多阐述。这里着重介绍下Python代码的执行。

Python 代码的执行过程和 Java 类似:

  1. 将文件编译得到 Python 的字节码
  2. Python 虚拟机(Python Virtual Machine) 执行编译好的字节码

Python 虚拟机和 Java 的 JVM 类似,但 Python虚拟机的抽象化程度更高(但不是性能更强)

编译得到的字节码文件

  • 在首次导入一个python库的时候,为了让以后再次导入更方便也更快,python会构建一个包含该库的字节码文件

    你可以在你的库文件的文件夹下看到每个文件对应的文件

编译优化后得到的字节码文件

  • Python 3.5之前将文件通过优化器()创建的文件,可以略微提升加载速度
  • Python 3.5 之后已经取消了文件的概念,优化后的文件也会以文件存储
  • 从或文件中读取程序比从文件中读取得更快,但只是优化了加载速度,不会优化运行速度

可被Python调用的Windows DLL文件

  • 基本的Windows DLL文件,是Python的动态链接库
  • 并非从python代码生成,而是其他语言写成的可以被Python调用的Windows DLL文件,例如C++
  • 关于Windows DLL文件的介绍可以参看 Microsoft-什么是DLL?
 
  

直接运行结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ow9vojcX-1598969435142)(C:UsersMagfinAppDataRoamingTypora	ypora-user-imagesimage-20200722154551869.png)]

最基础的加密方法是利用 Python 自带的编译器将源代码文件 编译得到的二进制的字节码文件。
二进制的字节码文件对于初学者而言有一定的代码隐藏作用,但也只能简单隐藏。
在命令行中输入如下代码可以得到文件:

 
  

在目录下可以看到字节码文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9xAB0BE-1598969435148)(C:UsersMagfinAppDataRoamingTypora	ypora-user-imagesimage-20200722160307492.png)]

字节码文件可以在别的Python文件中导入使用,也可以直接执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3R8dC8u-1598969435155)(C:UsersMagfinAppDataRoamingTypora	ypora-user-imagesimage-20200722160926582.png)]

如果要对多个文件或整个项目进行编译,可以使用Python标准库中的库。

但是字节码文件极易被反编译得到源代码。

推荐一个反编译库,可以直接使用 Pip 安装:

 
  

在命令行中运行反编译命令:

 
  

反编译得到的文件如下:

 
  

可以看到和原始代码基本没有区别,所以的加密方式基本相当于裸奔。

对于代码加密,我们可以换个思路:我们可以暴露代码,但是只要你看不懂我的代码,也就无法使用我的代码了。

代码混淆可以使用库,

安装:

 
  

使用:

 
  

对于单个文件,会直接输出混淆后的代码:

 
  

这样混淆的代码可读性变得极差,然而即便如此,还是不难看出代码内部中的逻辑,通过变量名替换等方法还是可以看出其大致的逻辑。

 
  

结果:

 
  

这样得到的代码完全看不出原来的逻辑,但是Base64非常容易被反编译,因此加密效果还是有限的。

可以考虑将上诉两者混淆方法结合起来,这样可以进一步增大代码的混淆程度。

是一个编程语言,它通过类似Python的语法来编写C扩展并可以被Python调用。能够将Python+C混合编码的.pyx脚本转换为C代码,主要用于优化Python脚本性能或Python调用C函数库。基于它的原理,我们可以得到一种代码加密的思路:将 / 编译为 文件,再将 文件编译为 (Unix) 或 (Windows),这样得到的文件更难反编译。

注意:Windows环境下使用该库可能需要配置Microsoft Visual C++相关库

推荐一个库,该库能够一键完成上诉流程。

安装:

 
  

使用:

 
  

在文件夹下得到文件

可以在Python文件中导入,并使用其中的方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxKDNCgj-1598969435161)(C:UsersMagfinAppDataRoamingTypora	ypora-user-imagesimage-20200722170908630.png)]

关于这种加密方法的安全性,笔者目前尚未发现能将/文件直接反编译为的方法,因此较为可靠。

经过多番搜索,笔者找到了一个比较完善的Python脚本加密方案:

能够加密 Python 脚本,同时还具备以下功能:

  • 设置加密脚本的有效期限
  • 绑定加密脚本到硬盘、网卡等硬件设备

的加密原理比较复杂,在此不做阐述,感兴趣的可以直接查看他的官方文档。的开发者为中国人,因此文档也是中文,查看起来还是比较方便的。

特别注意

是一个共享软件,试用版免费但存在功能限制(主要是加密代码不能超过 32 MB),完整版的授权价格为 286.00 人民币。

详细的软件许可说明可以参看Pyarmor软件许可

接下来展示的使用。

Pyarmor 的基础使用

安装:

 
  

基础使用 加密代码:

 
  

在输出目录文件夹下可以看到加密后的脚本,代码内容如下:

 
  

除了加密脚本之外,额外的那个目录 叫做 运行辅助包 ,它是运行加密脚本不可缺少的。

脚本可以直接运行:

 
  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVSECAb4-1598969435165)(C:UsersMagfinAppDataRoamingTypora	ypora-user-imagesimage-20200723174239163.png)]

也可以导入到别的脚本中:

在这里插入图片描述

如果需要分享代码的话,需要将目录下的全部文件都发送过去,对方无需安装库。

Pyarmor 的进阶使用

加密脚本的同时会在输出目录下面生成一个默认许可文件 ,它 允许加密脚本运行在任何设备上并且永不过期。

可以根据需求生成指定有效日期、主机MAC地址、硬盘编号甚至是Docker容器ID的许可文件。

生成有效日期到 2020-07-22 的许可文件:、

 
  

执行这条命令 会生成一个带有效期的认证文件:

  • 创建 ,保存在
  • 创建 ,保存在

然后将许可文件文件复制到目录下,替换原来的。

这样,加密脚本在2020年7月22日之后就无法在运行了,比如现在就无法执行了。

 
  

执行这条命令 会生成一个带有效期的认证文件:

  • 创建 ,保存在
  • 创建 ,保存在

然后将许可文件文件复制到目录下,替换原来的。

这样,加密脚本在2020年7月22日之后就无法在运行了,比如现在就无法执行了。

未完待续…


如有帮助,欢迎点赞/转载~
(听说给文章点赞的人代码bug特别少👀)
联系邮箱:
个人公众号:禅与电脑维修艺术
欢迎关注公众号,也欢迎通过邮箱交流。



版权声明


相关文章:

  • 内存trfc对照表2025-08-20 13:30:05
  • 文件上传解决方案2025-08-20 13:30:05
  • java高并发编程详解多线程与架构设计2025-08-20 13:30:05
  • f什么什么st2025-08-20 13:30:05
  • vuex-i18n2025-08-20 13:30:05
  • 图像滤波的主要目的和方法2025-08-20 13:30:05
  • tiny xml2025-08-20 13:30:05
  • java中匿名内部类怎么用2025-08-20 13:30:05
  • seo案例分析100例2025-08-20 13:30:05
  • 安卓seekbar样式2025-08-20 13:30:05