python写的程序能加密吗
使用pyinstaller太麻烦,可以使用pymod.
先睹为快,看看一个项目发布的时候,只有几个文件,
main.py 项目程序入口
setting.py 项目配置
apps 项目模块
plusins 项目插件目录
二、创建项目
创建项目 pymod create demo1
cd demo1
创建模块 pymod add mod1
启动pycharm 开始编写功能模块
一个模块默认由三个文件组成
__init__.py 、 handlers.py 、param_schemas.py
业务逻辑主要在handlers.py中编写
__init__.py
from pymod.blueprint import Blueprintapi = Blueprint("/mod1")from .handlers import *
param_schemas.py
schema_sfz = {
"type": "object",
"required": ["sfz", "nl"],
"properties": {
"sfz": {
"type": "string",
"minLength": 18,
"maxLength": 18,
"description": "身份证明号码"
},
"nl": {
"type": "integer",
"minimum": 0,
"maximum": 150,
"description": "年龄"
}
}
}
handlers.py
from . import api
from pymod.ext import RequestHandler, params_validate,TrueResponse,FalseResponse
from .param_schemas import schema_sfz
from pymod.plugins import sfz_check
@api.add_route('/hello')
class Hello(RequestHandler):
def get(self):
self.write('Hello World')
@params_validate(schema_sfz)
def post(self):
sfz = self.get_json_arg("sfz")
nl =self.get_json_arg("nl")
# self.write(TrueResponse(sfz=sfz, nl=nl))
if sfz_check.check_sfzmhm(sfz):
self.write(TrueResponse(hint="身份证明号码验证通过"))
else:
self.write(FalseResponse(hint="身份证明号码验证失败"))
三、项目部署
程序调试 修改setting.py
# 开发模式下 运行的模块名称必须填写
modules = ["mod1"]
modules_config ={
"mod1": {
"deny_ip": "",
"allow_ip": "*"
}
}
启动程序 python main.py
调试没有问题,进入发布模式
在项目目录下
pymod pack mod1
在target目录下生成mod1.mod文件,将其复制到apps目录中
修改setting.py
# 开发模式下 运行的模块名称必须填写
modules = []
再次运行 python main.py 测试
一切OK,系统就可以发布了。
pymod 使用指南,访问 https://pymod.cn
用法:先安装pyinstaller。按照python版本安装:
pip install pyinstaller
安装好之后:pyinstaller -F python文件。
编译好了文件在./dist/下,直接用就行
对 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失败,已经无法进行反编译,使用常规反编译工具也是无法进行分析的。