1.概述

深思数盾自动保护工具Virbox Protector,是深思数盾科技股份有限公司经过多年技术深耕开发的一款高强度自动保护(加密)工具。Virbox Protector集自动代码移植、混淆、外壳加密、数据加密于一身,无需编程就能达到极高的保护强度,是业界领先的软件保护工具。

2.支持的加密类型

系统

Windows 7及以上版本

Linux明确支持的系统有 CentOS、Ubuntu及Debian-9.4.0系统

macOS 10.4系统以上版本

Arm Android及Arm Linux

编程语言

C、C++、Java、Delphi XE7及以上、PB、BCB、 C#、VB6.0、 Python、Lua、Perl、R、Ruby、PHP

插件及框架

AutoCAD ARX、Revit、Unity 3D、Unreal Engine 4、.NET

开发工具

MATLAB、LabVIEW

文件格式

32位和64位可执行文件,动态加载的库和驱动程序

3.试用版申请流程

3.1 填写申请试用表

填写申请试用表后,我们会在24h内向申请的手机号发送一个试用许可。

申请试用表:【点击申请】

3.2 下载试用版加壳工具,

安装后,会有两个工具:Virbox Protector 及Virbox 用户工具;

3.3 用手机号登陆Virbox 用户工具

登陆后,查看有加壳试用版许可,试用版有30天100次的测试。


4.exe/dll加密流程

加壳工具主界面如图:

1

开始进行加密

直接拖入文件或者选择打开文件的形式,选择需要加密exe可执行程序或者dll动态链接库。

【特别提醒:如果被加壳程序的相同目录下存在 xxx.map 文件,那么会自动加载 map 文件,将函数名称显示在界面当中,目前支持VS、VC、BCD、Delphi编译器生成的map文件】

拖入后主界面如图:

2

具体函数的保护——函数选项

Virbox Protector 支持代码混淆、代码虚拟化、代码加密等多种防护方式;

  • 混淆:将代码指令翻译为机器和人都无法识别的一串伪代码字节流,在具体执行时在对这些伪代码进行翻译解释,逐步还原为原始代码并执行。

  • 虚拟化:将指令编译为虚拟代码,放在指定虚拟机中运行,目前对指令有一定的格式要求,有的函数可能不能被保护。

  • 加密:将代码块作为数据,用许可加密函数存储,程序执行到该函数时验证许可并解密,内存中不会暴露完整的代码块,目前有的函数不可添加到保护中。

使用Virbox Protector 时,点击添加函数,添加需要保护的函数

3

可以使用性能分析功能,对程序进行分析,并选择重要的函数来保护。

  • 性能分析:点击性能分析按钮,运行需要保护的程序,执行正常的业务操作,程序中各个函数模块调用的次数实时显示在列表中。如果当前分析的程序位为 DLL 程序,则需要选择启动主程序,主程序启动的工作目录为主程序所在目录。目前仅支持 Windows 的 exe 程序或 DLL 库。

  • 可保护的函数列表:展示了需要保护程序的所有的函数模块,托管代码程序和非托管代码程序有细微的差别。

    【特别提醒:并不是所有的函数模块都能展示出来。1、指令大小小于 15 个字节的函数模块不会展示;2、有的非常规函数模块不会展示(名称中存”.<>@:?“等)】

3

保护方式选择完毕,点击确认完成修改。

加密选项配置

我们为高级用户,提供了加密选项的功能。PE 和.Net 程序,由于技术不同,所以在加密选项上,略有差异,您可以根据自己的需求,调整加密的具体方式。

  • 输出文件:可以修改程序保护后生成文件的路径和名称。

    【特别提醒: 1 、如果只有文件名称,那么路径为源程序的路径; 2 、如果输出文件名和源文件同名,生成的程序会将源程序覆盖,非常不建议。】

  • 导入表保护:这个选项能够对 PE 文件中的导入表进行了加密处理,隐藏了 API 列表。基于安全强度的考虑,我们建议用户使用这个选项。

    【特别提醒:导入表保护目前只适用于PE文件。】

  • 压缩:对加壳后的后的程序进行压缩处理,减小体积,同时可以防止静态反编译。

    【特别提醒: 1 、由于压缩模块需要一个固定大小的空间,如果被加壳的程序非常小压缩的效果并不明显还有可能出现体积更大的情况,对于体积较大的程序效果明显。 2 、不支持 DotNet动态库的压缩。 3 、不支持 arx 类型程序的压缩。】

  • 名称混淆:名称混淆,对源程序中的函数名称进行混淆,静态反编译工具显示的函数名为乱码。

    【特别提醒:名称混淆目前只能支持 DotNet 程序,并且不支持 IIS 类型程序的混淆。】

  • 资源保护:加密资源段,对被保护程序的资源区段进行加密,运行的时候需要用户使用相应许可进行解密方可使用程序。

    【特别说明:资源保护目前只能支持本地程序。】

  • ds插件:DS Protector是数据保护工具,可以对程序的数据资源文件进行加密保护。

  • anti插件:1.硬件断点功能,可以检测程序中是否设置硬件断点,若检测到则程序直接终止运行。2.内存断点功能,可以检测程序中是否设置内存断点,若检测到程序中设置内存访问断点和内存写入断点时,则程序直接终止运行。3.内存检测:可以检测到内存是否被修改,若程序内存被修改则程序将终止运行。注意:代码加密和内存检测有冲突,DS和内存检测有冲突。

完成加壳

所有选项配置完成,点击【保护选中项目】的按钮,完成加壳。提示加壳成功,打开文件所在的目录,即可看到加密之后的xxx.ssp.exe文件或者xxx.ssp.dll文件,修改文件名称,替换未加密的文件进行发布即可。

5.Java 加密流程

Java加密流程指引

保护背景

Java 开发语言以其安全性高、代码优化、跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。特别是近年来大数据、互联网+、云计算技术的不断发展,Java 开发语言更具有不可替代的地位。

不过,Java 最突出的跨平台优势使其要以中间代码的形式运行在虚拟机环境中,因此 Java 代码反编译要比其他开发语言更容易实现,并且反编译的代码经过优化后几乎可与源代码相媲美。为了避免出这种情况,保护软件知识产权,有一种叫做 Java 混淆器的工具被开发出来。

但 Java 混淆器的作用是对编译好的代码进行混淆,使得反编译后的代码混乱难懂,真正起的作用只是增加了逆向工程的难度,最终结果也是治标不治本,对于一些掌握工具的人来说几乎还是透明的。另外由于 Java 程序中会有多重映射关系,因此大多数混淆工具的兼容性会很差。

部署项目并启动服务

项目放在 webapps 目录下,先启动 tomcat 服务确认能正常启动,启动过后该 War 包会自动解压出一个同名的文件夹

img

启动 tomcat 服务

1538105102529

找到依赖的解释器

服务启动成功后,进入任务管理器-服务-找到目前运行项目所依赖的 jdk , 进入目录找到对应程序 进行加密。 如下图

1538105202198

对.jar或者.class文件进行加密

①首先对安装环境 jdk 路径下的 java.exe 进行加密,将 java.exe 拖入到加壳工具Virbox Protector Standalone中。

img

②在加密选项页面将插件的ds按钮打开。

5

③点击“保护选中项目”,加壳后会额外生成图示两个文件。

img

java.exe.ssp 是配置文件,在后面对 .class/.jar加密时会用到;java.ssp.exe 是加壳后的 java.exe 文件,将 java.exe 剪切到其他文件夹备份,java.ssp.exe 名字改为java.exe 即可。

④打开“DSProtector.exe”对 .class/.jar进行保护。

1538115708840

添加上一步加密 java.exe 生成的 java.exe.ssp 文件。

8

添加要加密的.class/.jar文件。

img

点击“保护它”,加密成功。

img

6.Unity 3D引擎开发程序加密保护

保护背景

Unity3D主要使用C#语法和开源mono运行开发商的代码逻辑,所有代码都不是编译到EXE,而是位于{APP}\build\game_Data\Managed\Assembly-CSharp.dll(注意Unity-2017位置略有不同)。

而且mono执行原理跟微软.NET Framework兼容但是执行原理完全不一样。传统的.NET Framework加壳全部失效,因为Assembly-CSharp.dll不是PE格式的动态库也不是.NET的动态库,无法从 .NET Framework 加载,而是由mono.dll读取 Assembly-CSharp.dll的里面C#脚本解释执行。

加密方式

对于Unity3D的保护方式,主要是通过Virbox Protector Standalone对Unity3D程序的整个生成目录进行加密,可以保护Unity的主要代码逻辑不被反编译,最大程度保护软件开发商的合法权益,同时DSProtector工具可以对Unity软件中的 .resS和resources等资源文件进行加密防止软件或游戏中的资源被非法提取。

源码加密

将Unity3D程序的整个目录拖入加壳工具中

img

加密选项处输出文件夹会自动写成【ssp.程序名】,点击加壳保护,提示加壳成功,打开生成目录,默认是在原文件的同目录下生成新的ssp.XXX(Unity3D程序文件夹名称),加密成功。[注:加壳工具默认对Unity3D目录下的mono.dll和Assembly-CSharp*.dll]文件进行加壳保护]

其他的dll和资源加密保护

对 Unity3D 资源的保护的基本流程是,先对unity项目的整个目录加壳,再通过 DS protector 对资源文件进行加密保护。 ①对unity项目的整个目录加壳时,打开加密选项的DS开关,密码可自由设置

unity3D资源加密

点击“保护选中项目”,加壳后会额外生成图示两个文件。

7

③点击加壳工具的 【打开DSProtector】 按钮 打开“DSProtector.exe”

8

选中上一步加壳Unity项目时生成的 .ssp 文件

9

点击添加资源,或者将所需保护的资源拖入到DS中,点击“保护它”,提示加密成功。

10

至此Unity3D程序加密已经完成。

7.Python加密流程指引

保护背景

Python语言写的程序无需编译成二进制文件代码,可以直接从源代码运行程序。在计算机内部, Python解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行,这使得 Python程序更加易于移植。

对可执行exe程序进行保护

参考上文对exe及dll加密流程

对.pyc或者.py文件进行保护

①首先对安装环境 Python 路径下的 python.exe 进行加密。

将 python.exe 拖入到加壳工具Virbox Protector Standalone中。

11

②在加密选项页面将插件的ds按钮打开。

12

③点击“保护选中项目”,加壳后会额外生成图示两个文件。

13

python.exe.ssp 是配置文件,在后面对 .py/.pyc 加密时会用到;python.ssp.exe 是加壳后的 python.exe 文件,将 python.exe 剪切到其他文件夹备份,python.ssp.exe 名字改为python.exe 即可。

④打开“DSProtector.exe”对 .py/.pyc进行保护。

8

添加上一步加密 python.exe 生成的 python.exe.ssp 文件。

15

添加要加密的 .py/.pyc文件。

16

点击“保护它”,加密成功。

17

至此,Python 的 .pyc 文件已经加密成功。

SDK标签

添加需要保护的函数模块

SDK工具包,包括头文件、静态库以及动态库,用户在编程的过程中将SDK标签静态载入到需要保护的函数当中,这样生成的可执行程序,在Virbox Protector加壳工具中就能够分析出SDK表示的函数,这样就7能够找到用户的核心代码所在的位置。目前支持,VBProtectBegin(常规保护),VBVirtualizeBegin(虚拟化保护),VBMutateBegin(混淆化保护),VBSnippetBegin(碎片化代码保护),VBProtectDecrypt(许可加解密)。[注意:SDK标签能方便用户找到关键代码]

SDK标签使用需要注意以下几点:

SDK的标签使用:

1、SDK只能静态加载,不支持动态加载dll(即loadlibraryA的方式)。

2、VBProtectBegin、VBVirtualizeBegin、VBSnippetBegin以及VBMutateBegin等接口,传入的字符串参数,不能与其他函数共用。

3、传入的字符串参数保证为ANSII码的形式,这样显示在界面上的函数名称才正确,否则就会显示为乱码。

4、每个Begin对应一个End,总是成对出现,并且一个函数里面不要出现多对Begin+End。

5、如果SDK表示的保护方式和工程文件中保存的保护方式冲突了,以工程文件中的保护方式为准。

6、Begin+End锁定代码最好大于3行代码。(因为锁定的代码正汇编生成的指令小于15个字节,那么不会显示在加壳工具界面上)。

7、SDK动态库,分为32以及64位,在使用的时候要开发者根据要编译的程序位数进行加载对应的库。

8、目前明确不支持的语言:易语言、Java程序、Unity3d。

9、Begin/End不支持嵌套使用。

10、VBProtectDecrypt被加密的字符串或者是缓冲区的长度必须是16的倍数,例如 char g_test_string[16] = {"test_decrypt"};

11、VBProtectDecrypt传入缓冲区和传出缓冲区不能是同一个缓冲区。

12、VBProtectDecrypt传入的缓冲区只能放在函数外,即全局变量。具体的使用参照demo

13、.Net程序暂时不支持VBProtectDecrypt。

SDK 中字符串加解密

使用方法

1、加密的字符串必须是常量。

2、也可以使用VBDecryptData直接到数据加密,但数据和长度也必须是常量。

3、字符串加密支持的写法有以下几种:

    a. 直接字符串加密:

VBDecryptStringA("test_string");

    b. 局部静态变量:

static const char g_string[] = "test_string";

    c. 全局变量:

char g_test_string[] = "test_string"; const char g_test_string[] = "test_string"; static const char g_test_string[] = "test_string";


命令行加壳

1、首先在运行输入框中输入"cmd.exe"打开控制台命令窗口

2、输入 路径+VirboxProtector_con.exe /? 可以查看帮助信息

命令行加壳工具help信息

VirboxProtector_con [-o output] -o output : output file name. -? : show help information.

3、使用命令行加壳的时候,若没有锁,则会提示错误。

4、插上带有许可的锁,使用命令行加壳工具加壳成功。

试用版与正式版

试用版与正式版区别

1.安装包不同:正式版与试用版是不同的安装包,购买正式版后才能使用正式版的加壳工具,使用许可也需要重新获取;

2.加密函数:试用版只能加密5个函数,正式版无限制;

3.程序运行期限:试用版加密后的程序只能运行7天,正式版加密后的程序无时间限制;

4.运行提示:试用版加密后的程序运行时会有提示:使用试用版独立加壳工具进行保护后的程序。正式版无提示。