跳到主要内容

Virbox Protector 加密选项说明

本地可执行程序保护

代码混淆

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

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

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

优点

  • 防反编译,代码分析难度大。

代码虚拟化

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

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

优点

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

代码加密(Native)

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

功能:防脱壳,防止直接 Dump。

优点

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

碎片代码

原理:将代码从原程序中抽取出来,加密后转移到安全环境执行。对软件授权和代码逻辑双重保护。

导入表保护

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

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

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

资源加密

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

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

附加数据扩展

描述:附加数据一般是由某些编译器或打包工具,将一些数据(如音视频、数据库等)与原始的可执行程序拼接,这些数据一般在运行时被原始的程序读取,附加数据在执行时并不会直接被映射到内存中。

功能:由于加壳会改变原始程序文件,如果将附加数据直接拼接到保护后的程序,可能会导致运行时异常。

附加数据扩展:使用了 Hook 手段使程序能正常读取到附加数据,另外对附加数据做了加密处理,防止数据被轻易窃取。

压缩

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

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

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

.NET 程序保护

代码加密(.NET)

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

功能:防脱壳,防止直接 Dump。

保护效果图

保护前,如图所示:

img

保护后,如图所示:

img

代码加密不支持类型

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

  • 值类型(及其继承类)的非静态方法 System.ValueType
  • 泛型方法暂不支持
  • C++ .net不支持
  • 递归调用不支持
  • 可变参数不支持
  • 默认参数不支持

代码碎片化

原理:将代码从原程序中抽取出来,加密后转移到安全环境执行。对软件授权和代码逻辑双重保护。

保护效果图

保护前,如图所示:

img

保护后,如图所示:

img

代码混淆

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

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

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

保护效果图

保护前,如图所示:

img

保护后,如图所示:

img

名称混淆(.NET)

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

压缩

描述:将 .NET 元数据(Meta Data)信息抽取并压缩加密,运行时再由壳代码将其还原,使其能正常运行,可以有效防止 .NET 程序中的方法被 DnSpy,ILSpy,.NET Reflector 等工具反编译

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

JIT 加密

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

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

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