python源码加密实现
本文参考如何保护你的 Python 代码对其想法进行实现。
源码地址:spython@github
RAYENCRY
rayencry
使用AES算法对指定目录中的Python源码加密。
内容
- 背景
- 安装
- 使用说明
- 修改Python源码(
仅针对Python-2.7.15
) - Contributor
- Reference
背景
由于Python为解释形语言,源码直接暴漏在生产环境中,为了防止Python源码泄露造成不必要安全问题,可以改造Python解释器用于执行加密后的python代码。
安装
1. 目录结构
目录 | 描述 |
---|---|
doc | 文档 |
src | 源码 |
configure.json | 配置文件例子 |
install.sh | 安装脚本 |
uninstall.sh | 卸载脚本 |
Makefile | Makefile |
2. 编译依赖
rayencry依赖libssl
库,使用如下两种方法安装libssl
均可:
apt install libssl-dev
- 源码编译安装libssl
3. 编译安装
- 修改
decrypt_file.c
中的AES密匙和AES的cbc向量。注意:均为128位。 - 使用
sudo make
编译 - 使用
sudo make install
或者运行脚本install.sh
安装 - 使用
sudo make uninstall
或者运行脚本uninstall.sh
卸载 - 使用
sudo make clean
清除编译结果
使用说明
1. 配置configure.json
文件:
{"select":"/home/src","except":["except_file.py","except_directory"],"archive":"/home/src_en"
}
属性 | 必要性 | 类型 | 描述 |
---|---|---|---|
select
|
必选 |
string
|
需要加密的源码目录 (只能是目录)。请使用绝对地址。
|
except
|
可选 |
array
|
需要在加密文件中排除的目录 或者路径 。请使用相对地址。
|
archive
|
必选 |
string
|
加密目录 名字(不用提前创建)。请使用绝对地址。
|
2. 使用rayencry加密源码目录
rayencry <config file>
修改Python源码(仅针对Python-2.7.15
)
下载Python-2.7.15解释器的源码并对其进行如下的修改以运行加密的Python源码:
推荐使用aliyun镜像下载python源码
1. 添加文件
复制文件./src/Python/decrypt_file_acs.c
到Python-2.7.15/Python
中
复制文件./src/Include/decrypt——fileacs.h
到Python-2.7.15/Python
中
2. 添加解密函数到Python源码中
Module/main.c
------------...
- 609 if ((fp = fopen(filename, "r")) == NULL) {
+ 609 if ((fp = d_open(filename, "r")) == NULL) {
...Python/import.c
------------...
-1579 fp = fopen(buf, filemode);
+1579 fp = d_open(buf, filemode);
...
3. 禁止生成.pyc
文件
由于开发者可以通过.pyc
反编译出python源代码,所以需要禁用生成.pyc
文件
Module/main.c
------------...
+ 445 Py_DontWriteBytecodeFlag++;
...Python/pythonrun.c
------------...
- 194 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
- 195 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
...
4. 禁止访问字节码
./Objects/codeobject.c
------------...
- 205 {"co_code", T_OBJECT, OFF(co_code), READONLY},
...
5. 修改Makefile.in.pre
Makefile需要链接libssl
库,生成decrypt_source_file.o
./Makefile.pre.in
------------...
- 188 SYSLIBS= $(LIBM) $(LIBC)
+ 188 SYSLIBS= $(LIBM) $(LIBC) -lcrypto -lssl
...
295 ##########################################################################
296 PYTHON_OBJS= \
+ 297 Python/decrypt_source_file.o \
298 Python/_warnings.o \
299 Python/Python-ast.o \
...
752 ############################################################################
753 # Header files
754
755 PYTHON_HEADERS= \
+ 756 Include/decrypt_source_file.h \
757 Include/Python-ast.h \
758 Include/Python.h \
759 Include/abstract.h \
...
6. 编译安装Python
sudo ./configure --prefix=$PREFIX
sudo make
sudo make install
Contributor
echoechoin@github.com
QQ: 614699596
Reference
[1] 如何保护你的 Python 代码
[2] Python 2.7.18 documentation
python源码加密实现相关推荐
- python程序加密_项目源代码被好朋友“盗用”!让我痛心疾首!给Python源码加密!...
在加速发展的今天,互联网是一把双刃剑,既可以让软件行业高速发展,也能让它变成到处可见的免费资源.一个软件企业想要高速发展,技术很重要,安全也相当重要,它们同时存在才能保证软件的知识产权不受侵害,实现商 ...
- python代码封装加密_对Python源码加密及反编译前后对比
关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...
- Python源码加密与Pytorch模型加密
0.前言 深度学习领域,常常用python写代码,而且是建立在一些开源框架之上,如pytorch.在实际的项目部署中,也有用conda环境和python代码去部署服务器,在这个时候,又分为两种情况. ...
- python源码加密打包成pyd,编译生成pyd,加密生成pyd
关于toollib 当我们交付python代码时,存在源码安全的问题,为了确保源码安全目前最有效的方式就是打包成pyd,为此toollib给力完美的封装. 1)安装toollib 执行命令:pip i ...
- 实现对python源码加密的方法
文章目录 前言 一.将py文件编译成pyc 二.将py转化成so文件 2.1准备工作 2.2新建py2so.py文件 2.3编译项目文件夹 总结 前言 由于项目的保密性需求,对已开发完成的项目需要进行 ...
- 【Python基础】加密你的Python源码顺便再打个包如何?
本篇为专属于"交通科研Lab"志愿者系列推文活动,为大家带来交通高校硕博们原创推文.为作者点赞,欢迎大家关注交流!!! 点击蓝字 关注我们 成为一个智慧.快乐和富有的人. --王宇 ...
- python加密反编译_对Python源码进行加密及反编译前后对比
关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...
- 对python源码进行编译,加密python脚本
对python源码进行编译 1.生成.pyc文件 import py_compile py_compile.compile('hello.py') 2.优化源码文件 python -O -m py_c ...
- essential c++源码_Goldenmask - 一键化保护你的 Python 源码
项目地址: https://github.com/youngquan/goldenmaskgithub.com Goldenmask 直译为金色的罩子,灵感来自"金钟罩"的&qu ...
最新文章
- java编译器 Javac 编译原理
- php 配置 关闭警告,php warning 关闭的方法
- 保护ASP.NET 应用免受 CSRF 攻击
- 选数游戏(ybtoj-二叉堆)
- C++ 读取结束的判断
- 适合初学者的安卓开源项目_开源系列的初学者将从下周开始
- 小米金融:与涉案的“山东小米金融服务外包有限公司”无关系
- HTML解析没有详情页url,爬虫找不到详情页URL的参数
- oc 协议 回调 静态成员_OC问题
- 扫地机器人单扫和双扫_618买扫地机器人前必看 别图便宜 小心入坑!
- android:一个容易被遗忘的强大工具
- ftp linux 开启验证_Linux认证系统管理:linux下搭建ftp
- LaTex - PPT 模板-3 (亲测可用)
- 营业执照15位注册号码含义和查询规则
- idea 配置svn插件
- 计算机网络路由交换技术运用,计算机网络路由交换的技术应用与发展趋势研究...
- VS安装包下载和环境配置
- Selenium 爬虫应用的学习
- 计算机设备的快捷命令,快速打开设备管理器的快捷键教程
- libzip解压缩方法分析
热门文章
- 水彩画工具JixiPix Aquarella for Mac
- 【随堂习题1】用Python编写猜拳游戏
- 苹果cmsv10仿韩剧网好看的高端简约免费自适应模板
- 飞机电子式模拟空速表的设计与制作
- [转载]好莱坞故事创意手册!
- 苹果无线显示与电视连接电脑连接电脑连接服务器,平板电脑怎样连接电视机?...
- 让别人快乐地捐钱:英国人的慈善教育
- bom翻译中文_电器BOM表中英文对照
- 双正电气变频器说明书_【132G-A3 通用型变频器 高品质变频器】_浙江双正电气有限公司...
- 软考高级 真题 2013年上半年 信息系统项目管理师 论文