Java程序混淆技术综述3000字符.doc_第1页
Java程序混淆技术综述3000字符.doc_第2页
Java程序混淆技术综述3000字符.doc_第3页
Java程序混淆技术综述3000字符.doc_第4页
Java程序混淆技术综述3000字符.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java程序混淆技术综述摘要:随着计算机网络的普及,大量计算机软件被开发出来,给人们的生活带来了很大的便利。同时,软件数据的机密性、可用性也成为了人们关注的焦点,其中主要的挑战就是软件的逆向工程及重组工程。本文主要针对基于Java的程序混淆技术在软件保护上的应用做了简单了论述。关键词:Java程序;混淆技术;软件保护 当今社会人们对于计算机及其软件的依赖越来越大,软件的安全问题也日益凸显,已经开始影响到人们的正常使用。其主要表现在:软件被逆向工程破解,造成机密信息的泄露,这也是市面上盗版商或破解软件横行的原因;软件信息被重组修改,一些应用软件的密钥或其它机密信息被篡改会给销售商带来巨大经济损失。本文主要对Java程序混淆技术的分类、原理、应用做了一些简单的阐述。一、Java程序混淆技术原理(一)混淆技术定义所谓程序混淆,就是在保持程序功能基本不变的前提下通过代码变换T将原始程序P混淆后变成新程序P1,混淆后的程序很难被反编码,这样就达到了保护软件的目的。其中要满足的条件有两个:P和P1在经过正常混淆转换终止后必须具有相同的输出;P输入出错终止或终止失败时,P1不一定终止。程序混淆的保护机制不是在于保护P1不受攻击,而是加大从P1恢复成P的时间,使攻击者攻击的代价超过其利益,恢复后的P可读性也非常差,以此来达到保护软件的作用。(二)混淆技术分类按混淆针对的对象不同,可以将混淆技术分为类内混淆和类间混淆两种。(1) 类内混淆类内混淆针对的对象是类文件的内部,如基于字节码的类内混淆主要的作用对象就是上述结构中的code字段。类内混淆的方式主要包括数据混淆、控制混淆、切片混淆及针对特定工具的混淆等。1、 数据混淆数据混淆是将程序中的常量、变量、数据这些基本组成元素修改或重新组合以增大逆向工程的难度和改变程序的可读性。如分列变量混淆就是数据混淆中的一种常见形式,它是将程序中必要的数据类型或结构拆分成变量组合来隐藏原始数据达到保护程序的效果。数据混淆主要包括有变量存储、编码混淆,变量聚合混淆,顺序混淆,词法混淆等。2、 控制混淆控制混淆的对象是程序传输的信息,对信息采取跟踪定位的实时监测,改变程序控制的复杂化从而抵御黑客袭击,保护程序。要注意的是,控制混淆并没有改变程序代码的计算方法。其类别主要有不可化简控制、并行化代码控制、聚合控制、顺序控制等技几种方式。3、 切片混淆程序切片指的是对程序语句、判断表达式造成影响的程序集合。切片混淆技术就是使这些程序切片包含更多的变量值,变得更难被理解,从而达到程序保护的目的。4、 针对特定工具的混淆这类混淆方式与前三种方式不同,其针对的对象是自动化的反混淆、反编译工具。其主要作用机制是在程序中形成数据依赖,增加反混淆、反编译工具的自动化分析难度,使反编译动作不能自动完成。伪造数据越复杂,反编译效果越好。4种方式可以综合使用提高鲁棒性,提高软件安全性。(2)类间混淆 类间混淆针对的对象是多种类文件的综合体,主要分为合并、拆分、隐藏三种方式。1、类合并类合并是将类文件中包含的变量或函数进行合并,根据程序功能需要重命名这些合并后的变量或函数标识符。其合并原则有:对标识符相同的变量或非构造函数,其新标识符不能重复对类文件中标识符及参数都相同的构造函数,其标识符不能更改,但合并后需伪造一个参数加入其中函数中对有顺序的类文件,合并中要增加一个布尔型的私有变量来区分标识符相同的函数。2、类拆分 类拆分首先要判断类文件中程序的可拆分性,了解清楚类内部待拆分函数之间的继承和调用关系。确定拆分对象后,要保证拆分后的其中一个子类中完整继承了原始类的每个方法和变量,以使拆分前类的要素都能够实现。3、类隐藏类型隐藏的主要功能部位是接口,通过Java中的这些接口混淆类文件中的变量和方法,原来类的功能没有发生改变但是已经实现了这些接口,每个接口只随机含有一个待隐藏类中公开的方法的子集。为了加大自动反编译、混淆的困难,引入的接口可以设置同时为几个类运行。和类拆分一样,类隐藏的混淆方式对程序运行时间的影响都较小。2、 混淆技术的算法及其攻击模式(一)混淆技术的算法下面是几种典型的混淆技术算法:(1) 标识符重命名混淆算法这种算法的基本原理是利用一些简单无意义的名字代替字节码文件中的类名、接口名、字段名和方法名。这些无意义、随意性的标识符会打乱攻击者的反混淆、反编译动作。因为原始标识符的信息在重命名后已经完全消失,攻击者无法还原原始标识符。这样即使经过反编译,程序文件也不可读了。(2) 重载无关联方法算法这种混淆算法的依据是扩展转换和方法重载。扩展转换指的是经过编译转换后的新类型T中变量的范围比原来的类型S范围大,但二者具有相同处理方法。因此可以通过对相同的标识符重命名或是采用同一名字命名不同的参数类型、个数的方法来实现保护程序的目的。(3) 非法标识符替换算法Java语言的标识符有严格的规范,必须以字母、数字或下划线开头,而且不能是已经定义好的关键字。利用这种限制,如果将常量中的名字用这些非法的字符代替就可以实现程序混淆的目的,这样在攻击者反编译、反混淆的过程中会出现非法标识符的编译错误,达到保护程序的目的。(4) 重写静态方法算法Java的语言规范规定,超类与子类之间的静态、实体方法是不能互相重写的,但是Java字节码没有这种限制,因此我们可以利用Java虚拟机重写调用它们任意一个,这样反编译后的实体方法会被静态方法重写混淆,源代码也因此发生扭曲变化,达到保护源程序的目的。(2) 混淆算法的攻击模式(1)针对数据混淆的攻击虽然改变源文件中的数据后,黑客对其进行的反混淆、反编译攻击不能使其恢复源程序的原貌,但是根据一些关键系统名称、关键模块含义的推测很有可能会使得攻击者还原整个程序的功能。例如基于字节码的标识符修正反混淆攻击方法就可以大致解决标识符的重命名混淆算法。(2) 针对控制混淆的攻击针对控制混淆的攻击方法有很多,主要有动态分析法、静态动态结合分析法、黑盒测试、抽象栈图等攻击方法。若变换生成的程序中存在始终不执行的分支,利用动态分析很快就能掌握程序中的信息;黑盒测试是分别测试各个类文件、函数的功能推测出整体程序的功能;抽象栈图是通过检测混淆后程序之间继承、调用关系破解控制混淆的攻击方法。这类方法的缺点也很明显,比较耗时且自动化程度不强。3、 Java程序混淆技术的应用 目前Java程序混淆技术主要应用在以下领域:(一)分布式计算和软件保护这类分布式的网络计算软件在市面上的盗版现象很严重,在相当程度上阻碍了计算机软件的发展。通过混淆技术,能在保持软件功能不变的前提下增加逆向工程的难度,增大盗版的成本,从而有效制止大量的盗版现象。(2) 算法保护和DRM对算法中代码的混淆能够有效防治对计算软件中密钥和其他关键信息的非法修改。DRM技术的安全性主要靠关键数据的保护实现,而上文提到的标识符重命名混淆技术就是保护关键数据的一个合适的混淆技术方法。(3) 抗病毒技术先进主要的抗病毒、杀毒方法就是模式匹配,在病毒代码中如果也使用混淆技术,就会产生更复杂、危害更大的病毒,从而威胁网络安全。结束语混淆技术是目前保护Java程序最有效的方法之一,目前在控制流混淆技术上已经取得了一些显著成就,但在数据混淆技术上研究还不是很深入,各种混淆算法的复杂度和抗攻击性也不是很高,这需要研究者对其更深的研究开发,为今后Java软件程序的保护作出更大的贡献。参考文献:1王建民,余志伟,王朝坤等.Java程序混淆技术综述J.计算机学报,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论