Java程序混淆技术最新研究进展.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java程序混淆技术最新研究进展

Java程序混淆技术最新研究进展   摘要:随着计算机技术的快速发展,计算机软件的安全存在着一定的威胁,包括软件的攻击和重组。Java程序混淆技术是一种特殊的编码技术,可以抵制逆向工程和重组工程,保护软件知识产权。   关键词:Java程序;混淆技术;软件;编码   中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)35-8414-02   Java程序可以在平台上迅速传播,Java语言很容易被反编码。Java程序混淆也就是在不改变原义的情况下,对Java程序程序进行混淆,混淆后的程序很难被反编码,或者发编码后的程序可读性非常差,就可以达到保护软件的目的。Java程序混淆技术被广泛地用于软件知识产权领域。   1 Java程序混淆技术的原理   混淆技术[1]实际上就是代码变换技术,通过变换,将原始程序P变换为新的程序P1,它们的功能相似或者相近,代码安全性非常高。   如果原始程序P,经过混淆变换T,变换为新的程序P1,也就是P1=T(P),这个软件混淆变化必须满足以下条件:如果P结束,那么P1也必须结束,并且输出结果与P相同;如果P无法结束,或者以错误状态结束,那么P1不一定结束;对于P和P1的计算任务,P1比P消耗的时间长,而且保持在一个特定的范围内;攻击者如果想要将P1恢复成P,那么所需要消耗的时间远远大于将P转换为P1的时间。   2 Java程序混淆技术的分类   2.1 数据混淆   数据混淆[2]是指对程序的组成元素,如常量、变量和数据结构进行混淆变换,增大攻击者反编码的难度。   1)分裂和合并变量混淆:分裂变量混淆指的是在保持程序原义的前提下,将一些比较简单的数据结构和数据类型分解成一些变量的组合,就可以达到隐藏原始程序的效果。   合并变量混淆指的是将几个数值变量或者整型数据合并成一个变量或数据,从而达到隐藏原始数据的目的。   2)数组重构混淆:数组是程序中的基本数据结构,对数组进行重构混淆,包括数组分裂变换、数组合并变换、数组平滑变换以及数组折叠变换。数组分裂变换指的是将一个数组分裂成两个或者两个以上的数组;数组合并变换是指将两个或两个以上的数组合并为一个数组;数组平滑变换是指减少数组的维数;数组折叠变换是指增加数组的维数。   3)将静态数据转换为与程序相关的数据:静态数据,特别是字符串数据,包含大量信息。通过混淆变换,可以将静态数据转换为一个函数或者一段子程序,在执行程序的时候,可以通过程序调用生成相应的字符串,从而增加程序的复杂程度。   2.2 词法混淆   词法混淆是变换函数和变量的名称,违背Java见名知义的软件原则。词法混淆是根据Java虚拟机规范中的类文件结构的有关规定,混淆常量池中存储的类、字段、方法以及变量等名称的“CONSTANT_Utf8_info”类型数据。词法混淆主要有三种方法:用名称相同但是类型不同的字段进行替换;有意义的标识符用没有任何意义的字符来替换;用Java虚拟机不限制但是Java语言禁止的字符或者字符串来代替原始的字符或者字符串。词法变化具有单向性,不需要额外的执行代价,所以程序的复杂几乎不受影响,在实践中应用比较广泛。   词法混淆还包括移除和改名。移除是指将程序中的注释、调试信息等格式化信息删除掉,这种方法具有单向性,一旦混淆无法恢复,操作简单,但是强度很差。改名是指将程序中的常量名、变量名等标识符改为没有意义的标识符。   2.3 控制混淆   1)循环条件插入变换:通过不透明谓词把一个循环的终止条件变得更加复杂。   2)分支插入变换:对于一串语句,加入一个控制条件,增加程序的复杂程度。可以加一个不透明谓词,构造一个不会执行的分支,或者另两个分支上的语句都和原语句相同,从而影响后面语句的执行。   3)将可制约的控制流转换为不可制约的控制流:利用不透明谓词,加入一个假分支,将一个循环变换为多个循环,增加控制流图的翻译难度。   4)并行化代码:并行程序比串行程序更复杂,难以被分析。使用并行技术,可以构造不透明谓词,混淆程序的控制流。可以将串行程序并行化,还可以在程序中添加代码,增加程序的理解难度。   5)控制顺序混淆:一般情况下,Java类文件包含了很多控制信息,对这些控制转换信息进行掩藏可以通过打乱表达式、方法的顺序,增加程序的理解难度。   2.4 类结构混淆   1)类合并:类合并[3]指的是将两个或两个以上的类合并成一个类,包括各个类所包含的变量和函数,从而破坏系统的类,隐藏系统的整体设计。根据重命名的变量和方法,如果合并的类中有相同标识符的函数和变量,那么就将它们改为不重复的变量或函数;如果合并的类中,构造函数的标识符和参数都是相同的,那么就增加一个伪造的参数;

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档