python作为一种解释型语言,源代码加密本身比较困难。但有时候我们在发布一款python产品时又必须考虑到代码的加密性,以避免源代码泄露。为此,我查阅了一些资料,研究了几种python代码加密的常见方式,在此记录一下。

源代码加密

(一)py脚本编译成pyc二进制文件

编译命令:

    python -m py_compile file.py

pyc文件是一个二进制文件,但是可以被很轻松的被逆向,在线反编译工具:https://tool.lu/pyc/。当然也有针对这个问题的解决方案,解决方案是可以通过修改python源代码中的opcode,然后重新编译py代码,可以一定程度上防止被逆向,因为逆向者需要知道被修改的opcode才能还原出来。如果使用私有的Bytecode指令集,那么通常的Python反汇编器和反编译器无法工作在由你私有Python编译器产生的pyc文件上,也相当于保护了你的Python代码。但是这么做的代价是你的Python应用只能在你的私有Python解释器上运行。(实际在发布一款产品时,并不适用)

(二)py脚本打包成exe文件

exe文件针对windows平台使用,一般是使用打包程序(py2exe、PyInstaller等)打包成exe,这些工具用于将一个Python项目打包成单个可执行的文件,方便(在没有Python环境的机器上)使用。但通过压缩包可以方便地得到所有pyc文件或源文件,与C/C++编译生成的可执行文件有本质上的区别,基本上是零保护,所以需要将exe进行加壳操作。

(三)py脚本编译成c文件(cython)

用cython将核心代码py模块文件转化成.c文件,再用gcc编译成so(unix)文件,或者将其编译成pyd(windows)文件。

编译过程:

1、服务器安装依赖

pip install python
yum install python-devel gcc

2、编写setup.py文件,内容如下:

from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("test.py",language_level=2)
)
# 批量编译
setup(
ext_modules = cythonize(["test.py","test2.py".......],language_level=2)
)

3、运行以下命令

python setup.py build_ext —inplace

会生成一个test.so,删除其余文件,直接引用test.so即可(跟引用py文件一样)

源代码混淆

除了加密以外,还可以对源代码进行混淆,增加源代码的阅读难度。这个有很多第三方库,我列举几个:
https://pypi.org/project/pyminifier/
https://github.com/astrand/pyobfuscate
http://pyob.oxyry.com/

pyminifier库用法:

-----------------------------------------------------
注:我这有个学习基地,里面有很多学习资料,感兴趣的+Q群:895817687
-----------------------------------------------------pyminifier -O test.py >> test_py.py
pyminifier --replacement-length=1 --obfuscate-builtins --obfuscate-import-methods --obfuscate-variables test.py

Python代码加密混淆相关推荐

  1. python代码加密 混淆_Python程序的混淆和加密

    混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. 如果你觉得有用, 可以购买离线版本. 同时需要注意的是, 这个混淆其实还是被很多人怀疑的, 因为即使混淆了 ...

  2. exe一机一码加密工具_Python代码加密混淆

    我多想再见你 哪怕匆匆一眼就别离 python作为一种解释型语言,源代码加密本身比较困难.但有时候我们在发布一款python产品时又必须考虑到代码的加密性,以避免源代码泄露.为此,我查阅了一些资料,研 ...

  3. 如何防止你的代码被窃取?Python代码加密方案汇总(带实例验证)

    Python代码加密方案汇总 文章目录 Python代码加密方案汇总 需求描述 基础:Python文件格式 `.py` python源代码 `.pyc` 编译得到的字节码文件 `.pyo` 编译优化后 ...

  4. VBA 工程代码加密混淆器,保护你的宏作品

    个人制作的 VBA 代码加密混淆器,帮你加密你的宏代码,让它不再那么易读.因 VBA 的方便一直以来都喜欢用它写一些小工具,了解多了也就知道这种代码编写的工具完全没有安全性可言,工程密码形同虚设,很容 ...

  5. Java代码加密混淆工具有哪些?

    在Java中,代码加密混淆工具可以帮助开发者将源代码进行加密和混淆处理,以增加代码的安全性和保护知识产权.以下是一些流行的Java代码加密混淆工具: 第一款:ProGuard:ProGuard Pro ...

  6. 【python】python代码加密与License控制

    背景 在一些使用python的商业项目上,开发人员不想被用户看到源代码时,就需要对python代码进行加密:进一步地,如果想限制用户只能在获得授权的机器上运行你写的代码时(利益相关),就需要使用Lic ...

  7. Python代码加密:py文件转pyd文件

    目前使用python语言比较多,尤其是深度学习项目,但是使用python加密比较麻烦,前期接触过几种加密的方案,但是效果都不理想,现在有一种思路比较靠谱:python原文件转pyd,然后用加密狗加密p ...

  8. python代码加密--pyinstaller

    python代码加密需要安装pyinstaller 包 不同系统安装方法 一.windows环境下: 1.安装pyinstaller pip install pyinstaller==3.6.0 2. ...

  9. python 代码加密

    Python代码加密步骤 1.准备文件 main.py为要加密的主脚本 import sys from PyQt5.QtWidgets import QApplication, QWidgetdef ...

最新文章

  1. Oracle中的MERGE语句
  2. 使用APIHOOK实现进程隐藏
  3. 百度认为什么样的网站更有抓取和收录价值
  4. stm32F042 (二) 按键触发中断
  5. Data Mining with Big Data--阅读笔记
  6. 初识MQ--异步通讯的优缺点
  7. 农民约翰是一个惊人的会计_我的朋友约翰在CSS Grid中犯了一个错误。 不要像约翰-这样做。
  8. 卡耐基梅隆大学CMU Brandon Amos博士论文《可微优化机器学习建模》
  9. android Frame-By-Frame Animations(一帧一帧地播放动画)的使用
  10. 跨进程的 键盘钩子_Delphi下深入Windows编程之钩子原理一
  11. Vue 中的列表渲染
  12. linuxliveu盘怎么用_linux mint 12 U盘(live usb)安装及体验
  13. Leetcode120.三角形的最小路径和 -- DP算法
  14. 比豆二机器人好的机器人_电话机器人:电话机器人哪家好?选择电话机器人的标准是什么?...
  15. 传奇私服网站php源码,传奇h5私服源码+教程
  16. android js 回调函数,Javascript回调函数传递给Android
  17. datamap excel插件_Excel地图插件 DataMap
  18. linux什么系统以dd镜像写入,linux下使用dd命令写入镜像文件到u盘
  19. offer?三方协议?两方协议?毁约?
  20. 计算机基本配置要求,BIM软件的电脑硬件配置要求

热门文章

  1. Java中List接口重要实现类一ArrayList
  2. 使用swagger编写开发接口文档
  3. Applese 走方格
  4. Choose the best route
  5. Java数据类型与各数据库类型对应一览表
  6. flex采用blazeds实现服务器向客户端推数据
  7. php中abstract和interface的区别
  8. 如何选择主机操作系统?
  9. JS基础语法(02)-JS的转义符
  10. 01-UIContainerView纯代码实现及原理介绍