Java 开发语言以其安全性高、代码优化、跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。特别是近年来大数据、互联网+、云计算技术的不断发展,Java 开发语言更具有不可替代的地位。
不过,Java 最突出的跨平台优势使其要以中间代码的形式运行在虚拟机环境中,因此 Java 代码反编译要比其他开发语言更容易实现,并且反编译的代码经过优化后几乎可与源代码相媲美。为了避免出这种情况,保护软件知识产权,有一种叫做 Java 混淆器的工具被开发出来。
但 Java 混淆器的作用是对编译好的代码进行混淆,使得反编译后的代码混乱难懂,真正起的作用只是增加了逆向工程的难度,最终结果也是治标不治本,对于一些掌握工具的人来说几乎还是透明的。另外由于 Java 程序中会有多重映射关系,因此大多数混淆工具的兼容性会很差。
推荐一种加壳工具保护jar包的方式—Virbox Protector
目前有两个版本可选择。
第一个是带许可版本,加壳时与许可绑定,加密后的软件需要有许可授权才能打开使用。
第二个是独立版加壳,只做加壳的处理,加密后的软件直接可交付使用。
下面是独立版Virbox Protector加壳工具对jar包的加密流程。
1、部署项目并启动服务
项目放在 webapps 目录下,先启动 tomcat 服务确认能正常启动,启动过后该 War 包会自动解压出一个同名的文件夹
![1240](https://upload-images.jianshu.io/upload_images/4609696-6b85c8a97bbad27f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
启动 tomcat 服务
![1240](https://upload-images.jianshu.io/upload_images/4609696-978717b6638e226b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
找到依赖的解释器
服务启动成功后,进入任务管理器-服务-找到目前运行项目所依赖的 jdk , 进入目录找到对应程序 进行加密。 如下图
![1240](https://upload-images.jianshu.io/upload_images/4609696-b97b5a57bcae449a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
2、对.jar或者.class文件进行加密
①首先对安装环境 jdk 路径下的 java.exe 进行加密,将 java.exe 拖入到加壳工具Virbox Protector Standalone中。
![1240](https://upload-images.jianshu.io/upload_images/4609696-e5ba8021ace1409a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
②在加密选项页面将插件的ds按钮打开。
![1240](https://upload-images.jianshu.io/upload_images/4609696-e6a83190e47c5e5a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
③点击“立即加壳”,加壳后会额外生成图示两个文件。
![1240](https://upload-images.jianshu.io/upload_images/4609696-24a9ef96d6e1ba5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
java.exe.ssp 是配置文件,在后面对 .class/.jar加密时会用到;java.ssp.exe 是加壳后的 java.exe 文件,将 java.exe 剪切到其他文件夹备份,java.ssp.exe 名字改为java.exe 即可。
④打开“DSProtector.exe”对 .class/.jar进行保护。
![1240](https://upload-images.jianshu.io/upload_images/4609696-110b262f729b6ae4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
添加上一步加密 java.exe 生成的 java.exe.ssp 文件。
![1240](https://upload-images.jianshu.io/upload_images/4609696-a7c3a2a6394dcfe7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
添加要加密的.class/.jar文件。
![1240](https://upload-images.jianshu.io/upload_images/4609696-bb21e87b1a69c667.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
![1240](https://upload-images.jianshu.io/upload_images/4609696-d8028490a28a32bd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240&x-oss-process=image/resize,w_1400/format,webp)
点击“保护它”,加密成功。