- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java代码混淆技术的研究
Java代码混淆技术的研究
摘要:由于Java开发已经愈来愈流行,而引起编译器的不安全特点是其很容易被反编译,为了保护开发者的利益,混淆技术便应运而生。当前主要使用到的混淆技术有以下四种:代码外形混淆、控制命令混淆、内部数据混淆和预防混淆。
关键词:混淆技术;Java;编程;算法
中图分类号:TP312 文献标识码:A 文章编号:1674-7712 (2012) 18-0038-01
一、前言
Java作为一种新一代的编程语言,其因编程简单、跨平台性可操作性强被许多的开发人员和公司喜爱,而且如今已经成为应用程序的主流开发软件。然而,Java编译器在编译时是将代码引用到的变量和方法符号保留在字节码文件中,并且这些符号都有语义信息,因此使得开发的程序很容易被反编译,导致软件被破解。最终将使得开发者的知识产权受到侵害。为了保护开发者的权益,代码混淆技术变应运而生。
二、混淆技术的发展
早在1997年Collberg便开始了对代码混淆的研究,在他发表的文章中提出了代码混淆变换的各种类型,他将其分为四类:代码外形混淆、控制命令混淆、内部数据混淆以及预防混淆。随后Kelly等人构造了一种用来实现构造代码的混淆算法机制。在国内,近些年了也有一些学者逐渐意识到了代码混淆技术在进行程序编写中的重要性,大量研究之后取得了较大的成果。比较有代表的有李永祥的多分语句控制迷惑技术,李长春的执行重整混淆算法等。由于混淆技术具有非常重要的软件保护作用,相信未来肯定会有更多的人和组织加入到代码混淆技术的相关研究课题中来。
三、混淆技术介绍
(一)混淆变换原理
作为一种非常实用的软件保护策略,代码混淆技术的基本思想是将应用程序在保持语句含义不变的前提下实现P到P’的变换。此变换中必须满足条件:P‘和P具有相同的运行结果;若P‘出错终止或终止失败,P也必须出错地终止或终止失败;P‘产生与P一样的输出。两个程序唯一不同的只是P‘比P更难去进行反编译,并且P‘可读性差以及相关工具难以解析。因此经过这种变换可以到达混淆的目的,使软件不易被攻击。
(二)混淆的应用领域
代码混淆的应用范围很广,归纳起来主要有一下几种领域:⑴分布式计算和软件保护;⑵法保护和DRM;⑶同形加密;
(三)混淆的分类
代码混淆技术根据混淆对象的不同可以分为四种:代码外形混淆、控制命令混淆、内部数据混淆和预防混淆。
1.代码外形混淆。Java混淆器使用到的混淆方法中代码外形混淆最为典型,该算法可以将Java所有源代码中包含的类的功能隐藏。如果最初的格式信息被除去后代码将不能恢复,因此称这种混淆为单向变换。程序经过这种变换后时间和空间复杂度不会受影响,因为它并没有额外执行代价。
代码外形混淆主要使用的技术有删除(删除程序和中的注释、调试信息、未被调用的方法和类等)和改名(程序中的变量名、常量名、类名、方法名等)。此变换可以使程序的理解变难。
2.控制命令混淆。控制命令混淆能增加程序的复杂度和程序的反编译时间,它是通过改变程序的判断条件或添加可控判断条件以及对程序的结构和流程进行调整来实现的。常常用到的控制命令混淆主要有排序、聚集和计算变换。
3.内部数据混淆。内部数据混淆技术将会利用数据流中的难点问题,向程序中引入使程序精度降低或难度增加的因素,进而可以影响反编译器对程序的分析结果。内部数据混淆只会变换代码中的数据结构,而不修改软件代码。
进行内部数据混淆的主要方法有四种:变量分裂与变量合并、数据结构变换、静态数据动态生成、类继承转换。
4.预防变换。预防变换是利用某些专用反汇编工具的弱点而设计的。具体混淆可以分为针对特定目标实施的预防变换或者是依据已知的反编译算法实现的混淆。
5.四种混淆技术的分析和比较。代码外形混淆使攻击者解读程序造成不便,同时也能针对反编译工具的算法使之反编译难以实施。内部数据混淆改变逻辑变量。控制命令混淆使程序变得更加复杂从而增强程序的抵抗性能。预防混淆较多时候都是具有一定的针对性。内部数据混淆和控制混淆都会在增加程序复杂度的同时造成程序执行效率的下降,而代码外形混淆则不会影响执行效率。
四、标示符重命名混淆算法
标示符重命名混淆属于代码外形混淆的范畴。它是将字节码文件中的一些类名、接口名、方法名等替换为其他无意义的名字。这并没有造成程序的额外开销,抗攻击能力也不强。
重命名是因为进行内部数据混淆和控制混淆时都会增加程序的开销,而这并不是我们想要的。有时候我们经常需要一种可以抵抗攻击并且不会造成程序执行效率下降的算法,而重命名混淆正是这样的。当一些名字被毫无意义的字符替换后,攻击者很难从中读出该名字所代表的意义,这便使得攻击者在反
文档评论(0)