Virbox Protector是深思数盾科技股份有限公司经过多年技术深耕开发的一款高强度虚拟机外壳。Virbox Protector 集加密、压缩、混淆虚拟化等于一身。支持的操作系统包括 WindowsLinuxmacOSAndroid,支持 x86x64arm32arm64架构,支持本地可执行程序,.NET程序,Unity3D程序,支持脚本语言加密。操作简单,保护选项灵活,安全性高。

加密效果

  • 代码逻辑保护
  • 防止反编译
  • 防止资源被提取
  • 反调试
  • Dump
  • 防止程序被打补丁

C#程序加密前后反编译效果对比

加密前:

加密后

Arm架构平台的程序混淆效果对比

混淆前效果:

混淆后效果:

本地可执行程序保护

本地可执行程序包括 PE、ELF、Mach-O 文件格式

  • 代码虚拟化

原理

将原始指令转换为自定义的虚拟机指令,交由配套虚拟机系统模拟执行。

功能

隐藏原始指令,防止代码逻辑分析。

优点:保护强度高,几乎不能被分析出原始的代码逻辑。

  • 代码混淆

原理

代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式。

Virbox Protector 支持对 x86/arm/.net il 系列指令进行混淆。

功能

扰乱原始指令,防止静态分析。

优点:防反编译,代码分析难度大。

  • 代码加密

原理

代码加密是使用 SMC(Self-Modifying Code)技术,将原始的函数加密,在函数被执行时才将函数解密并执行的保护方式。

功能

防脱壳,防止直接 Dump。

优点:运行效率高,几乎没有性能损失。

  • 压缩

Virbox Protector 的压缩功能,其核心目的不是“压缩”,并非专为缩小程序体积而设计的。它真正的作用是将代码与数据段做了加密,并将原先的导入表与重定位信息隐藏了起来,再”顺便“将原先的数据做了压缩。

原理

将原始的代码段与数据包打包并压缩,将原始程序入口(OEP)替换为壳代码,运行时由壳代码将代码段与数据段还原,并进行一些重定位等操作,使程序能正常运行。

功能

防止静态反编译,防止程序被打补丁。

优点

1、能起到一层整体保护效果,可以隐藏程序的代码、数据和文件结构信息。

2、运行效率高,仅在程序被加载时轻微的性能损失。

  • 资源加密

资源加密是针对 PE 格式程序的资源进行加密的保护功能,可以防止程序中的资源信息被提取,篡改。

原理

在加壳时将 PE 格式程序中的资源抽取并加密,仅保护一些外部需要的资源(如图标、版本信息等),在程序执行时,在壳代码中再解密。

  • 导入表保护

隐藏原程序中的导入表,保护程序的函数外部调用,可以达到干扰逆向分析、防脱壳的作用。

支持范围

目前仅支持 PE 格式的程序。

原理

去除原程序的导入表,将导入地址表(IAT) 替换为修复函数,由壳代码接管导入函数的跳转。


.NET 程序选项

JIT 加密

.NET JIT 加密,是将 .NET 所有方法的 IL 指令经过加密,仅在 .NET 虚拟机进行 JIT 编译阶段才解密,可以防止静态反编译,也能防止 IL 代码在内存被 Dump。JIT 加密可以配合代码混淆、代码加密、.NET 压缩一起使用,达到多层保护的效果,在兼顾性能的同时,更进一步提升保护后代码的安全性。

技术原理

启用 “JIT 加密” 后,在 Virbox Protector 进行保护时,会将 .NET 方法的 IL 字节码加密,并插入 VBP JIT HOOK 模块完成保护。

在运行阶段,.NET 虚拟机对原程序中的元数据等信息进行解析,最终需要在 JIT 阶段将 IL 方法进行编译,VBP JIT Hook 模块会在此时进行解密,使编译过程顺利进行。

名称混淆(.NET)

将 .net 的方法名类名使用随机字符串重新命名,导出和外部的名称不会改变。

压缩

Virbox Protector 的压缩功能,其核心目的不是“压缩”,并非专为缩小程序体积而设计的。它真正的作用是将代码与数据段做了加密,并将原先的导入表与重定位信息隐藏了起来,再”顺便“将原先的数据做了压缩。

原理

将原始的代码段与数据包打包并压缩,将原始程序入口(OEP)替换为壳代码,运行时由壳代码将代码段与数据段还原,并进行一些重定位等操作,使程序能正常运行。

功能

防止静态反编译,防止程序被打补丁。

  • 优点

    1、能起到一层整体保护效果,可以隐藏程序的代码、数据和文件结构信息。

    2、运行效率高,仅在程序被加载时轻微的性能损失。

去除强签名

1、强名称(StrongName)使.NET提供的一种验证机制, 主要包括标识版本和标识原作者。

2、强名称可以用来帮助用户验证自己得到的程序是否为原作者所写切没有被修改(例如添加恶意代码), 跟自校验有点类似。

3、因此添加了强名称的程序加壳时要去除强名称, 并在加壳后重新添加强名称。

代码加密(.NET)

原理

代码加密是使用动态代码技术,将原始方法字节码加密,执行时才将方法解密并执行的保护方式。

功能

防脱壳,防止直接 Dump。

  • 优点

    1、运行效率高,几乎没有性能损失。

代码加密不支持类型

针对C#程序选择函数的保护方式为代码加密时,加壳时提示“部分被保护函数设置了其不支持的保护方式,请前往函数选择界面更改保护方式。[0xA000A000]”的情况,以下列出代码中不支持的写法:

  • 值类型(及其继承类)的非静态方法 System.ValueType

  • 泛型方法暂不支持

  • C++ .net不支持

  • 递归调用不支持

  • 可变参数不支持

  • 默认参数不支持

代码混淆

原理

代码混淆亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式。

Virbox Protector 支持对 x86/arm/.net il 系列指令进行混淆。

功能

扰乱原始指令,防止静态分析。

  • 优点:防反编译。