文档章节

常见的保护JAVA代码的方式有哪些?

刀龙郎456
 刀龙郎456
发布于 2017/09/06 16:56
字数 1729
阅读 19
收藏 1

 在java代码中往往包含着一些非常敏感的信息,有些关系到开发者的利益,有些可能因为使用环境不同而关系到软件用户的利益,于是,java程序是赤膊上阵还是全副武装这个现实问题就摆在了java开发人员的面前,所以在这种情况下,从开发商和用户两方面角度考虑,都非常有必要对java程序进行保护。以下从技术角度就常见的保护措施和常用工具来看看如何有效保护java代码:

  将java包装成exe

  特点:将jar包装成可执行文件,便于使用,但对java程序没有任何保护。

  不要以为生成了exe就和普通可执行文件效果一样了。这些包装成exe的程序运行时都会将jar文件释放到临时目录,很容易获取。

  常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe运行时临时目录在exe所在目录中或是用户临时目录 中;exe4j生成的exe运行时临时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开,然后用zip格式修复成一个jar文 件,就得到了原文件。如果只是为了使用和发布方便,不需要保护java代码,使用这些工具是很好的选择。

  java混淆器

  特点:使用一种或多种处理方式将class文件、java源代码进行混淆处理后生成新的class,使混淆后的代码不易被反编译,而反编译后的代码难以阅 读和理解。

  这类混淆器工具很多,而且也很有成效。

  缺点:虽然混淆的代码反编译后不易读懂,但对于有经验的人或是多花些时间,还是能找到或计算出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能 混淆的,往往一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆。

  隔离java程序到服务端

  特点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。

  这种方式在客户/服务模式的应用中能较好地保护java代码。

  缺点是:必须是客户/服务模式,这种特点限制了此种方式的使用范围;客户端因为逻辑的暴露始终是较为薄弱的环节,所以访问接口时一般都需要安全性认证。

  java加密保护

  特点:自定义ClassLoader,将class文件和相关文件加密,运行时由此ClassLoader解密相关文件并装载类,要起到保护作用必须自定 义本地代码执行器将自定义ClassLoader和加密解密的相关类和配套文件也保护起来。

  此种方式能很有效地保护java代码。

  缺点:可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码。

  jar2exe属于这类工具。

  提前编译技术(AOT)

  特点:将java代码静态编译成本地机器码,脱离通用JRE。

  此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。

  具有代表性的是GNU的gcj,可以做到对java代码完全提前编译,但gcj存在诸多局限性,如:对JRE 5不能完整支持、不支持JRE 6及以后的版本。

  由于java平台的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这类工具往往采取灵活方式,该用即时编译的地方还是 要用,成为提前编译和即时编译的混合体。

  缺点:由于与通用JRE的差异和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;只能使用此种工具提供的一个运行环境,如果 工具更新滞后或你需要特定版本的JRE,有可能得不到此种工具的支持。

  Excelsior JET属于这类工具。

  使用jni方式保护

  特点:将敏感的方法和数据通过jni方式处理。

  此种方式和“隔离java程序到服务端”有些类似,可以看作把需要保护的代码和数据“隔离”到动态库中,不同的是可以在单机程序中运用。

  缺点和上述“隔离java程序到服务端”类似。

  不脱离JRE的综合方式保护

  特点:非提前编译,不脱离JRE,采用多种软保护方式,从多方面防止java程序被窃取。

  此种方式由于采取了多种保护措施,比如自定义执行器和装载器、加密、JNI、安全性检测、生成可执行文件等等,使保护力度大大增强,同样能够非常有效地保 护java代码。

  缺点:由于jar文件存在方式的改变和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;很有可能并不支持所有的JRE版本。

  JXMaker属于此类工具。

  用加密锁硬件保护

  特点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的 受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。

  此种方式与以上“不脱离JRE的综合方式保护”相似,只是使用了专用硬件设备,也能很好地保护java代码。

  缺点:有人认为加密锁用户使用上不太方便,且每个安装需要附带一个。

  从以上描述中我们可以看出:

  各种保护方式都有其优缺点,应根据实际选用

  要更好地保护java代码应该使用综合的保护措施

  单机环境中要真正有效保护java代码,必须要有本地代码程序配合

  当然,安全都是相对的,一方面看你的保护措施和使用的工具能达到的程度,一方面看黑客的意愿和能力,不能只从技术上保护知识产权。总之,在java 代码保护方面可以采取各种可能的方式,不可拘泥于那些条条框框。(文章转载自IT专家网)

 

© 著作权归作者所有

刀龙郎456
粉丝 0
博文 9
码字总数 5250
作品 0
合肥
私信 提问
加载中

评论(1)

刀龙郎456
刀龙郎456 博主
嘿嘿,大家看看
Java虚拟机标准(第10版)第一章(节选)翻译与评注

英文原文链接:https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-1.html 评注是括在鱼尾号之间的文字,其余均为翻译 Java虚拟机是Java平台的基石,这种技术实现了诸如跨平台、生成...

Jelif
2018/06/03
0
0
32、如何写出安全的Java代码?

在上一讲中,我们已经初步接触了 Java 安全,今天我们将一起探讨更多 Java 开发中可能影响到安全的场合。很多安全问题,在特定的上下文,存在着不同的定义,尽管本质是相似或一致的,这是由于...

qq541005640
01/08
0
0
初探设计:Java继承何时用?怎么用?

Writer :BYSocket(泥沙砖瓦浆木匠) 一、回顾继承 常见的如下: 1、依赖(”uses-a“) 2、聚合(”has-a“) 3、继承(”is-a“)类之间关系 也就是UML类图中常见的三种关系,另外常见的还...

泥沙砖瓦浆木匠
2015/11/12
209
2
利用 Java dump 进行 JVM 故障诊断

引言 对于大型 java 应用程序来说,再精细的测试都难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。...

candies
2014/03/03
415
0
尝试Java,从入门到Kotlin

之前一直使用C#开发,最近由于眼馋Java生态环境,并借着工作服务化改造的契机,直接将新项目的开发都转到Java上去。积攒些Java开发经验,应该对.NET开发也会有所启发和益处。 欢迎工作一到八...

编程SHA
2018/12/03
27
1

没有更多内容

加载失败,请刷新页面

加载更多

Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
36分钟前
5
0
Spring Security 实战干货:必须掌握的一些内置 Filter

1. 前言 上一文我们使用 Spring Security 实现了各种登录聚合的场面。其中我们是通过在 UsernamePasswordAuthenticationFilter 之前一个自定义的过滤器实现的。我怎么知道自定义过滤器要加在...

码农小胖哥
39分钟前
7
0
常见分布式事务解决方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源...

asdf08442a
40分钟前
3
0
influxdb continuous queries(cq)从入门到放弃

从前一篇influxdb的文章prometheus基于influxdb的监控数据持久化存储方案完成之后,就一直在折腾influxdb发布测试和生产环境的问题,经过接近2个月的验证,最终发现使用influxdb自带cq的方案...

狗陈
51分钟前
7
0
7.线程通信

在现实生活中,如果一个人团队正在共同完成任务,那么他们之间应该有通信,以便正确完成任务。 同样的比喻也适用于线程。 在编程中,要减少处理器的理想时间,我们创建了多个线程,并为每个线...

Eappo_Geng
57分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部