【Windows下Python源码加密干货教程】Python源码不愿意被人发现?想要商用?不用掏腰包,自己双重加密保护你的关键代码!

想要保护Python源码?Windows系统?教程看不会?这里是干货!很好理解!

情景:
V写了一个小程序,需要自己授权别人才能够使用,他害怕自己的程序对于授权加密的那一块被人破译从而绕过授权。所以,他计上心来,打开项目文件夹,这就开始了下一轮的工作。

他的小程序结构:
1.主程序部分(入口型)
Main.py

#Vent D'hiver IT Lab
#在CSDN关注我 ID:qq_46704763
from Plugin import *
main()

这里,其实就是一个对于外界函数的调用,实际就是个程序入口。那么,为什么要这么做呢?稍后揭晓。

2.函数部分(插件型)
Plugin.py

#Vent D'hiver IT Lab
#在CSDN关注我 ID:qq_46704763
import time
import sys
import wmi #导入一个可以查看电脑序列号的模块,用于认证加密
import base64 #导入加密模块

c = wmi.WMI()

def main():
    print("Hello World")
    try:
        with open(".\\Authorized","r") as f: #尝试打开授权文件
            data = f.read()
            for physical_disk in c.Win32_DiskDrive():
                Key = str(base64.b64encode(physical_disk.SerialNumber.encode())) 
                if data == key: #如果授权文件里的内容与密钥相同               
                    print("Authorized!")
                    #认证成功,那么打印授权成功的字样。鉴于是示范,这里就不打太多代码了,主要理解里面的思想。这个后面各位可以根据自己的喜好加上其他功能
                    a = input("Press Enter to exit")
                else:
                     Error #故意触发异常,使得try语句捕捉异常跳转到except
    except:
        print("Purchase first!") #提示认证失败
        time.sleep(3)
        sys.exit() #退出程序

大家可以看到,这个Plugin.py中有一个main()函数,通过Main.py可以调用(需要两个文件放在同一个目录下),那么接下来,好戏登场~

1.第一轮加密,把代码改得连他妈妈都不认识
找了很多代码混淆的方式,发现很多在Windows上并不可行,那么,这里有一个可行的混淆方案: http://pyob.oxyry.com/
这是一个在线代码混淆网站,我们看看它对于刚刚那个Plugin.py的混淆结果:

import time #line:3
import sys #line:4
import wmi #line:5
import base64 #line:6
c =wmi .WMI ()#line:8
def main ():#line:10
    print ("Hello World")#line:11
    try :#line:12
        with open (".\\Authorized","r")as OOO0OO0O00O00O0OO :#line:13
            OOO0OOO0O0OOOO0O0 =OOO0OO0O00O00O0OO .read ()#line:14
            for O000OOOOOOOO00000 in c .Win32_DiskDrive ():#line:15
                OO0O0OO0000OOO00O =str (base64 .b64encode (O000OOOOOOOO00000 .SerialNumber .encode ()))#line:16
                if OOO0OOO0O0OOOO0O0 ==key :#line:17
                    print ("Authorized!")#line:18
                    O0000000OOOO0OO00 =input ("Press Enter to exit")#line:20
                else :#line:21
                     Error #line:22
    except :#line:23
        print ("Purchase first!")#line:24
        time .sleep (3 )#line:25
        sys .exit ()

有经验的朋友也会发现,这个结构没有变,混淆效果不算很好,不过,既然不想掏腰包,也只能这样了。各位也可以在这个的基础上加上一些混淆的无用函数,加上一些无用注释,自己手动再进行一轮的混淆加密。

2.第二轮强势加密,通过Cython实现封装

pip install Cython

先安装这个模块,然后,再在Main.py和Plugin.py所在的目录下新建一个Python脚本,名为“setup.py"

setup.py的代码

from distutils.core import setup
from Cython.Build import cythonize
setup(
    name = 'Plugin',
    ext_modules = cythonize("Plugin.py"),
)

这个我有分享文件,https://download.csdn.net/download/qq_46704763/12325557
在这里可以下载哦~

打开cmd,cd到这个目录,输入一下代码

python setup.py build_ext --inplace

Enter键开始编译,结束后会得到:
build文件夹、__pycache__缓存文件夹、以.c为后缀的一个文件,这三个可以直接删除,不会影响。还有一个文件就是以.pyd为结尾的文件,这个就是封装后的Plugin,删除原来的Plugin.py,发现主程序仍可以正常调用。但是.pyd增大了反编译的难度,它通过改写成C语言再重新封装(具体原理我也没有细究),形成类似于.dll的文件。

3.你以为上面步骤就结束了吗?还有打包成程序嘞~
V兴高采烈地打开cmd,cd到项目目录,输入

pyinstaller -F Main.py

(没有pyinstaller的先pip install pyinstaller
(关于pyinstaller还有其他可以设置的参数,这里不做赘述)
在dist文件夹中生成了一个.exe文件,把它放在与.pyd文件相同的目录下,删除空的dist文件夹,OK,大功告成!其实build和缓存文件夹和.spec文件都可以删除,没有影响。那么,现在这个程序要破译的成本就比较高啦~

4.什么?你觉得还不够?
这边还有其他选项:
pyminifier是一个对Python文件进行压缩、混淆的工具,项目地址 https://github.com/liftoff/pyminifier
使用方法:

pip install pyminifier
pyminifier ./sparse_classifier.py > new.py

这个只是删注释和重排,要混淆需要加上参数

pyminifier -O ./sparse_classifier.py > new.py

这个工具小编自己并没有亲测过,也不确定在Windows上是否可行,不过很多人实战经验表明可行。

另外一个工具,只能在Linux上使用,
https://github.com/astrand/pyobfuscate

编译成.pyc文件

 python -m py_compile file.py

其中file.py改成你想要加密的代码脚本

5.注意事项(作为保姆级教程,肯定要有细节的啦~)
1.Cython封装的文件必须是可以调用函数的而不是直接执行,直接执行的文件会出现各种问题,所以你的封装文件中,必须是有def函数来调用,而不是直接执行!它不是接口型,也不是主程序!只是静默地等待~主程序的调用 ~ Cython 的封装能够有效保护关键函数代码哦
2.pyinstaller 或 py2exe 各有好处和短处,这里仅选用了pyinstaller 作为示范,各位根据自己喜好选用工具打包。
3.这个加密只是两重加密和一个打包,强度仅是中等水平,如果真的要保护非常非常非常重要非常非常非常隐私的代码的话,建议在Linux下用其他方式加密,比如.pyc编译+.pyd编译+其他第三方工具

都看到这里了…一定要我明示吗?没钱打赏?至少关注、点赞一下吧~感谢感谢

你可能感兴趣的:(【Windows下Python源码加密干货教程】Python源码不愿意被人发现?想要商用?不用掏腰包,自己双重加密保护你的关键代码!)