随着Python近年的流行,很多开发者选择用Python作为自己首选的开发语言,其简洁的语法和轻量的运行方式受到越来越多开发者的喜爱,但是对于一些个人开发者而言,某些不想开源的程序使用Python开发后很难保证其源代码不被他人剽窃,今天作者就和大家说说几种流行的Python代码加密方式,分析各种利弊并给大家推荐一下最佳的Python代码加密方案,今天主要的对象是基于Python3.X开发的应用程序(实测这些方法在2.x版本中也是可以使用的)
生成pyc文件发布
简介
pyc文件是一种经py文件编译后的二进制文件,他可以跨平台在Python虚拟机中运行,pyc文件打开是无法看到我们正常的源码的,例如这样:
源代码:
编译成的pyc文件:
可以看到辨识度基本为0
方法
一般一个项目的代码会有多个Python文件,我们需要批量生成pyc文件,这里可以使用compileall模块,我这里的示例项目是在E盘下code文件夹中,生成代码为:
import compileall
compileall.compile_dir(r'E:/code')
执行完后会发现项目下多了一个 pycache 文件夹,打开后就是编译后的pyc文件
代码函数变量混淆
这种加密方式类似于PHP的变量混淆加密,通过奇特的变量命名方式使代码难以被读取和理解,这种混淆非常恶心,有时源代码就在你眼前,你却无法知道该段代码的含义,令人很头疼
经过一番探索,我找到了一个在线进行混淆的站点,下个月计划自己写一个混淆代码的程序,届时也会第一时间开源分享给大家
神奇的站点:http://pyob.oxyry.com/
拿我写的一个函数作为例子(特意找了一个长的,方便大家更直观看到差别)
源代码:
def get_flag(get_flag_cmd):
list = []
global flag
print("DEMO:http://10.10.10.10/index.php?flag= yml-flag &name=666")
submit_flag_url = input("请输入提交flag的链接(flag用yml-flag替换,两边加空格):")
with open("data/flagshell.txt", 'r') as f:
line = f.readline().strip()
while line:
</ list.append(line)