在java代码中往往包含着一 些非常敏感的信息,有些关系到开发者的利益,有些可能因为使用环境不同而关系到软件用户的利益,于是,java程序是赤膊上阵还是全副武装这个现实问题就 摆在了java开发人员的面前,所以在这种情况下,从开发商和用户两方面角度考虑,都非常有必要对java程序进行保护。以下从技术角度就常见的保护措施 和常用工具来看看如何有效保护java代码:
1.将java包装成exe
特点:将jar包装成可执行文件,便于使用,但对java程序没有任何保护。
不要以为生成了exe就和普通可执行文件效果一样了。这些包装成exe的程序运行时都会将jar文件释放到临时目录,很容易获取。
常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe运行时临时目录在exe所在目录中或是用户临时目录 中;exe4j生成的exe运行时临时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开,然后用zip格式修复成一个jar文 件,就得到了原文件。如果只是为了使用和发布方便,不需要保护java代码,使用这些工具是很好的选择。
2.java混淆器
特点:使用一种或多种处理方式将class文件、java源代码进行混淆处理后生成新的class,使混淆后的代码不易被反编译,而反编译后的代码难以阅 读和理解。
这类混淆器工具很多,而且也很有成效。
缺点:虽然混淆的代码反编译后不易读懂,但对于有经验的人或是多花些时间,还是能找到或计算出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能混淆的,往往一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆。
3.隔离java程序到服务端
特点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。
这种方式在客户/服务模式的应用中能较好地保护java代码。
缺点是:必须是客户/服务模式,这种特点限制了此种方式的使用范围;客户端因为逻辑的暴露始终是较为薄弱的环节,所以访问接口时一般都需要安全性认证。
4.java加密保护
特点:自定义ClassLoader,将class文件和相关文件加密,运行时由此ClassLoader解密相关文件并装载类,要起到保护作用必须自定 义本地代码执行器将自定义ClassLoader和加密解密的相关类和配套文件也保护起来。
此种方式能很有效地保护java代码。
缺点:可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码。
jar2exe属于这类工具。
5.提前编译技术(AOT)
特点:将java代码静态编译成本地机器码,脱离通用JRE。
此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。
具有代表性的是GNU的gcj,可以做到对java代码完全提前编译,但gcj存在诸多局限性,如:对JRE 5不能完整支持、不支持JRE 6及以后的版本。
由于java平台的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这类工具往往采取灵活方式,该用即时编译的地方还是 要用,成为提前编译和即时编译的混合体。
缺点:由于与通用JRE的差异和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;只能使用此种工具提供的一个运行环境,如果工具更新滞后或你需要特定版本的JRE,有可能得不到此种工具的支持。
Excelsior JET属于这类工具。
6.使用jni方式保护
特点:将敏感的方法和数据通过jni方式处理。
此种方式和“隔离java程序到服务端”有些类似,可以看作把需要保护的代码和数据“隔离”到动态库中,不同的是可以在单机程序中运用。
缺点和上述“隔离java程序到服务端”类似。
7.不脱离JRE的综合方式保护
特点:非提前编译,不脱离JRE,采用多种软保护方式,从多方面防止java程序被窃取。
此种方式由于采取了多种保护措施,比如自定义执行器和装载器、加密、JNI、安全性检测、生成可执行文件等等,使保护力度大大增强,同样能够非常有效地保护java代码。
缺点:由于jar文件存在方式的改变和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;很有可能并不支持所有的JRE版本。
JXMaker属于此类工具。
8.用加密锁硬件保护
特点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的 受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。
此种方式与以上“不脱离JRE的综合方式保护”相似,只是使用了专用硬件设备,也能很好地保护java代码。
缺点:有人认为加密锁用户使用上不太方便,且每个安装需要附带一个。
从以上描述中我们可以看出:
1.各种保护方式都有其优缺点,应根据实际选用
2.要更好地保护java代码应该使用综合的保护措施
3.单机环境中要真正有效保护java代码,必须要有本地代码程序配合
当然,安全都是相对的,一方面看你的保护措施和使用的工具能达到的程度,一方面看黑客的意愿和能力,不能只从技术上保护知识产权。总之,在java代码保护方面可以采取各种可能的方式,不可拘泥于那些条条框框。
相关推荐
"Java代码保护,防止反编译" 本文讨论了Java程序的保护方法,以防止反编译和盗版。由于Java语言的特点,使得反编译变得非常容易。因此,保护Java程序变得非常重要。本文首先讨论了保护Java程序的基本方法,然后对...
Java代码和Smali代码是两种不同的编程语言,它们在Android应用开发中扮演着不同角色。Java是高级语言,而Smali是Dalvik虚拟机(DVM)的汇编语言,通常用于逆向工程和安全分析。这个“Java代码直接转化成Smali代码...
利用DES加密算法保护Java源代码利用DES加密算法保护Java源代码
### 运用加密技术保护Java源代码 在现代软件开发中,保护源代码的安全性尤为重要。对于使用Java语言编写的程序来说,确保源代码不被非法访问或篡改是至关重要的。本文将详细介绍如何通过加密技术来保护Java源代码,...
Java代码审查表重要性激活级别检查项结论总计命名重要性规则 一、代码命名规则 Java代码审查表中关于命名规则的重要性激活级别检查项有: * 命名规则是否与所采用的规范保持一致?(重要20) * 变量是否已经在...
因此,运用加密技术保护Java源代码成为了一项重要的课题。 ### Java源代码加密的重要性 Java源代码加密主要涉及两个层面:一是源代码本身的安全,二是编译后的字节码(.class文件)的安全。对于源代码,加密可以...
而将Java代码整理后存入有道云笔记的过程,既可以帮助开发者整理学习和工作中的代码,也能便于和其他开发者分享交流。 在这个过程中,首先需要使用一个能够处理和格式化代码的工具,如在线代码高亮工具,它能够将...
Java代码混淆器是一种用于保护Java源代码安全的技术,通过让源代码变得难以理解和反编译,从而达到防止源代码泄露和被恶意利用的目的。在目前Java字节码反编译变得十分容易的背景下,源代码的混淆显得尤为重要。 ...
Jockey跟其他混淆工具不同的是:它是直接对编译过程做文章,也就是在把java文件编译为class文件的过程中对代码进行混淆,混淆后的代码中包含很多JVM 指令,大家知道JVM指令是面向机器的,人类一般很难看懂!...
Java代码生成数字证书涉及到几个关键概念和技术,包括Java的密钥和证书管理、RSA加密算法以及非交互式证书创建。在此,我们将深入探讨这些主题,以便理解如何在Java环境中生成和使用数字证书。 1. **数字证书**:...
标题中的“将jar包转成.java的源码的工具”是指一种可以反编译Java字节码(.class文件)并将其转换为源代码(.java文件)的软件工具。在Java开发中,有时我们需要查看或理解已编译的jar包内部的工作原理,这种工具就...
Jocky是一款专为Java开发者设计的混淆编译器,它的主要目标是保护Java代码不被轻易反编译,以确保软件的知识产权。Java源代码(.java文件)编译成.class文件后,由于其字节码的可读性,容易被反编译工具如Jad还原为...
java代码-使用java解决读取U盘信息的源代码 ——学习参考资料:仅用于个人学习使用!
【Jocky混淆JAVA代码(保护你的JAVA项目).pdf】主要介绍了Jocky这款Java代码混淆工具,旨在保护Java项目的源代码,防止反编译。混淆编译的主要目的是打乱类文件中的符号信息,使反向工程变得困难,从而保护知识产权。...
Java代码混淆是一种安全措施,主要用于保护Java应用程序的源代码不被未经授权的人员逆向工程解析。Allatori就是一款专门用于Java代码混淆的工具,它能够将可读性强的Java字节码转换为难以理解的形式,以此增加逆向...
在这个场景中,我们关注的是一个特别的Java应用程序,它实现了"代码雨"效果,也就是在屏幕上模拟代码从上至下不断滚动的视觉特效。这种效果通常在电影或电视中用来表现程序员工作的紧张氛围,或者被用作电脑屏幕保护...
总的来说,清除Java代码注释可以通过多种方式实现,包括使用IDE如MyEclipse的内置功能,编写自定义的注解处理器,或是利用第三方工具。每种方法都有其适用场景,开发者可以根据自身需求和技能水平选择最合适的途径。...
Java代码混淆器ProGuard是Java开发中用于保护和优化应用程序的重要工具。它的主要功能是对Java字节码进行混淆,使得代码难以被逆向工程解析,从而提高代码的安全性。混淆过程中,函数变量、类和方法名会被重命名为...