Java VME方式保护流程
#
方案简述Virbox Protector Java VME 保护技术是将 Java 方法的字节码转换为自定义的虚拟机字节码,并将其替换为跳转代码,运行时跳转至自定义虚拟机中解释执行,安全强度高,无法被任何已知工具还原出原始 Java 代码。
使用 Virbox Protector Java VME 版可直接将 jar/war 包拖入到保护工具里,函数选项处,点击添加函数,选择函数设置保护方式为虚拟化;点击保护选中项目即可,即可对 jar /war 包进行保护,保护后,程序正常使用即可。
与 Java BCE 的不同
- 加密原理不同:VME 可对 Java 方法进行虚拟化保护,BCE 方式是加密 Class 文件中每个方法的 Java 字节码,运行时在 Java agent 中动态解密。
- 加密后运行方式不同:VME 加密后 jar包运行方式与未加密时一致,BCE 加密后运行时,需要配合使用 sjt_agent.jar。
- 加密方式不同:VME直接对 jar/war 包进行加密,BCE 需要把 jar/war 放到文件夹,然后把文件夹添加到 加壳工具中。
- VME 支持 Jar 包二次调用的加密场景,BCE 不支持此类场景保护。
- VME 支持 Jar 包打包成exe运行的加密场景,BCE 不支持此类场景保护
【注意】
- 暂不支持内嵌的 jar;
- 使用了 springframework 的 jar 包,不支持保护 org/springframework/boot/loader 下的 class, 仅支持核心 class 文件(如 BOOT-INF/classes 下的 class);
- 不支持的函数类型包括构造方法、析构方法、使用了反射的方法
#
界面加密流程#
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 包放在同一个目录里。
- 打开终端窗口,进入到“virboxprotector_con”所在的路径,直接输入“virboxprotector_con”运行可查看帮助信息;
可在 Virbox Protector 快捷方式上,鼠标右键 选择 打开文件所在位置,即可进入到“virboxprotector_con”所在的路径
- 加密 jar 执行命令如下:
virboxprotector_con <需要被保护的jar> -o <输出文件的jar>