背景

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':continuecfile_name += cfile_list[i]if i == len(cfile_list) - 1:continuecfile_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代码混淆和加密技术相关推荐

  1. Python 代码混淆和加密技术简述

    Python 代码混淆和加密技术 1. 背景 Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向还原. 混淆和加密就有所必要了. 2. 目前的混淆和加密方案 2.1 混淆 减少p ...

  2. Python 代码混淆和加密技术

    动机 Python进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. ...

  3. Python代码混淆技术

    Python代码混淆技术 1. .py代码混淆技术 我们一般对反汇编代码进行还原时,默认CALL就是对一个函数的调用,碰到RET就是函数返回,条件分支两侧的代码都有可能被执行.而代码混淆就是打破了这种 ...

  4. python 代码混淆 代码保护 pyminifier

    python 代码混淆 pyminifier 文章目录 python 代码混淆 pyminifier 安装 修改源码 混淆 python 代码 网站混淆 常用命令 安装 pip install pym ...

  5. Java代码混淆和加密--Jocky

    原文地址为: Java代码混淆和加密--Jocky 1.1 什么是Jocky? 我们知道,Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的字节码(.class文件),然后在 ...

  6. Python代码加壳加密pyinstaller生成的exe反编译

    Python代码加壳加密反编译 phthon加壳 pyinstaller生成的exe反编译 加壳 pyinstaller 版本高于3.0 命令行: pyinstaller -F -key=xxxxxx ...

  7. APP加密,ios代码混淆工具,虚拟化技术 适用于移动应用程序的虚拟化加密软件

    概述: KiwiVM是用于移动应用程序的虚拟化加密软件. 它基于Clang编译器扩展,并且在编译项目时虚拟化指定的函数.借助自定义CPU指令的功能,一旦对代码进行加密并且从未解密,攻击者将无法恢复代码 ...

  8. JAVA项目实现离线授权日期授权解决方案 代码混淆 字符串加密 支持JDK16

    通常项目是通过 <系统名称 + 物理地址+硬盘序号+当前时间>等等一些能区别服务器的参数作为源,来加密成一个申请码,然后通过授权码的方式进行授权的方式 但是这里有一个问题,如果项目是离线放 ...

  9. 【如何给iOS APP加固】之代码混淆及加密 第一章【附代码】

    为了给iOS app加固,我们可以采取以下几种方式: 1.代码混淆 代码混淆是通过修改源代码结构和变量名,使得代码难以被理解和反编译.这可以防止黑客获取应用程序的代码,因为即使他们能够获得源代码,也会 ...

最新文章

  1. [微信小程序]this.setData , that.setData , this.data.val三者之间的区别和作用
  2. SQL Server 中如何判断表是否存在
  3. 面试官:限制系统扩展能力的瓶颈有哪些?
  4. DPVS_吊打面试官的项目——DPVS
  5. php获取excel数据并添加数据库,如何使用phpexcel读取数据并将其插入数据库?
  6. 尚学堂•百战程序员之技术人生
  7. java 基站定位_android基站定位 | 学步园
  8. Jeshoots - 类别齐全的高质量免费商业摄影图库
  9. 信息系统项目管理师项目合同管理
  10. 查询-非等值连接,外连接,子查询
  11. linux java目录 语法_Linux 文件和目录的属性
  12. WPS的JS宏设置文档的表格底色
  13. pytorch 安装教程
  14. 深圳哈工大计算机系的课表,学在哈深|哈工大(深圳)学子课表大比拼,今天你满课了吗?...
  15. 苹果怎么换行打字_好玩的微信空白朋友圈怎么发?教程来了!
  16. Python基础之Flask快速入门2
  17. 大二的第一次社会毒打
  18. 无约束优化问题(一)
  19. 矩阵分解——QR分解
  20. php——数组夯实基础篇

热门文章

  1. 杰理之DAC tirm值【篇】
  2. golang的int64排序_go语言中的排序讲解
  3. 桌面右键新建没有txt文件(windows系统)
  4. 在Ubuntu调用opencv库编程显示图片并叠加文字
  5. JB的测试之旅-听说安卓微信7.0不能抓https?
  6. wegame显示服务器维护中,【最新】Wegame登录报病毒终极解决方法
  7. LeetCode:127 单词接龙 无向图BFS
  8. vue 点击一个按钮触发两个事件_vue事件点击穿透解决大法
  9. JAVA初学者(1)——课堂练习之汽车超速罚款
  10. SteamCMD是什么怎么用开服教程