python pyd_python项目(.pyd或者.so)代码加密
python项目(.pyd或者.so)代码加密
准备工作
Linux安装:
用到的库
sudo apt-get install python-dev gcc
#windows只需安装下面这两个就可以
pip install pycrypto Cython
在项目文件夹下新建两个文件setup.py, rename.py
加密脚本setup.py的代码如下
# coding:utf-8
import sys, os, shutil, time
from distutils.core import setup
from Cython.Build import cythonize
starttime = time.time()
currdir = os.path.abspath('.')
parentpath = sys.argv[1] if len(sys.argv) > 1 else ""
setupfile = os.path.join(os.path.abspath('.'), __file__)
build_dir = "build" # 项目加密后位置
build_tmp_dir = build_dir + "/temp"
def getpy(basepath=os.path.abspath('.'), parentpath='', name='', excepts=(), copyOther=False, delC=False):
"""
获取py文件的路径
:param basepath: 根路径
:param parentpath: 父路径
:param name: 文件/夹
:param excepts: 排除文件(当前文件不是目标文件)
:param copy: 是否copy其他文件
:return: py文件的迭代器
"""
# 返回所有文件夹绝对路径
fullpath = os.path.join(basepath, parentpath, name)
# 返回指定的文件夹包含的文件或文件夹的名字的列表
for fname in os.listdir(fullpath):
ffile = os.path.join(fullpath, fname)
# print('fname',fname)
# print("ffile", ffile)
# print basepath, parentpath, name,file
# 是文件夹 且不以.开头 不是 build ,不是迁移文件
if os.path.isdir(ffile) and fname != build_dir and not fname.startswith('.') and fname != "migrations":
# 循环遍历文件夹
for f in getpy(basepath, os.path.join(parentpath, name), fname, excepts, copyOther, delC):
yield f
elif os.path.isfile(ffile):
# 筛选出 .c 文件
ext = os.path.splitext(fname)[1]
if ext == ".c":
# 显示文件 "ffile" 信息,st_mtime: 最后一次修改的时间。
if delC and os.stat(ffile).st_mtime > starttime:
# 删除 .c 文件
os.remove(ffile)
# 文件不是排除文件 且不是'.pyc' '.pyx'文件
elif ffile not in excepts and os.path.splitext(fname)[1] not in ('.pyc', '.pyx'):
# manage.py文件不编译
if os.path.splitext(fname)[1] in ('.py', '.pyx') and not fname.startswith(
'__') and fname != "manage.py" and fname != "test.py":
# 返回要加密的文件(加到module_list中成为一个列表)
yield os.path.join(parentpath, name, fname)
elif copyOther:
dstdir = os.path.join(basepath, build_dir, parentpath, name)
# 判断文件夹是否存在,不存在则创建
if not os.path.isdir(dstdir):
os.makedirs(dstdir)
print('dstdir的是',dstdir)
# 复制文件到新文件夹下
print('ffile的是',ffile)
shutil.copyfile(ffile, os.path.join(dstdir, fname))
else:
pass
# 获取py列表
module_list = list(getpy(basepath=currdir, parentpath=parentpath, excepts=(setupfile)))
print(module_list)
try:
setup(ext_modules=cythonize(module_list), script_args=["build_ext", "-b", build_dir, "-t", build_tmp_dir])
except Exception as e:
print(e)
else:
module_list = list(getpy(basepath=currdir, parentpath=parentpath, excepts=(setupfile), copyOther=True))
module_list = list(getpy(basepath=currdir, parentpath=parentpath, excepts=(setupfile), delC=True))
# shutil.rmtree() 表示递归删除文件夹下的所有子文件夹和子文件
# 删除build_tmp_dir临时文件夹
if os.path.exists(build_tmp_dir):
shutil.rmtree(build_tmp_dir)
print("complate! time:", time.time() - starttime, 's')
方法:将需要加密的代码放到列表里,然后在终端执行 python setup.py
1、如果报错不能找到vcvasall.bat说明没有按照vc++安装之后再执行!
2、如果安装了vc++还是报错的话,这时候需要配置一下路径请看这里
# coding:utf-8
import os
from distutils.core import setup
from Cython.Build import cythonize
import shutil
# filter=[".py",".so",'.c'] linux的过滤条件
filter=[".py",".pyd",'.c'] #设置过滤后的文件类型 当然可以设置多个类型
def all_path(dirname):
result = [] # 所有的文件
for maindir, subdir, file_name_list in os.walk(dirname):
for filename in file_name_list:
apath = os.path.join(maindir, filename)#合并成一个完整路径
ext = os.path.splitext(apath)[1] # 获取文件后缀 [0]获取的是除了文件名以外的内容
# 筛选出.py 和 不是__init__的文件
if ext in filter and os.path.splitext(filename)[0] not in('__init__','manage','test'):
result.append(apath)
else:
pass
return result
def rename(list):
for i in list:
if i.__contains__(".pyd"):
re_name = i.split(".")[0] + '.pyd' #(linux的是.so文件)
print(i.split('.'))
os.rename(i, re_name)
elif i.__contains__(".c"):
os.remove(i)
if __name__ == '__main__':
path = os.getcwd()
list = all_path(path)
print(list)
print(len(list))
rename(list)
再执行一遍rename.py就得到修改后的pyd文件了
至此代码加密完成 加密完的项目在build文件夹中
再次在终端执行python manage.py runserver 运行项目成功
说明加密成功
python pyd_python项目(.pyd或者.so)代码加密相关推荐
- java项目免费授权方案 代码加密 离线授权 模块授权
java项目单机离线部署时,放在客户端无外网控制权限, 怎么实现软件级别的加密授权呢?大多数使用lic号 , 采集mac地址,硬件编号授权, 但是class类很容易反编译被破解.很容易被模仿,抄袭核心 ...
- python pyd_python解析.pyd文件
有的时候,为了对python文件进行加密,会把python模块编译成.pyd文件,供其他人调用.拿到一个.pyd文件,在没有文档说明的情况下,可以试试查看模块内的一些函数和类的用法. 首先 impor ...
- vue项目配置 webpack-obfuscator 进行代码加密混淆
背景 公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段.字符编码转 ...
- 推荐 | Python机器学习项目实战(附代码 + 可下载)【一】
这是一篇完全手把手进行机器学习项目构建的教程,包含: 1. 数据清理和格式化 2. 探索性数据分析 3. 特征工程和特征选择 4. 在性能指标上比较几种机器学习模型 5. 对最佳模型执行超参数调整 6 ...
- python计算项目内的总代码行数
毕设实用小工具,通过递归查找的形式来计算项目内自己需要计算的文件内的代码行数,同时这个精简的递归算法可以用于其他文件操作,如文件夹上传下载云云 import os# fp为你想要计算的根目录 fp = ...
- SpringBoot 项目 引入ClassFinal 解决代码加密和机器码绑定问题
场景 这边用 springboot 开发打包后得到 jar 包,要在客户机器上部署,有防反编译和绑定唯一id的需求 引入 https://gitee.com/roseboy/classfinal.gi ...
- Python代码加密:py文件转pyd文件
目前使用python语言比较多,尤其是深度学习项目,但是使用python加密比较麻烦,前期接触过几种加密的方案,但是效果都不理想,现在有一种思路比较靠谱:python原文件转pyd,然后用加密狗加密p ...
- Python代码加密混淆
python作为一种解释型语言,源代码加密本身比较困难.但有时候我们在发布一款python产品时又必须考虑到代码的加密性,以避免源代码泄露.为此,我查阅了一些资料,研究了几种python代码加密的常见 ...
- python代码加密运行_python源码下载后怎样进行加密
python源码下载后怎样进行加密 发布时间:2020-11-19 09:23:24 来源:亿速云 阅读:60 作者:小新 这篇文章主要介绍了python源码下载后怎样进行加密,具有一定借鉴价值,需要 ...
- 如何防止你的代码被窃取?Python代码加密方案汇总(带实例验证)
Python代码加密方案汇总 文章目录 Python代码加密方案汇总 需求描述 基础:Python文件格式 `.py` python源代码 `.pyc` 编译得到的字节码文件 `.pyo` 编译优化后 ...
最新文章
- azkaban 与 java任务_Azkaban的任务类型分析35:JavaProcessJob的执行
- python输出数据到excel-python如何导出数据到excel文件
- bzoj1007[HNOI2008]水平可见直线
- Linux 内核自解压流程分析
- 阿里云主机安装Memcached扩展优化WordPress
- 通过注册表修改远程桌面默认3389端口
- QCon上海2015热点前瞻:Uber伸缩之道、注重实效的性能
- java操作_JAVA操作文件大全(一)
- windows下python3安装pip方法详解
- 你应该知道的,十二大CNN算法
- lavaral中文手册_Laravel5.3手册下载
- 好看兼好用的编程专用字体
- 在线供应链服务平台方案:构建企业供应链平台业务、功能、技术管理架构
- Rebase Current onto Selected
- 建材行业环境保护和治理措施
- 翡翠手链的寓意是什么?要如何保养它才好!
- lenovo thinkpad t460s opensuse linux 下禁用多点触控屏
- 2020年中国儿童家具行业产量、市场规模发展现状及儿童家具企业竞争格局分析[图]
- WPF学习笔记16 BookDemo 2
- 研究:骇客又在合法的苹果Xcode专案上植入恶意程式
热门文章
- c语言中数组strcat什么意思,c语言中的strcat是什么意思?
- java安装_Java开发人员应该知道的7种新工具
- android 打apk文件怎么打开方式,apk文件怎么打开,详细教您打开apk文件的方法
- 支付宝-支付API(电脑网站支付)
- pytorch处理inf和nan数值
- 4G EPS 中的小区搜索
- 我们上市了-taofen8-返利界最美的云彩
- YOLOV3 config理解
- 响应式Web设计:HTML5和CSS3实战
- iOS-OC-提交审核:Missing Push Notification Entitlement