关于加密 python源代码

由于 Python 的动态特性和开源特点,导致 Python 代码很难做到很好的加密。应该通过法律手段而不是加密源码达到商业保护的目的;
首先理解一些概念
.py 文件
以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行。当然,也可用文本编辑器进行修改。
.pyc 文件
以 .pyc 作扩展名的文件是 python 编译文件。.pyc 文件是不能用文本编辑器进行编辑的,其优点是 .pyc 文件的执行速度要远快于 .py 文件。至于为什么要有 .pyc 文件,这个需求太明显了,因为 .py 文件是可直接看到源码的,若是软件开发商的话,不可能把源码泄漏出去?所以,就需编译成 .pyc 后再发布。
.pyw 文件
.pyc 文件执行时,桌面会出现类似 CMD 命令的黑色 shell 窗口,十分难看,于是 .pyw 文件就应运而生了。.pyw 文件与 .pyc 文件的执行,本质上并没什么区别,只是 .pyw 文件执行的时候不会出现类似 CMD 命令的黑色 shell 窗口。
.pyw 文件格式主要是设计用来运行纯 GUI 图形用户界面程序的。 纯 GUI 图形用户界面程序的用户不需要看到类似 CMD 命令的黑色 shell 控制台窗口。.pyw 文件运行时,所有 stdout、stderr 输出无效,所有原 stdin 的读取只会得到 EOF。
值得一提的是,开发纯 GUI 图形用户界面程序时,可暂时把 .pyw 改成 .py,以便运行时调出控制台窗口,看到所有错误信息,方便修改、调试。
.pyo 文件
.pyo 文件是优化编译后的程序。 “python -O 源文件” 即可将源程序编译为 .pyo 文件。同样,.pyo 文件也是不能用文本编辑器进行编辑的。
pyd 文件
.pyd 文件并不是用 python 编写成的,.pyd 文件一般是其他语言编写的 python 扩展模块。.pyd 文件是用 D 语言按照一定格式编写,并处理成二进制的文件。

以下方案仅仅作为参考
一.第一种也是值得成功实践的一种方式, 使用cython将源代码转化为c 的二进制形式
Cython的官方文档:
https://cython.readthedocs.io/en/latest/index.html

简单的说,Cython的两个主要作用是:
将python代码编译成二进制的扩展模块,以获得加速;同时可以在python中使用类型声明,进一步提升性能;这就意味着可以使用python代替c编写python扩展在python代码里调用外部的c库

1.The simplest way of installing Cython is by using pip:
Pip install -i https://pypi.douban.com/simple cython
下面依据CDSS算法实现cython的转化
其中算法内的路径 请写绝对路径!
算法目录为:

当前共有六个文件需要转化成c的二进制文件
以下为简单操作流程, 具体请看文档
1.书写setup.py文件

2.python setup.py build_ext --inplace
3.在当前目录会生成以下文件

会生成build 文件临时文件 .c结尾的文件 c代码 .pyd结尾的文件

4.此时可以通过 python解释器 import 这些pyd文件

5.如果想要在以此python环境为基础的其他py文件内引入这些文件。需要将这些文件引入到PYTHONPATH所在的路径内。
将这些pyd文件看做是python的模块即可。 我的python模块路径在
D:\pydemo\CdssProject\cdssvenv\Lib\site-packages
优缺点
生成的二进制 .so 或 .pyd 文件难以破解
同时带来了性能提升
兼容性稍差,对于不同版本的操作系统,可能需要重新编译
虽然支持大多数 Python 代码,但如果一旦发现部分代码不支持,完善成本较高

第二种方式为 代码混淆
如果代码被混淆到一定程度,连作者看着都费劲的话,是不是也能达到保护源码的目的呢?
既然我们的目的是混淆,就是通过一系列的转换,让代码逐渐不让人那么容易明白,那就可以这样下手: - 移除注释和文档。没有这些说明,在一些关键逻辑上就没那么容易明白了。 - 改变缩进。完美的缩进看着才舒服,如果缩进忽长忽短,看着也一定闹心。 - 在tokens中间加入一定空格。这就和改变缩进的效果差不多。 - 重命名函数、类、变量。命名直接影响了可读性,乱七八糟的名字可是阅读理解的一大障碍。 - 在空白行插入无效代码。这就是障眼法,用无关代码来打乱阅读节奏。

使用 oxyry 进行混淆
http://pyob.oxyry.com/ 是一个在线混淆 Python 代码的网站,使用它可以方便地进行混淆。

优缺点
简单方便,提高了一点源码破解门槛
兼容性好,只要源码逻辑能做到兼容,混淆代码亦能
只能对单个文件混淆,无法做到多个互相有联系的源码文件的联动混淆
代码结构未发生变化,也能获取字节码,破解难度不大

第三种 使用 py2exe
py2exe 是一款将 Python 脚本转换为 Windows 平台上的可执行文件的工具。其原理是将源码编译为 .pyc 文件,加之必要的依赖文件,一起打包成一个可执行文件。
如果最终发行由 py2exe 打包出的二进制文件,那岂不是达到了保护源码的目的?
使用 py2exe 进行打包的步骤较为简便。
1)编写入口文件。本示例中取名为 hello.py:
print ‘Hello World’
2)编写 setup.py:
from distutils.core import setupimport py2exe
setup(console=[‘hello.py’])
3)生成可执行文件
python setup.py py2exe
生成的可执行文件位于 hello.exe
优缺点
能够直接打包成 exe,方便分发和执行
破解门槛比 .pyc 更高一些
兼容性差,只能运行在 Windows 系统上
生成的可执行文件内的布局是明确、公开的,可以找到源码对应的 .pyc 文件,进而反编译出源码

第四种 使用pyc
不推荐
.pyc文件是由.py文件经过编译后生成的字节码文件,其加载速度相对于之前的.py文件有所提高

Or

生成后的文件会在对应目录下的__pycache__下面 移出到相应的py文件路径从而实现代码的代替。
优缺点:
简单方便,提高了一点源码破解门槛
平台兼容性好,.py 能在哪里运行,.pyc 就能在哪里运行
解释器兼容性差,.pyc 只能在特定版本的解释器上运行
有现成的反编译工具,破解成本低
python-uncompyle6 就是这样一款反编译工具

第五种 使用PyArmor
PyArmor 是一个用于加密和保护 Python 脚本的工具。它能够在运行时刻保护 Python脚本的二进制代码不被泄露
pip install pyarmor

pyarmor obfuscate main.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值