#
Python程序介绍Python是一种高级的、解释型的、面向对象的编程语言,python代码简洁易读,并且Python语言跨平台,拥有丰富的标准库和第三方库,深受开发人员的喜爱。
python程序常见扩展名
操作系统 | 文件类型 | ||
windows/Linux/mac等系统 | py | ||
pyc | |||
pyd/pyz/pyx等 |
#
Python程序的安全性问题由于Python是一个面向字符串流的解释执行的特点,引发了安全问题,使用者执行Python程序时, python解释器需要通过Python源码来解释执行,即便是编译成pyc,也有工具可以直接反编译回Python代码,与源代码几乎大差不差, 因此Python软件的安全性变得尤为关键。
我们的python保护是一个字节码级别的保护技术,它能保证python脚本被直接反编译和修改的风险,确保Python脚本在部署后依然安全可靠。
#
支持范围#
特点1.字节码级别的保护:我们的保护技术在Python字节码级别进行保护,在整个Python程序执行过程中,没有源代码的存在,并且python反汇编函数无法正常反汇编出字节码。
2.实时加密和解密: Python字节码是被加密的,仅在执行之前进行解密,代码体执行完毕后会重新加密字节码,从而避免了脚本在内存中一次性全部dump出来。
3.高兼容性: 保护后的脚本大部分情况下能直接和之前未被保护的脚本无缝替换。
4.兼容多Python版本: 保护后的脚本可以在3.6-3.11之间的Python版本执行。
5.无缝替换的要求:Python解释器可以正确加载 virbox_pyruntime包里的C扩展库virbox_pyruntime包, 但virbox_pyruntime库需要有可写权限。
6.和DS方式保护进行对比:
dsprotector | pyprotector | |
---|---|---|
部署 | 需要对python保护,加入ds插件后,替换执行的python | 无需修改python |
安全性 | 可以从内存中dump出python源代码 | 在内存中以代码对象(二进制)形式体现 |
#
语言环境1.Python保护环境:
3.6-3.11版本
只支持py文件,不支持pyc的保护。
2.保护后的Python运行环境:
3.6-3.11版本
注:如果操作系统上不支持python3.8,则无法加壳成功。
#
运行环境操作系统 | x86 | x64 | arm32 | arm64 |
---|---|---|---|---|
Windows | ✔️ | ✔️ | N/A | 暂不支持 |
Linux | ✖️ | ✔️ | ✔️ | ✔️ |
macOS | N/A | ✔️ | N/A | 后续支持 |
#
执行过程保护的python文件执行的过程:
1.加载virbox_pyruntime模块;
2.调用virbox_pyruntime模块中virbox函数, 校验脚本是否被修改等,修复字节码加密函数,字节码解密函数,字符串/属性解密函数,检验函数;
3.执行代码对象;
4.在函数头解密字节码体;
5.在函数尾加密字节码体。
#
基础功能介绍#
函数校验运行时校验函数,防止在内存动态替换。
#
模块校验运行时校验导入的Python模块,防止被替换。
#
字符串加密加密python代码中的字符串,提升逆向难度。
#
属性名称加密加密python代码中的类属性。
#
局部变量混淆将python函数中的局部变量重命名为无意义的字符串。
#
字节码动态加密仅在函数执行时解密。
#
防篡改禁止被保护的脚本添加其他的代码(注释可以添加)。
#
代码对象名称混淆重命名代码对象的名称,防止推断代码逻辑
#
操作指引#
界面操作1.将包含py文件的文件夹拖入到加壳工具界面;
2.下载Python扩展包,网址:https://shell.virbox.com/down.html;
3.点击安装扩展包
,直接加载下载的python_extension.zip即可。
2.加密选项处根据自己需求选择;
3.Python Files选项处,会列出后缀名为py的文件;
Python密码:
1)当加密的py文件之间存在依赖关系时,若两次加壳的密码设置不同,则保护后的py文件无法通用,密码设置相同则可以通用;2)当加密的py文件之间不存在依赖关系时,若两次加壳的密码设置不管相同与否,保护的后py文件可正常使用。
4.选择保护
,则会生成XXX_protected文件夹,其中项目结构中会多出了一个virbox_pyruntime包,执行保护后的代码必须依靠virbox_pyruntime包中的C扩展库。
注意:1.若执行的py文件同目录下没有此文件夹,则会运行失败。2.可以将virbox_pyruntime文件夹放到python环境的目录下,则保护后的py同目录下不需要virbox_pyruntime文件夹也可以运行。
#
命令行操作#
命令行工具环境python的命令行工具pyprotector_con
的默认路径位于:
Windows:正式版:C:\Program Files\senseshield\Virbox Protector 3\bin\pyprotector_con.exe试用版:C:\Program Files\senseshield\Virbox Protector 3 Trial\bin\pyprotector_con.exeLinux:正式版:/usr/share/virboxprotector/bin/pyprotector_con试用版:/usr/share/virboxprotector-trial/bin/pyprotector_conmacOS:正式版:/Applications/Virbox Protector 3.app/Contents/MacOS/bin/pyprotector_con试用版:/Applications/Virbox Protector 3 trial.app/Contents/MacOS/bin/pyprotector_con
#
命令行参数1.参数选项
选项 | 命令行 | 默认选项 |
---|---|---|
安装扩展包 | --install=<zip_path> | 0 |
指定py保护后运行的python版本 | --target-python-version= | 0 |
函数检验 | --function-check=<value> | 0 |
模块检验 | --module-check=<value> | 0 |
字符串加密 | --str-enc=<value> | 0 |
属性名加密 | --attr-enc=<value> | 0 |
局部变量重命名 | --local-var-rename=<value> | 0 |
字节码动态加密 | --bc-dyn-enc=<value> | 0 |
过滤指定的文件不保护 | --excludes= | 0 |
输出文件夹路径 | -o=<output_path> | 0 |
python命令行工具版本 | -V |
2.命令行举例
1)命令安装扩展包
"C:\Program Files\senseshield\Virbox Protector 3\bin\pyprotector_con.exe" --install=D:\Desktop\python_extension.zip
2)过滤嵌套的文件夹里的py
"C:\Program Files\senseshield\Virbox Protector 3\bin\pyprotector_con.exe" <py-demo> --excludes=<py-demo>/<dirs> -o <py-demo_protected>
3)过滤单个py文件
"C:\Program Files\senseshield\Virbox Protector 3\bin\pyprotector_con.exe" <py-demo> --excludes=*/demo.py -o <py-demo_protected>
或者--excludes=指定py的全路径也可过滤。
4)对程序进行保护(开启函数检查/字符串加密/字节码动态加密选项)
"C:\Program Files\senseshield\Virbox Protector 3\bin\pyprotector_con.exe" <py-demo> --function-check=1 --str-enc=1 --bc-dyn-enc=1 -o <py-demo_protected>
5)对程序进行保护后,需要指定的python版本才能运行(比如指定版本为3.9,则必须python3.9版本才能运行加密后的py文件)
"C:\Program Files\senseshield\Virbox Protector 3\bin\pyprotector_con.exe" <py-demo> --target-python-version=3.9 -o <py-demo_protected>
#
运行部署上述的保护方式不区分环境,保护后的py文件和保护前的py文件运行方式一样。
#
性能结果结果:
字符串加密、属性加密是最影响性能的,其他功能基本上没有什么影响。
是因为字符串加密、属性加密的数量比较多导致的,但是整个程序运行过程中,只解密一次,所以首次运行会有影响,运行过程中不会有影响。
以支持向量(support vector)算法为例,使用cProfile工具记录调用几百万次函数的时间对比结果如下:
注:黑色虚线为原程序运行结果,其他为加密时的各个选项功能的运行结果。