Skip to main content

Java VME方式保护流程

方案简述#

Virbox Protector Java VME 保护技术是将 Java 方法的字节码转换为自定义的虚拟机字节码,并将其替换为跳转代码,运行时跳转至自定义虚拟机中解释执行,安全强度高,无法被任何已知工具还原出原始 Java 代码。

使用 Virbox Protector Java VME 版可直接将 jar/war 包拖入到保护工具里,函数选项处,点击添加函数,选择函数设置保护方式为虚拟化;点击保护选中项目即可,即可对 jar /war 包进行保护,保护后,程序正常使用即可。

与 Java BCE 的不同
  1. 加密原理不同:VME 可对 Java 方法进行虚拟化保护,BCE 方式是加密 Class 文件中每个方法的 Java 字节码,运行时在 Java agent 中动态解密。
  2. 加密后运行方式不同:VME 加密后 jar包运行方式与未加密时一致,BCE 加密后运行时,需要配合使用 sjt_agent.jar。
  3. 加密方式不同:VME直接对 jar/war 包进行加密,BCE 需要把 jar/war 放到文件夹,然后把文件夹添加到 加壳工具中。
  4. VME 支持 Jar 包二次调用的加密场景,BCE 不支持此类场景保护。
  5. VME 支持 Jar 包打包成exe运行的加密场景,BCE 不支持此类场景保护

【注意】

  1. 暂不支持内嵌的 jar;
  2. 使用了 springframework 的 jar 包,不支持保护 org/springframework/boot/loader 下的 class, 仅支持核心 class 文件(如 BOOT-INF/classes 下的 class);
  3. 不支持的函数类型包括构造方法、析构方法、使用了反射的方法

界面加密流程#

1.将jar/war 包直接拖入到工具中;#

2.设置函数选项#

在函数选项处,点击【添加函数】,选择函数,设置保护方式为虚拟化,确定。

3.加密选项#

输出信息

可自定义设置加密后生成的文件存储的目录及命名,默认会自动生成在protected文件夹下。

加密选项

字符串加密:加密代码中的敏感字符串,防止反编译工具直接搜索到相关的函数。

4.点击保护#

点击【保护选中项目】,保护成功后会重新生成加密后的jar包(存放在protected文件夹下)和ssp文件

注意

test.jar 为源文件jar包

protected 为加密后的jar包存放文件夹,打开文件夹即可看到加密后的jar包。

test.jar.ssp 为加密设置时保存的配置选项文件

java标签保护#

JAVA程序支持代码虚拟化函数保护方式,代码中设置VBVirtualize注解,并在函数上引用,程序编译成功后,将编译好的程序拖入到加壳工具界面,界面会显示代码中设置的函数保护方式:

1、新建VBVirtualize.java,内容是:

package virbox;
public @interface VBVirtualize{}

2:调用方式:

import virbox.VBVirtualize;
@VBVirtualize //可添加到类上面,所有的方法都会默认保护public class Main {    public static void main(String[] args) {        System.out.println("hello");         test_vir();    }
@VBVirtualize //可添加到方法上面,只保护该方法    public static void test_vir()    {        System.out.println("test_vir");    }}

命令行保护方式#

Virbox Protector 的命令行工具 virboxprotector_con 的默认路径位于:

Windows:C:\Program Files\senseshield\Virbox Protector 3\bin
Linux:/usr/share/virboxprotector/bin
macOS:/Applications/Virbox Protector 3.app/Contents/MacOS/bin

调用命令行可以指定完整全路径,例如:

"C:\Program Files\senseshield\Virbox Protector 3\bin\virboxprotector_con.exe" <file_path>      <options ..> -o <output_path>

如果在 Windows系统,也可以加入环境变量,然后直接输入 virboxprotector_con,无需输入全路径。

非 Windows 系统,也可以设置软链接:

sudo ln -s /usr/share/virboxprotector/bin/virboxprotector_con /usr/local/bin/virboxprotector_con

然后即可直接输入virboxprotector_con 命令进行保护。

命令行帮助

更细节的参数,可以使用 --help=java-vme查看帮助:

例如:

virboxprotector_con --help=java-vme
选项命令行默认选项
虚拟化的方法-v <method_list>
过滤不虚拟化的方法-ev <method_list>
字符串加密--str-enc=0
过滤不支持的方法--ignore-unsupported=
输出路径-o <path>xxxx_protected

java-vme方式不支持直接对内嵌jar包加密,需要将内嵌jar包取出后再进行加密,将加密后的内嵌jar包放回原jar包,对原jar包在进行加密。

java-vme方式仅支持对函数虚拟化保护。

virboxprotector_con <jar_path> -v "com.example.test1.*;com.example.test2.*" -o <output_path>

保护方式#

举例(保护test1和test2的所有方法):

virboxprotector_con my_jar.jar -v "com.example.test1.*;com.example.test2.*" -o protected/my_jar.jar

举例(保护jar包中的所有方法):

virboxprotector_con my_jar.jar -v "*" -o protected/my_jar.jar

使用SSP配置文件方式#

1.使用Virbox Protector界面工具生成配置文件;

温馨提醒

如果使用了 Java标签,可无需生成 SSP配置文件

在函数选项里,设置函数的保护方式,然后点击 【保存所有配置】,会生成一个 xx.jar.ssp 文件,将 ssp 配置文件与待加密的 jar 包放在同一个目录里。

  1. 打开终端窗口,进入到“virboxprotector_con”所在的路径,直接输入“virboxprotector_con”运行可查看帮助信息;

可在 Virbox Protector 快捷方式上,鼠标右键 选择 打开文件所在位置,即可进入到“virboxprotector_con”所在的路径

  1. 加密 jar 执行命令如下:

virboxprotector_con <需要被保护的jar> -o <输出文件的jar>