关于Python代码混淆和加密技术

 更新时间:2023年07月27日 10:16:09   作者:小白地瓜  
这篇文章主要介绍了关于Python代码混淆和加密技术,Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向还原,混淆和加密就有所必要了,需要的朋友可以参考下

引言

Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向还原. 混淆和加密就有所必要了.

代码混淆是将程序中的代码以某种规则转换为难以阅读和理解的代码的一种行为。

1. 混淆

  • 减少py文件的注释、对代码顺序进行重排:混淆力度不够
  • 设计规则编写脚本或者使用现成的混淆工具,将对应的变量、函数、文件名、类名等进行不同程度的无意义的字符串替换:
    单个文件或许可行,整个项目处理起来问题较多,涉及模块引用,配置引用的问题(配置无法同步混淆,到时读取出错)

2. 加密

  • 只发行 pyc: 可以用现成工具复原
  • 用打包 exe 打包: 可以用现成工具复原
  • cython: 要加密单一的模块 /特制算法很有效,不过对很多模块的源代码容易出问题
  • 改字节码的 python: 未丢失信息,容易复原

PYC文件

介绍

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高。

而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。

pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的。

编写脚本

生成 pyc_create.py 文件 注:43行 的 ‘cpython-38’ 需要根据python版本来改,3.8为38 3.7为37

import os
import sys
import shutil
from py_compile import compile
# print "argvs:",sys.argv
if len(sys.argv) == 3:
    comd = sys.argv[1]  # 输入的命令
    path = sys.argv[2]  # 文件的地址
    if os.path.exists(path) and os.path.isdir(path):
        for parent, dirname, filename in os.walk(path):
            for cfile in filename:
                fullname = os.path.join(parent, cfile)
                if comd == 'clean' and cfile[-4:] == '.pyc':
                    try:
                        os.remove(fullname)
                        print("Success remove file:%s" % fullname)
                    except:
                        print("Can't remove file:%s" % fullname)
                if comd == 'compile' and cfile[-3:] == '.py':  # 在这里将找到的py文件进行编译成pyc,但是会指定到一个叫做__pycache__的文件夹中
                    try:
                        compile(fullname)
                        print("Success compile file:%s" % fullname)
                    except:
                        print("Can't compile file:%s" % fullname)
                if comd == 'remove' and cfile[-3:] == '.py' and cfile != 'settings.py' and cfile != 'wsgi.py':
                    try:
                        os.remove(fullname)
                        print("Success remove file:%s" % fullname)
                    except:
                        print("Can't remove file:%s" % fullname)
                if comd == 'copy' and cfile[-4:] == '.pyc':
                    parent_list = parent.split("\\")[:-1]
                    parent_up_path = ''
                    for i in range(len(parent_list)):
                        parent_up_path += parent_list[i] + '\\'
                    shutil.copy(fullname, parent_up_path)
                    print('update the dir of file successfully')
                if comd == 'cpython' and cfile[-4:] == '.pyc':
                    cfile_name = ''
                    cfile_list = cfile.split('.')
                    for i in range(len(cfile_list)):
                        if cfile_list[i] == 'cpython-38':
                            continue
                        cfile_name += cfile_list[i]
                        if i == len(cfile_list) - 1:
                            continue
                        cfile_name += '.'
                    shutil.move(fullname, os.path.join(parent, cfile_name))
                    print('update the name of the file successfully')
    else:
        print("Not an directory or Direcotry doesn't exist!")
else:
    print("Usage:")
    print("\tpython compile_pyc.py clean PATH\t\t#To clean all pyc files")
    print("\tpython compile_pyc.py compile PATH\t\t#To generate pyc files")

以此执行脚本命令 注!!!备份代码

C:\Users\周天震\PycharmProjects\Confuse 为我的项目目录。

1、生成pyc文件

python pyc_create.py compile C:\Users\周天震\PycharmProjects\Confuse

2、移动pyc文件

python pyc_create.py copy C:\Users\周天震\PycharmProjects\Confuse

3、删除py文件

python pyc_create.py remove C:\Users\周天震\PycharmProjects\Confuse

4、修改文件名称

生成的pyc文件样式为:manage.cpython-38.pyc 需要修改为 manage.pyc

python pyc_create.py cpython C:\Users\周天震\PycharmProjects\Confuse

检查项目

在这里插入图片描述

到此这篇关于关于Python代码混淆和加密技术的文章就介绍到这了,更多相关Python代码混淆和加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python获取好友地区分布及好友性别分布情况代码详解

    Python获取好友地区分布及好友性别分布情况代码详解

    利用Python + wxpy 可以快速的查询自己好友的地区分布情况,以及好友的性别分布数量。还可以批量下载好友的头像,拼接成大图。感兴趣的朋友跟随小编一起看看吧
    2019-07-07
  • python 列表删除所有指定元素的方法

    python 列表删除所有指定元素的方法

    下面小编就为大家分享一篇python 列表删除所有指定元素的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 一行代码生成Tableau可视化图表的方法

    一行代码生成Tableau可视化图表的方法

    本文主要介绍了一行代码生成Tableau可视化图表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别

    Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别

    这篇文章主要介绍了Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Python File readlines() 使用方法

    Python File readlines() 使用方法

    readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理,如果碰到结束符 EOF 则返回空字符串,需要的朋友可以参考下
    2018-03-03
  • Python深度学习实战PyQt5安装与环境配置过程详解

    Python深度学习实战PyQt5安装与环境配置过程详解

    本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5 的项目实战。什么叫从零开始?从软件安装、环境配置开始。不跳过一个细节,不漏掉一行代码,不省略一个例图
    2021-10-10
  • Python多线程:主线程等待所有子线程结束代码

    Python多线程:主线程等待所有子线程结束代码

    这篇文章主要介绍了Python多线程:主线程等待所有子线程结束代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 分析Python list操作为什么会错误

    分析Python list操作为什么会错误

    这篇文章主要介绍了分析Python list操作为什么会错误,python搞数据分析,在很多方面python有着比Matlab更大的优势,下面来看看文章具体介绍的相关内容吧,需要的朋友可以参考一下
    2021-11-11
  • Python自定义聚合函数merge与transform区别详解

    Python自定义聚合函数merge与transform区别详解

    这篇文章主要介绍了Python自定义聚合函数merge与transform区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • python中string模块各属性以及函数的用法介绍

    python中string模块各属性以及函数的用法介绍

    下面小编就为大家带来一篇python中string模块各属性以及函数的用法介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05

最新评论