Python有啥模块来加密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python有啥模块来加密相关的知识,希望对你有一定的参考价值。
对 Python 加密时可能会有两种形式,一种是对Python转成的exe进行保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程。
1、 对 python转exe加壳
下载最新版Virbox Protector加壳工具,使用加壳工具直接对demo.exe进行加壳操作
2、对.py/.pyc加密
第一步,使用加壳工具对 python 安装目录下的 python.exe 进行加壳,将 python.exe 拖入到加壳工具 VirboxProtector 中,配置后直接点击加壳。
第二步,对.py/.pyc 进行加密,使用 DSProtector 对.py/.pyc 进行保护。
安全技术:
l 虚拟机外壳:精锐5的外壳保护工具,创新性的引入了预分析和自动优化引擎,有效的解决了虚拟化保护代码时的安全性和性能平衡问题。
l 碎片代码执行:利用自身成熟的外壳中的代码提取技术,抽取大量、大段代码,加密混淆后在安全环境中执行,最大程度上减少加密锁底层技术和功能的依赖,同时大量大段地移植又保证了更高的安全性。
l Virbox加密编译引擎:集编译、混淆等安全功能于一身,由于在编译阶段介入,可优化空间是普遍虚拟化技术无法比拟的,对代码、变量的混淆程度也有了根本的提升。
l 反黑引擎:内置R0级核心态反黑引擎,基于黑客行为特征 的(反黑数据库)反制手段。精准打击调试、注入、内存修改等黑客行为,由被动挨打到主动防护。
加密效果:
加密之前
以pyinstall 的打包方式为例,使用pyinstxtractor.py文件对log_322.exe进行反编译,执行后会生成log_322.exe_extracted文件夹,文件夹内会生成pyc文件。
成功之后会在同目录下生成一个文件夹
使用010 Editor添加几个字节,重命名为pyc文件
注【此处和python的版本有关,Python27的可以直接解压为pyc文件,Python34还需要添加几个字节】
然后使用EasyPython Decompiler 工具反编译pyc
成功之后通目录下会生成dis文件,生成出的dis文件可以用文本编辑器打开,看到源码
反编译后的log_322.exe的源码
加密之后:
【注:不同的打包方式原理不同,源码存放的位置也不同,所以需要保护的具体模块也是不同的】
加密之后再尝试解压log322.exe失败,已经无法进行反编译,使用常规反编译工具也是无法进行分析的。
参考技术A pycryptoAES、DES、MD5等加密 参考技术B
可以使用PyInstaller打包程序
关键部分使用numba编译部分代码为.dll
python中的模块,库,包有啥区别
1.python模块是:
python模块:包含并且有组织的代码片段为模块。
表现形式为:写的代码保存为文件。这个文件就是一个模块。sample.py 其中文件名smaple为模块名字。
关系图:
2.python包是:
包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。
常见问题:
引入某一特定路径下的模块
使用sys.path.append(yourmodulepath)
将一个路径加入到python系统路径下,避免每次通过代码指定路径
利用系统环境变量 export PYTHONPATH=$PYTHONPATH:yourmodulepath,
直接将这个路径链接到类似/Library/Python/2.7/site-packages目录下
好的建议:
经常使用if __name__ == '__main__',保证写包既可以import又可以独立运行,用于test。
多次import不会多次执行模块,只会执行一次。可以使用reload来强制运行模块,但不提倡。
常见的包结构如下:
package_a
├── __init__.py
├── module_a1.py
└── module_a2.py
package_b
├── __init__.py
├── module_b1.py
└── module_b2.py
main.py
如果main.py想要引用packagea中的模块modulea1,可以使用:
from package_a import module_a1
import package_a.module_a1
如果packagea中的modulea1需要引用packageb,那么默认情况下,python是找不到packageb。我们可以使用sys.path.append('../'),可以在packagea中的__init__.py添加这句话,然后该包下得所有module都添加* import __init_即可。
关系图:
3.库(library)
库的概念是具有相关功能模块的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块。
参考技术A 你指的是 module、lib 和 package吧。module:一个 .py 文件就是个 module
lib:抽象概念,和另外两个不是一类,只要你喜欢,什么都是 lib,就算只有个 hello world
package:就是个带 __init__.py 的文件夹,并不在乎里面有什么,不过一般来讲会包含一些 packages/modules
scrapy、flask、Django、numpy、scipy、NLTK、jieba一般都被认为是 lib,因为关注点并不是代码是怎么组织的。 参考技术B 模块
python模块,Module,是一个python文件,以.py结尾,包含了python对象定义和python语句。
模块让你能够有逻辑地组织你的python代码段,把相关的代码分配到一个模块里能让你的代码更好用、更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
使用模块有什么好处?
最大的好处是大大提高了代码的可维护性;其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用,我们在编写程序的时候,也经常引用其他模块,包含python内置的模块和来自第三方的模块。
使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
包 package
为了组织好模块,将多个模块分为一个包。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的python的应用环境。
简单来说,包就是文件夹,但该文件下必须存在__init__.py文件,该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。考虑一个在package_runoob目录下的runoob1.py、runoob2.py、__init__.py文件,test.py为测试调用包的代码,目录结构如下:
test.py
package_runoob
|-- __init__.py
|-- runoob1.py
|-- runoob2.py
库
库的概念是具有相关功能模块的集合。这也正是python的一大特色之一,即具有强大的标准库,还有第三方库以及自定义模块。
python中的库是借用其他编程语言的概念,没有特别具体的定义,python库着重强调其功能性。在python中,具有某些功能的模块和包都可以被称作库,模块有诸多函数组成,包由诸多模块机构化组成,库中也可以包含包、模块和函数。
以上是关于Python有啥模块来加密的主要内容,如果未能解决你的问题,请参考以下文章