一日一技:如何对Python代码进行混淆

目前市面上没有任何方法能够完全避免你的程序被人反编译。即便是3A游戏大作,发布出来没多久也会被人破解。现在只能做到增大反编译的难度,让程序相对无法那么快被破解。

我们知道,Python代码默认是公开的。当你要把一个Python项目给别人运行的时候,一般来说别人就能看到你的全部源代码。我们可以使用Cython、Nuitka对代码进行打包,编译成.so文件、.dll文件或者是可执行文件,从而在一定程度上避免别人看到你的源代码。我在字节的时候,内部的一个系统就是使用Cython打包的,然后部署到客户的服务器上。

Cython、Nuitka在打包大型项目时,需要写大量的配置文件甚至是额外的程序,有一定的使用成本。如果你对安全的要求并没有那么高,那么其实你只需要对Python代码进行混淆,就能防止自己的代码被人轻易看到了。

我们可以使用Pyminifier来对Python代码进行混淆。它的使用方法非常简单,pip安装以后,执行几行命令就可以完成。我们来看几个例子。

假设我有一段Python爬虫代码。原始代码是这样的:

import glob  
import uvicorn  
import random  
from pathlib import Path  
from fastapi import FastAPI  
from fastapi.responses import FileResponse  
  
IMAGE_TYPE = ['*.J*', '*.P*', '*.j*', '*.p*', '*.GIF', '*.gif']  
app = FastAPI()  
  
  
def iter_images(folder='*'):  
    images = []  
    target_folder = Path('images') / Path(folder)  
    if folder != '*':  
        if not Path(target_folder).exists():  
            return []  
    for image_type in IMAGE_TYPE:  
        images.extend(glob.glob(str(target_folder / Path(image_type))))  
    return images  
  
  
@app.get('/')  
def index():  
    images = iter_images()  
    if not images:  
        return {'success': False, 'msg': 'No Images.'}  
    path = random.choice(images)  
    return FileResponse(path)  
  
  
@app.get('/every/{name}')  
def get_one_goddess(name):  
    images = iter_images(name)  
    if not images:  
        return {'success': False, 'msg': 'No Images.'}  
    path = random.choice(images)  
    return FileResponse(path)  
  
  
  
if __name__ == '__main__':  
    uvicorn.run(app='main:app')  
  

这段代码能够实现一个简单的图片服务器,当我们访问http://127.0.0.1:8000时,就会随机显示一张图片,如下图所示:

我们现在来安装pyminifier。由于这个程序的代码很久没有更新了,因此如果你的Python版本比较高,那么需要首先降一下setuptools的版本,然后再安装pyminifier

pip install "setuptools<58.0.0"  
pip install pyminifier  

安装完成以后,我们来对代码进行混淆,执行如下命令:

pyminifier --nonlatin --replacement-length=50 main.py > output.py  

生成的output.py就是混淆以后的代码,效果如下图所示:

在这里插入图片描述

这样的代码,显然已经完全没法看了。除非对方就是冲着对你的代码进行破解来的,否则一般人看了这个混淆以后的代码,直接就走了。

混淆完成以后,这个代码依然是直接运行python output.py。功能不受任何影响。

这样的混淆,属于『君子锁』,只放君子不防小人。真的要反混淆其实并不困难。只是增加了几步操作而已。在对保密要求不那么高的情况下可以使用,毕竟非常简单,不需要对已有代码做任何修改。

学习资源推荐

除了上述分享,如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

😝朋友们如果有需要的话,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python学习路线

image-20230619144606466

python学习路线图1

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

因篇幅有限,仅展示部分资料,添加上方即可获取

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值