24小时论文定制热线

热门毕设:土木工程工程造价桥梁工程计算机javaasp机械机械手夹具单片机工厂供电采矿工程
您当前的位置:论文定制 > 毕业设计论文 >
快速导航
毕业论文定制
关于我们
我们是一家专业提供高质量代做毕业设计的网站。2002年成立至今为众多客户提供大量毕业设计、论文定制等服务,赢得众多客户好评,因为专注,所以专业。写作老师大部分由全国211/958等高校的博士及硕士生设计,执笔,目前已为5000余位客户解决了论文写作的难题。 秉承以用户为中心,为用户创造价值的理念,我站拥有无缝对接的售后服务体系,代做毕业设计完成后有专业的老师进行一对一修改与完善,对有答辩需求的同学进行一对一的辅导,为你顺利毕业保驾护航
代做毕业设计
常见问题

Java应用软件安全加固方法

添加时间:2018/09/19 来源:北京邮电大学 作者:刘伟伟
本文重点对CLASS文件中尚未被前人有效保护的残余重要信息进行分析研宄工作,其中存在于每个方法的参数类型信息就有可能成为逆向工程人员简化指令猜测攻击的突破口。
以下为本篇论文正文:

摘要

  随着Java应用软件数量的日益递增,针对Java应用软件的逆向工程技术也是层出不穷。因此,如何对Java应用软件进行有效的安全加固也成为研宂热点问题。尽管己经有很多Java应用软件的安全加固方案被提出,但是在CLASS字节码文件中仍然存在着大量可以被逆向工程所利用的信息。在这些信息中,方法之间相互调用所需要的参数信息就有可能成为一大安全隐患,逆向工程人员可以凭借于此实现对关键方法的快速定位,进而简化指令猜测攻击,大大降低了逆向工程的复杂度。

  本文针对上述安全问题展开分析研究工作,设计了一种新的隐藏方法描述符的途径,通过消除对方法的快速定位,有效增加了指令猜测攻击的难度,并在此基础上按不同需求分别提出了统一方法描述符混淆算法和归并方法集合混淆算法。这两种算法在原则上只隐藏方法间传递的类型信息,不会对程序原有的逻辑产生任何影响,生成后的代码可以直接在相应版本的JVM (Java虚拟机)上运行,无需借助额外任何代码或工具。

  为了验证方案的可行性,本文进行了系统实现,使用了 9个现实世界的Java应用软件作为混淆测试用例,并分别在混淆前后采集了应用程序的性能和占用空间指标,依次进行对比。除此之外,本文还从软件工程的角度对两种混淆方案的混淆强度进行了计算,实验结果表明本文提出的混淆方案除了各自应有的特性之外,还兼具增强内聚性、减少耦合性、增大方法平均复杂度等效果。

  关键词:安全加固 代码混淆 CLASS文件 方法描述符

ABSTRACT

  With the fast increasing number of Java application, various kinds of Reverse Engineering technology are increasingly. Therefore, how to reinforce the Java application’s security becomes an issue of continuously updated. Today, although there are a lot of security reinforcement schemes, the CLASS bytecode file still exist certain information that can be Reverse Engineering using. Specially, the parameter type information transferred between method calls could be one of the potential safety hazard. The cracker can use this type information quickly to narrow the search scope, achieve the fast locating.

  For this problem, the thesis designed an approach to hide the method’s descriptor, and proposed two obfoscation algorithms called Unifying Method Descriptor and Merging Method Collection. In principle, the two algorithms can only hide the type information between methods, not to transform the original program flow. The obfuscated application can be directly run on the native JVM, without any other codes or tools.

  In order to verify the feasibility, we implemented an obfoscation program based on the two algorithms. In the aspect of the test, the thesis opted for 9 real-life applications from the DaCapo benchmark suite. In addition, the thesis also calculate the intensity of obfuscation for the two algorithms respectively, the results show that the two obfuscation algorithms, in addition to its inherent characteristics, can not only increase the method’s average complexity, but also enhance the cohesion and reduce the coupling.

  KEYWORDS: Security ReinforcementObfuscation Method Descriptor CLASS file

  随着社会经济的快速发展,Java应用程序的数量每天在以一个惊人的数字递增,但与此同时人们又不得不面临着知识产权的保护问题。在当今新型技术层出不穷的趋势下,各种反编译CLASS字节码的工具应运而生,同时由于网络的开放性,应用程序在发布之后,就可能受到来自各方面的无限制地检测甚至攻击,这也让Java应用程序的知识产权保护愈加困难。

  Java语言为了支持平台无关性,采用了 CLASS字节码这种文件格式。在流程上表现为先对Java源码进行编译,生成的虚拟机指令及相关信息则被存储在CLASS文件中,而后CLASS文件将会在虚拟机上被解释执行。然而,CLASS文件作为中间代码会保留着大量的源码信息,只需对其进行简单的反编译就能得到质量很高的Java源码,甚至基本上可以根据获取的应用程序信息重构完整代码。这就导致Java应用软件在代码保护上的保密性较低,使得知识产权保护面临着很大的安全风险。

  针对上述知识产权保护问题,“代码混淆”是一种比较有效的保护技术,其基本思想是通过各种混淆技术对软件代码或数据进行保留语义的变换,同时抹去部分存在于程序中的字符和其他标识信息,进而达到保护软件代码安全的目的。

  这些抹去的标识信息虽然是为了编码方便而引入,但其同样也能被逆向工程人员所利用,考虑到这些信息与程序是否正常运行毫无关联,我们可以在混淆过程中用其他难以理解的英文字符将其代替。

  值得注意的是,代码混淆的目的并不是对软件提供绝对的保护,只要能使得攻击者的攻击是不经济的,则就可以认为达到目的了。

  CLASS字节码由于其自身的特殊性,使其相较于二进制可执行文件更难以达到很好的混淆效果,但情况己经慢慢得到改善。2014年,由ChristopheFoket等人[发表的论文Pushing Java Type ObfUscation to the Limit中就提出了 一种对类层级结构进行改造的混淆方案,而对于其中所存在的若千缺陷,作者在文章的结尾也提出了几种可能的解决方案,其中就有一条是利用机器学习来加强代码混淆效果。由此可见,只要使用得当,当下的新技术完全可以有利于代码混淆技术的发展。

  当今应用市场虽代码混淆工具种类繁多,但混淆效果却不尽完美,这就使得Java应用程序被侵犯知识产权的风险大大增加。尤其是在移动应用程序呈井喷之势的当下[6],以Java语言为基础的Android应用程序所面临的安全问题日益增加[7,8],逆向工程人员拥有的反混淆手会更加的层出不穷。本论文的研究工作,将紧跟最新的Java应用软件保护技术,提出新型的代码混淆手段,为保护Java开发者的知识产权贡献自己的力量。

  在Java应用软件安全加固的框架下,围绕“代码混清”技术开展的研宄工作就是为了解决当今Java应用软件知识产权保护的问题値着技术的发展,“静态分析”和“动态分析”工具日益繁多,当这些技术工具被不法分子用于恶意分析软件框架、结构甚至源码的时候,应用软件的知识产权就无法得到很好的保护。

  自从“代码混淆”的概念被提出以来,研究人员先后提出了各种各样的代码混淆方案:针对CLASS字节码的混淆大致分为“类内混淆”和“类间混淆”,“类内混淆”又可以分为“数据混淆”、“控制流混渚”、?“切片混淆”等,而“类间混淆”又可以细分为“类合并”与“类拆分”等[9]。

  1997年,Collberg和Thomborson等人首次给出了代码混清明确的概念和分类[9],其发表的论文从宏观上将代码混淆分为布局混淆、控制流混淆、数据混淆和预防性混淆四类。随后,Collberg等人艾根据之前所提出的努类标准,先后提出了若干拆分细节和实现方案。在这之后的几年中",其他研宄人员也陆陆续续的发表了很多关于代码混滑的研究成果[12,13V不过其中大多都是对C611berg等人研宄的扩展和延续。我们将这一系列的裩淆方寒归结为传统的代码混淆方案。

  然而,基于符号执行『141的逆向工程研宄发展迅速,该技术可以通过分析程序的执行路径,自动收集程序在执行过程中泄露的大量分支信息,这有力地削弱了传统代码混淆的保护强度。针对这一难题,Sharif等人[15]于2008年提出了一种条件代码混淆方案来抵抗符号执行分析,该方案采用单向散列函数对程序中存在的条件分支进行对等加密,这样可以保证逆向分析不能从条件的散列值推导出原始值,但散列函数不是线性函数,所以该方案不能对“比较”条件分支进行混淆。

  2011年,Wang和Ming等人M提出了一种路径模糊技术,利用条件异常代码来隐藏程序中的分支路径信息,并同时引入了不透明谓词技术来伪造多余的路径分支信息,以此减少路径分支信息的泄露,加强了逆向分析的难度。

  程序切片技术是一种通过对部分程序语句进行计算,使程序达到减少语句数量、降低复杂度的方法。该方法与代码混淆技术目的相反,因此也常常被用来进行逆向工程操作,Chen等人[171就于2006年发表论文讨论了切片对混淆的影响。

  针对于此,Drape等人[18,19]提出了切片混淆算法,其主要思想就是向程序切片中尽可能多的加入额外无关变量或者将原有表达式复杂化。同年,Drape等人又再次发表论文证明了切片混淆算法可以有效抵御切片分析的攻击。

  以上所提到的众多混淆方案都可以有效防范静态分析,然而,动态分析也是攻击者常用的手段之一。为了防范动态分析,以代码动态突变为主要思想的众多混淆方案被提出。如 Balachandram and Sabu Emmanuel 等人[22]在 2013 年发表的 Potent and Stealthy Control Flow Obfbscatioin by Stack Based Self-ModifyingCode中就提出了一种很好的二进制混淆方案,其可以有效的抵御动态分析的攻击,其算法的主体思想就是去混浠控制流指令中的跳转指令(如JMP),而目标地址(targetaddress)则被放在了数据域(dataarea)而非指令域(codearea)。当程序在执行的过程中,这些被混淆过的跳转指令就会被自修改指令(selfmodifying code)重新建立。这样做的一个好处就是将控制流信息从指令域中剥离出来,攻击者在仅仅只分析指令域的情况下是无法找到程序的控制流的。不仅如此,就算攻击者转而其分析数据域,那么也会一无所获,因为这些目标地址在数据域中跟其它的二进制变量毫无差别。

  从某种程度来说,代码混淆过程也是一种对软件进行“加密”的过程,因此,运用数学知识进行代码混淆也不失为一种可行的方案。Wang等人在提出混淆算法的同时,也将未解数学猜想(如克拉兹猜想)引入了软件路径信息中,与使用传统加密函数相比,这样做的好处就是能够得到更少的开销以及更强的混淆效果。在Chen等人[26]提出的混淆方案中,融入了中国剩余定理和同方程解的概念,最终可达到一种具有单向性、随机性、隐蔽程度高并且可同时抵抗静态和动态攻击的混淆效果。2013 年,Garg 等人在 Candidate IndistinguishabilityObfUscation and Functional Encryption for all Circuits 中第一次提出 了针对不可区分混淆技术的实现,区别于传统的混淆方法,Garg等人将待混淆程序转换为一个多线性拼图的游戏,于是混淆技术的安全性就转化为了一类与格有关的数学难题。

  在此之后,不可区分混淆愈发引起了数学领域学者的研宂热潮,并相继诞生了众多研究成果。

  Java应用软件安全加固方法:

混淆后额外消耗的时间比例与调用方法的个数关系
混淆后额外消耗的时间比例与调用方法的个数关系

泛型代码经编译后的桥接方法示例
泛型代码经编译后的桥接方法示例

混淆前后消耗的总时间与调用方法的个数关系
混淆前后消耗的总时间与调用方法的个数关系

目录

  第一章 绪论
    1.1 研宄背景
    1.2 研究现状
    1.3 论文主要工作
    1.4 论文的组织结构
  第二章 相关知识及技术介绍
    2.1 CLASS字节码介绍
      2.1.1 常量池
      2.1.2 方法表集合
      2.1.3 其它信息
    2.2 虚拟机指令
  第三章 基于统一方法描述符的混淆算法研究
    3.1 提出方法
      3.1.1 修改方法定义
      3.1.2 修改方法调用
      3.1.3 重载方法
      3.1.4 继承
      3.1.5 接口与实现类
    3.2 模型展示
    3.3 性能测试
    3.4 本章小结
  第四章 基于归并方法集合的混淆算法研宂
    4.1 提出方法
      4.1.1 方法合并
      4.1.2 抽象方法
      4.1.3 桥接方法
    4.2 模型展示
    4.3 性能测试
    4.4 本章小结
  第五章 系统实现与性能评估
    5.1 系统实现
      5.1.1 混淆流程
      5.1.2 同步属性处理
    5.2 性能评估
      5.2.1 限制与条件约束
      5.2.2 基准测试程序集
      5.2.3 开销评估
      5.2.4 混淆强度评估
    5.3 本章小结
  第六章 工作总结和未来展望
    6.1 工作总结
    6.2 未来展望
  参考文献
  致谢
  攻读学位期间发表的学术论文

(如您需要查看本篇毕业设计全文,请您联系客服索取)

相关内容
相关标签:Java毕业设计
好优论文定制中心主要为您提供代做毕业设计及各专业毕业论文写作辅导服务。 网站地图
所有论文、资料均源于网上的共享资源以及一些期刊杂志,所有论文仅免费供网友间相互学习交流之用,请特别注意勿做其他非法用途。
如有侵犯您的版权或其他有损您利益的行为,请联系指出,论文定制中心会立即进行改正或删除有关内容!