目前关于JAVA程序的加密方式不外乎JAVA模糊处理(Obfuscator)和运用 ClassLoader方法进行加密处理这两种方式(其他的方式亦有,但大多是这两种的延伸和变异)。这两种方式不管给JAVA反编译器造成多少困难, 毕竟还是有迹可寻,有机可乘的。本文介绍的方法是对ClassLoader方式加密处理的一种改进,使之达到传统二进制程序代码安全。
第一章 流行的加密方式简介
关于JAVA程序的加密方式,一直以来都是以JAVA模糊处理(Obfuscator)为主。这方面的研究结果也颇多,既有模糊器(如现在大名鼎鼎的JODE),也有针对反编译器的"ZT"(如针对反编译工具Mocha的 "ZT" Crema和HoseMocha)。模糊器,从其字面上,我们就可以知道它是通过模糊处理JAVA代码,具体的说,就是更换变量名,函数名,甚至类名等方法使其反编译出来的代码变得不可理解。举个例子来说吧。
先将将下面源代码编译成class文件。
public class test
{
int sortway;
void sort(Vector a)
{
……
}
void setSortWay(int way)
{
……
}
void sort(Vector a, int way)
{
……
}
}
后通过JODE进行模糊处理后,反编译过来后, 可能变成下列代码。
public class OoOoooOo0Oo0O
{
int OoOo0oOo0Oo0O;
void OoO0ooOo0Oo0O (Vector OoOoo0Oo0OoOO)
{
……
}
void OoOo00oOoOo0O (int Oo0oooOo0Oo0O)
{
……
}
void OoO0ooOo0Oo0O (Vector OoOoo0Oo0OoOO, int Oo0oooOo0Oo0O)
{
OoOo00oOoOo0O (Oo0oooOo0Oo0O);
OoO0ooOo0Oo0O (OoOoo0Oo0OoOO);
}
}
其实这只是做到了视觉上的处理,其业务逻辑却依然不变,加以耐心,仍是可以攻破的,如果用在用户身份验证等目的上,完全可以找到身份验证算法而加以突破限制。
而所谓的"ZD"是针对反编译工具本身的缺陷,这种方法对于特定的反编译工具是非常有效的,然而到目前为止,还没有一个全能型的,对每一种反编译工具皆有效,其局限性是明显的!
另一种方法是采用ClassLoader加密。JAVA虚拟机通过一个称为ClassLoader的对象装来载类文件的字节码,而 ClassLoader是可以由JAVA程序自己来定制的。ClassLoader是如何装载类的呢?ClassLoader根据类名在jar包中找到该类的文件,读取文件,并把它转换成一个Class对象。该方法的原理就是,对需加密的类文件我们先行采用一定的方法(可以是PGP, RSA, MD5等方法)进行加密处理,我们可以在读取文件之后,进行解密后,再转换成一个Class对象。
关于ClassLoader工作方式的详细介绍就不在此一一述说了,前面已有文章专题讨论了。
有没有发现,该方法并未解决ClassLoader本身的安全性? 显然,只要反编译了该ClassLoader类,就可以顺藤摸瓜找到其它的类了。可见ClassLoader本身"明码"方式仍然造成一定的不安全性,然而,如果该方法解决了ClassLoader本身的安全性,其不失为一个比较好安全方案。
分享到:
相关推荐
很容易被反编译工具反编译,而传统的java源代码保护方法基本都是采用混淆的方式, 但这样会带来很多麻烦,而且也不能真正保护class文件, 本工具是对class文件进行加密,采用jni的方式解密运行, 加密算法达到256位...
很容易被反编译工具反编译,而传统的java源代码保护方法基本都是采用混淆的方式, 但这样会带来很多麻烦,而且也不能真正保护class文件, 本工具是对class文件进行加密,采用jni的方式解密运行, 加密算法达到256位...
混淆器,顾名思义,就是通过模糊处理Java代码,具体地说,就是更换变量名、函数名、类名等方法使其反编译出来的代码变得难以理解。其 实这只是做到了视觉上的欺骗处理,其程序逻辑却依然不变,只要有耐心,仍是可以...
目前,主要有两种流行的JAVA源代码保护方法:JAVA模糊处理(Obfuscation)和修改ClassLoader的加密方式。这些方法虽然提供了一定的安全保障,但也存在一定的局限性和安全隐患。 ##### JAVA模糊处理(Obfuscator) ...
很容易被反编译工具反编译,而传统的java源代码保护方法基本都是采用混淆的方式, 但这样会带来很多麻烦,而且也不能真正保护class文件, 本工具是对class文件进行加密,采用jni的方式解密运行, 加密算法达到256...
这些方法包括本地编译技术、代码隔离技术、代码混淆技术、数字水印技术和ClassLoader加密技术等。但是,这些方法都存在局限性。 本地编译技术是一种将Java应用程序编译成本地应用程序的方法,该方法应用于Java软件...
java编译后的class文件是一种中间字节字文件,很容易被反编译工具反编译,而传统的java源代码保护方法基本都是采用混淆的方式,但这样会带来很多麻烦,而且也不能真正保护class文件,本工具是对class文件进行加密,...
在Java 1.2及后续版本中,ClassLoader系统进行了改进,引入了双亲委派模型,即新的类加载请求首先会委托给父ClassLoader尝试加载,只有在父ClassLoader无法加载时,才会尝试自己加载。这样做提高了安全性,避免了类...
1. **继承`java.lang.ClassLoader`类**:创建一个新的类,该类继承自`java.lang.ClassLoader`。 2. **重写`findClass`方法**:在这个方法中,实现如何从特定位置加载类文件。 3. **处理字节码**:加载类文件后,需要...
为解决这一问题,Java开发者采取了多种保护措施,如重载类文件加载器技术和代码混淆技术。 1. 重载类文件加载器技术:Java 类文件加载器是Java虚拟机(JVM)的一部分,负责将类文件加载到内存中以便执行。通过重载...
4. **安全管理**:Java 1.6增强了安全特性,包括改进的证书处理、更强的加密算法支持以及更严格的沙箱模型,保护系统免受恶意代码的侵害。 5. **NIO.2**:Java 1.6引入了NIO.2,即New IO 2.0,增加了对异步I/O的...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
### Java后端技术面试基础汇总 #### 一、Java基础知识 **1.1 Java基础** - **面向对象的特征:** - 继承:子类可以继承父类的属性和方法。 - 封装:将数据和行为封装在一起,提高数据安全性。 - 多态:同一...
- **SSL加密**:保护数据传输安全。 - **代码安全性**:避免SQL注入、XSS攻击等。 #### 2. MVC模式简介 - **MVC (Model-View-Controller)**:一种常用的设计模式,将应用程序分为模型、视图、控制器三个部分。 ##...
##### 4.1.6 Java8的ConcurrentHashMap改进 - **改进原因**:放弃分段锁是因为在高并发情况下锁粒度过大。 - **替代方案**:使用CAS和Synchronized关键字来减少锁的使用。 ##### 4.1.7 有序Map实现 - **有序Map**:...
开源,作为一种开放源代码、鼓励协作的开发模式,使得Core Java的相关知识得以广泛传播和持续改进。本文将围绕“coreJava-开源”这一主题,通过分析“classloaderDemo.jar”这个压缩包中的文件,来探讨Core Java的...
超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...
360加固保是一款针对安卓应用的加固工具,通过混淆代码、资源加密、防逆向等多种手段,提高应用的抗破解能力,保护开发者权益。它通过对应用进行深度加密和优化,使得黑客难以通过常规手段进行反编译和调试。 3. ...