Java 程序的安全问题
Java class 文件中包含了类、方法、成员信息以及调试信息,编译生成的 jvm 字节码与这些信息关联,反编译后几乎与源代码相同。
Java 程序一但对外发布,相当于开放源代码,一些程序包含了开发者知识产权的重要信息,泄露后可能会给开发者造成损失。
几种保护技术对比
对 Java 程序的保护,有以下几种方式:
保护方式 | 描述 | 优点 | 缺点 |
---|---|---|---|
名称混淆 | 将 Java class 中的类名方法名替换为无意义字符,增加逆向分析难度。 | 混淆效果较明显 无性能损失 不改变运行环境 可以和其它保护方式配合使用,达到更佳效果 | 需要和代码逻辑的保护方式配合使用 需要用户自己配置白名单,否则无法达到很好的混淆效果。 |
文件级加密 | 将 jar 或 class 文件加密,修改 java 解释器,在加载时解密 | 性能损失小 无法被直接反编译 | 需要修改或环境运行环境 无法被其它 Java 项目引用 可以在内存中截取出明文 |
方法加密 | 加密 Java 字节码,使用 Java Agent 技术或重写 class loader,运行时对方法解密 | 性能损失小 无法直接反编译出方法中的代码逻辑 | 需要修改或环境运行环境 无法被其它 Java 项目引用 可以被 arthas 或 sa-jdi 等工具导出 class 文件 |
代码混淆 | 将 Java 方法转换为更复杂难懂的代码,提高逆向分析难度。 | 无法被工具直接还原 无需修改或配置运行环境 可以被其它 Java 项目引用 | 有一定的性能损失 无法应对专业逆向分析 |
代码虚拟化 | 将 Java 方法中的 JVM 字节码转换为自定义虚拟机指令,运行时跳转到 Native 虚拟机中执行。 | 安全性极高,无法被任何工具还原,逆向分析难度极高 无需修改或配置运行环境 可以被其它 Java 项目引用 | 有一定的性能损失 |
Virbox Protector 的 Java 保护方案
为应对不同场景的需求,Virbox Protector 提供了两种保护方式,Java BCE 以及 Java VME,分别使用了方法加密和代码虚拟化的保护方式。
Java BCE
技术原理
加密 Class 文件中每个方法的 Java 字节码,运行时在 Java agent 中动态解密。
Java VME
技术原理
不同于简单的加密壳,Virbox Protector Java VME 保护技术是将 Java 方法的字节码转换为自定义的虚拟机字节码,并将其替换为跳转代码,运行时跳转至自定义虚拟机中解释执行。
对外发布的 Jar SDK,要求第三方可以引用,且不需要额外的配置,因此需要 Java VME 的方式保护。
保护步骤:
- 直接用 Virbox Protector 打开要保护的 JAR 包。
- 在 “函数选项” 选择重点保护的类或方法,右键选择“代码虚拟化”,然后“确定”。
- 点击保护生成保护后的 Jar 包。
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://typecho.firshare.cn/archives/614.html
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。避免网络欺诈,本站不倡导任何交易行为。如您私自与本站转载自公开互联网中的资讯内容中提及到的个人或平台产生交易,则需自行承担后果。本站在注明来源的前提下推荐原文至此,仅作为优良公众、公开信息分享阅读,不进行商业发布、发表及从事营利性活动。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。