Java字节码混淆算法研究

来源 :电子科技大学 | 被引量 : 0次 | 上传用户:lanxuexiao
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
随着计算机网络和分布式系统的发展,对软件的平台无关性、可移植性提出了更高、更迫切的要求。在这种情况下,Java平台产生了,提出了一种解决软件的可移植性和平台无关性的方案。但是由于Java虚拟机指令系统过于简单,且class文件包含了大量可以被反编译利用的信息,Java较以前的C、C++等要容易反编译。这样一来软件开发者的知识产权得不到保障。为解决这一问题,许多专家、学者提出对Java字节码进行混淆的方案,并且进行了大量的研究。这些研究呈现以下特点:1.对程序的控制流研究较多,而对程序的数据流研究较少;2.很多控制流混淆算法或者是利用不透明谓词进行混淆或者是利用Java语言和JVM在设计上的间隙进行混淆。这些混淆方法难抵挡动态攻击和模式匹配的反混淆攻击。针对以上情况,本文对以前的控制流分析算法、Java虚拟机指令系统的特点和Java字节码验证过程进行了分析和比较,并且结合对Java字节码进行混淆这一目标,把类型模拟引入控制流分析过程中。这样一来不仅得到Java方法的控制流图,而且得到大量基本块的执行环境的信息,如:栈、局部变量等。这些信息对混淆十分有用,为Java控制流混淆奠定了坚实的基础。本文在对控制流图的可归约性、等价性、结点分裂变换等的研究基础上,运用可归约流图的性质和判定,提出了基于不透明谓词的大三角形构造、圈交叉、if和switch交叉、循环和switch交叉等控制流混淆算法。这些算法破坏了原Java方法控制流图的可归约性。同时本文也给出了部分已有的控制流混淆算法是否破坏原Java方法控制流图的可归约性的判定。针对不透明谓词难抵挡动态攻击这一弱点,本文提出了利用“垃圾代码”进行控制流混淆的思路,并且在这一思路的基础上给出“分支垃圾代码”和“循环垃圾代码”两个具体应用。针对数据流混淆中判定某个局部变量在程序的某个基本块中是否可引用或者可被赋值的问题,本文结合已有的求控制流图的必经结点算法,提出了下列两个算法:1.求任意图的两个结点之间的所有路径的必经结点的算法。2.图中任意两个结点之间的所有路径是否必须经过它的顶点集的某个子集中至少一个结点的判定算法。并且,本文给出一系列定理证明来保证算法的正确性和有效性。运用这些算法和定理,本文解决了在新插入的代码或者用于替换的代码中,引用原程序的某些局部变量,和对原程序的某些局部变量进行重新赋值的问题。混淆后的程序能够通过字节码验证,且不改变程序的运行结果。同时本文对结构混淆、数据变换混淆等进行了简要的介绍。
其他文献
介绍了大动态连续检波式对数放大器(SDLA)的设计方法、工作原理和结构。设计了一种对数精度小于1dB、动态范围大于100dB的高精度大动态连续检波式对数放大器;给出了实际测试
鼠尾藻[Sargassum thunbergii (Mert.) O’Kunte]是北太平洋西部特有的一种暖温性大型海洋经济价值褐藻,在我国沿海地区北起辽东半岛南至雷州半岛的硇州岛,都有广泛分布。鼠
精益生产方式是人类现代工业历史一次革命性的重要里程碑,在能源危机日益凸现,环境问题日益恶化的今天特别具有现实意义。他的思想精髓也符合党的十六大提出的创建集约型社会
在工艺和应用的双重推动下,多核结构成为当前高性能微处理器的发展趋势。多核对单芯片有限Cache、带宽等存储资源的竞争将进一步凸显访存的瓶颈,同时伴随着更加多样的目标应用,
设计了一种应用于无源RFID(射频识别)标签的ASK解调器。该解调器采用边沿检测技术,能够恢复调制深度很浅的ASK信号。电路结构简单,易于调节,可适用于不同的协议,并且具有低电
随着Internet的快速发展与普及,P2P应用正在逐渐占据互联网业务中举足轻重的地位。然而P2P的广泛应用着实让宽带运营商感到十分为难。因为这类应用对带宽的需求在理论上是无
每一个语文教师都必须树立起大语文观念,必须认识到引导学生进行课外阅读是语文教师的职责。语文教师要善于激发学生的阅读兴趣,引导阅读方向,拓展阅读空间,让学生在"悦读"中
油画是用色彩和图形表达画家的精神情感的。绘画的目的今天也不再是对客观对象的模仿、复制成是把自然对象主观化的表现出来。而是通过绘画作品把画家的情感通过特定的载体客
商业银行是经营货币商品的特殊企业,其资本是商业银行经营的基础和风险保证。商业银行的三性目标之一的盈利性又决定了经营绩效对其的重要性。加入WTO融入全球竞争以后,我国商
博物馆是社会文明进步的象征,是人类文明见证的收藏地,承担着为社会和社会发展服务的重要职责。在人类物质文明和精神文明发达的今天,它的使命和责任受到了人们更广泛的关注。中