跳到主要内容

授权码-.NET加密流程

针对 .NET开发的程序容易被反编译的问题,VirboxLM 提供 VirboxProtector 加密工具,专门针对 .NET程序定制加密方案,可对 .NET函数做碎片化保护、代码加密保护、混淆保护、Jit加密保护、压缩保护、名称混淆保护等多种加密技术,可同时使用压缩、JIT加密和函数保护三重加密,真正实现.NET的安全。

VirboxProtector加壳工具自动集成 Runtime 库及授权码许可 ID 绑定,无需再编写代码调用,节约开发商的时间。

加密流程概述

  1. 将程序拖入加壳工具
  2. 选择开发锁及填写api密码
  3. 设置许可选项
  4. 设置加密选项
  5. 设置函数选择
  6. 设置消息选项
  7. 保护成功

3.1打开加壳工具

启动 Virbox 开发者工具盒 -> 点击 "加壳工具" ->点击 "启动加壳工具".

将待加密的程序拖入到加壳工具里

img

image-20220720175055000

3.2选择开发锁及填写API密码

这里我们需要登录开发者账号(需要联网)

img

填写API密码

img

从VirboxLM获取API密码

登录 Virbox LM 平台 在【概览】页面,点击【查看开发者信息】,将API密码复制到加壳工具对应位置。

image-20230403152831107

3.3许可选项配置

许可类型

勾选软锁-本地许可

许可设置

  • 许可ID:此处填写的许可ID要与发授权码时创建产品时的ID一致。
  • 锁芯片号:不设置
  • 后台检测间隔(秒):表示每隔多少秒对运行程序进行检测是否存在对应许可,如果没有那么就会提示错误,或者退出。如果后台检测时间设为0s,那么后台就不会进行检测许可的操作
  • 检测锁插拔消息:软锁不勾选此设置。表示程序运行过程中拔掉用户锁时,直接进行许可查找,若找不到对应许可,则弹框提示信息。

许可运行时库

  • 可调试:仅可在开发过程勾选,对外发布时不能勾选。如果勾选此选项,使用可调试版(开发版)许可运行时库,禁用许可反调试功能,仅可在开发过程勾选,对外发布时请勿勾选
  • 外置:默认不勾选,会将Runtime库和程序打包一起,若勾选会根据程序的系统及架构在同目录下生成Runtim库:slm_runtime.dll,运行加密后程序时,需要将slm_runtime.dll与程序放在同一个目录下。注意:勾选外置会降低安全性,请根据实际情况选择

image-20220720175648073

3.4函数选项

点击【函数选项】-【添加函数】,可对函数选择保护方式。

针对.NET开发的可执行程序和库文件,保护方式安全强度:

碎片化 > 代码加密 > 混淆

注意:碎片化对性能的影响越大,针对核心函数做碎片化保护,其他函数做代码加密。

image-20220720180823214

3.5加密选项

点击【加密选项】,可对程序设置一些加密选项。

输出信息:可以修改程序保护后生成文件的路径和名称。默认会生成一个protected文件夹并保存

包括导入表保护、压缩、名称混淆等功能,主要是对文件的整体保护。

设置选项功能说明
JIT加密加密.NET程序的所有方法的 IL代码,防止被反编译和动态调试
压缩打包并加密程序中的代码和数据,防止被反编译。
调试器检测勾选此选项后,程序检测到进程被调试时退出进程。

image-20220721094544717

插件

ds:可加密程序中的资源文件,配合DSProtector。

3.6消息选项

当程序被加密后,程序就与我们 之前创建的许可进行关联,当用户在使用我们的加密的程序时如果触发了一些限制时,会以该界面上的消息进行显示。

img

3.7完成保护

按照上面步骤配置好加壳工具后,点击 "【保护选中项目】" 即可完成程序的加壳操作。

加壳后的程序会在同一目录下生成新文件(dot_NET2_bounce.exe.ssp)和 protected文件夹,protected里包含加密后的文件

protected:加密后的程序会自动生成,保存在此文件夹下,您可以将此文件替换到原来的程序目录里测试运行。

image-20220422142416840

dot_NET2_bounce.exe.ssp 为配置文件,保存了加密过程中的所有配置项目。

至此,软件加密已完成,可进行下一步操作:使用加密后程序

.Net标签保护

.NET程序支持代码加密和代码混淆两种函数保护方式,代码中设置Virbox命名空间,并在代码中引用, 程序编译成功后,将编译好的程序拖入到加壳工具界面,界面会显示代码中设置的函数保护方式。

代码书写方式

//命名
namespace Virbox{

//代码混淆
class Mutate : System.Attribute
{
}
//代码加密
class Encrypt: System.Attribute
{
}
}
public class main
{
[Virbox.Mutate]//代码混淆
public static void test1(string[] args)
{
System.Console.WriteLine("hello Virbox.Mutate!");
}
[Virbox.Encrypt]//代码加密
public static void test2(string[] args)
{
System.Console.WriteLine("hello Virbox.Encrypt!");
}

public static void Main(string[] args)
{
test1(args);
test2(args);
}
}