Java防止反编译的一种解决方案
一、使用ProGuard对代码进行混淆
1 下载并启动ProGuard代码混淆器
2 Input/output中选择要加密的Jar文件,并导入该项目使用的Jar
3 设置混淆参数选项
4 保存混淆配置
5 重新启动ProGuard载入保存的配置文件
6 混淆成功
7 使用JD-gui反编译软件进行混淆前后对比
结论:使用代码混淆仅增加了程序理解的难度,程序的逻辑及流程仍然清晰可见,(但可以将函数名、参数名、设置的更凌乱一些,进一步增加阅读难度)。
二、使用Excelsior JET将java可执行程序转化为C++可执行程序
1 安装并启动Excelsior JET
2 发布运行
3 再系统盘内找不到该程序运行的jar文件,通过查壳工具PEID查看该可执行文件,未加密
4 通过静态反汇编工具OD查看该文件汇编代码
至此,对该java项目的****的难度同C++写的程序一样困难,较难以得到程序的源代码。在此操作之上还可以进一步采取手段阻挠对源代码的****,如下所示的加壳操作。
三、使用VMProtect等工具对.exe文件进行加壳保护
1 使用VMProtect工具对该程序加壳
2 在使用VirboxProtector增加第二层保护壳时弹出如下提醒
猜测是VMProtect已经进行了虚拟化保护,在使用同样机制的VirboxProtector加密后出现了一些问题。
3 在使用UPX加壳软件增加第二层保护壳时同样提醒出现了错误
这表明已经成功的对该软件增加了VMP保护壳,软件的安全性得到了进一步的提升。