python源码加密实现

本文参考如何保护你的 Python 代码对其想法进行实现。
源码地址:spython@github

RAYENCRY

rayencry使用AES算法对指定目录中的Python源码加密。

内容

背景

由于Python为解释形语言,源码直接暴漏在生产环境中,为了防止Python源码泄露造成不必要安全问题,可以改造Python解释器用于执行加密后的python代码。
在这里插入图片描述
在这里插入图片描述

安装

1. 目录结构

目录描述
doc文档
src源码
configure.json配置文件例子
install.sh安装脚本
uninstall.sh卸载脚本
MakefileMakefile

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.cPython-2.7.15/Python
复制文件./src/Include/decrypt——fileacs.hPython-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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值