Ja程序混淆技术的最新进展

点赞:4180 浏览:13056 近期更新时间:2024-02-03 作者:网友分享原创网站原创

摘 要:随着计算机技术的快速发展,计算机软件的安全存在着一定的威胁,包括软件的攻击和重组.Ja程序混淆技术是一种特殊的编码技术,可以抵制逆向工程和重组工程,保护软件知识产权.

关 键 词:Ja程序;混淆技术;软件;编码

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)35-8414-02

Ja程序可以在平台上迅速传播,Ja语言很容易被反编码.Ja程序混淆也就是在不改变原义的情况下,对Ja程序程序进行混淆,混淆后的程序很难被反编码,或者发编码后的程序可读性非常差,就可以达到保护软件的目的.Ja程序混淆技术被广泛地用于软件知识产权领域.

1 Ja程序混淆技术的原理

混淆技术[1]实际上就是代码变换技术,通过变换,将原始程序P变换为新的程序P1,它们的功能相似或者相近,代码安全性非常高.

如果原始程序P,经过混淆变换T,变换为新的程序P1,也就是P1等于T(P),这个软件混淆变化必须满足以下条件:如果P结束,那么P1也必须结束,并且输出结果与P相同;如果P无法结束,或者以错误状态结束,那么P1不一定结束;对于P和P1的计算任务,P1比P消耗的时间长,而且保持在一个特定的范围内;攻击者如果想要将P1恢复成P,那么所需要消耗的时间远远大于将P转换为P1的时间.

2 Ja程序混淆技术的分类

2.1 数据混淆

数据混淆[2]是指对程序的组成元素,如常量、变量和数据结构进行混淆变换,增大攻击者反编码的难度.

1)分裂和合并变量混淆:分裂变量混淆指的是在保持程序原义的前提下,将一些比较简单的数据结构和数据类型分解成一些变量的组合,就可以达到隐藏原始程序的效果.

合并变量混淆指的是将几个数值变量或者整型数据合并成一个变量或数据,从而达到隐藏原始数据的目的.

Ja程序混淆技术的最新进展参考属性评定
有关论文范文主题研究: 关于知识产权的论文范文集 大学生适用: 函授毕业论文、高校大学论文
相关参考文献下载数量: 15 写作解决问题: 写作资料
毕业论文开题报告: 文献综述、论文设计 职称论文适用: 期刊目录、职称评副高
所属大学生专业类别: 写作资料 论文题目推荐度: 最新题目

2)数组重构混淆:数组是程序中的基本数据结构,对数组进行重构混淆,包括数组分裂变换、数组合并变换、数组平滑变换以及数组折叠变换.数组分裂变换指的是将一个数组分裂成两个或者两个以上的数组;数组合并变换是指将两个或两个以上的数组合并为一个数组;数组平滑变换是指减少数组的维数;数组折叠变换是指增加数组的维数.

3)将静态数据转换为与程序相关的数据:静态数据,特别是字符串数据,包含大量信息.通过混淆变换,可以将静态数据转换为一个函数或者一段子程序,在执行程序的时候,可以通过程序调用生成相应的字符串,从而增加程序的复杂程度.

2.2 词法混淆

词法混淆是变换函数和变量的名称,违背Ja见名知义的软件原则.词法混淆是根据Ja虚拟机规范中的类文件结构的有关规定,混淆常量池中存储的类、字段、方法以及变量等名称的“CONSTANT_Utf8_info”类型数据.词法混淆主要有三种方法:用名称相同但是类型不同的字段进行替换;有意义的标识符用没有任何意义的字符来替换;用Ja虚拟机不限制但是Ja语言禁止的字符或者字符串来代替原始的字符或者字符串.词法变化具有单向性,不需要额外的执行代价,所以程序的复杂几乎不受影响,在实践中应用比较广泛.

词法混淆还包括移除和改名.移除是指将程序中的注释、调试信息等格式化信息删除掉,这种方法具有单向性,一旦混淆无法恢复,操作简单,但是强度很差.改名是指将程序中的常量名、变量名等标识符改为没有意义的标识符.

2.3 控制混淆

1)循环条件插入变换:通过不透明谓词把一个循环的终止条件变得更加复杂.

2)分支插入变换:对于一串语句,加入一个控制条件,增加程序的复杂程度.可以加一个不透明谓词,构造一个不会执行的分支,或者另两个分支上的语句都和原语句相同,从而影响后面语句的执行.

3)将可制约的控制流转换为不可制约的控制流:利用不透明谓词,加入一个检测分支,将一个循环变换为多个循环,增加控制流图的翻译难度.

4)并行化代码:并行程序比串行程序更复杂,难以被分析.使用并行技术,可以构造不透明谓词,混淆程序的控制流.可以将串行程序并行化,还可以在程序中添加代码,增加程序的理解难度.

5)控制顺序混淆:一般情况下,Ja类文件包含了很多控制信息,对这些控制转换信息进行掩藏可以通过打乱表达式、方法的顺序,增加程序的理解难度.

2.4 类结构混淆

1)类合并:类合并[3]指的是将两个或两个以上的类合并成一个类,包括各个类所包含的变量和函数,从而破坏系统的类,隐藏系统的整体设计.根据重命名的变量和方法,如果合并的类中有相同标识符的函数和变量,那么就将它们改为不重复的变量或函数;如果合并的类中,构造函数的标识符和参数都是相同的,那么就增加一个伪造的参数;如果合并的两个类之间存在着继承的关系,那么为了区分标识符相同的函数,可以增加一个布尔型的私有变量.

2)类分裂:类分裂指的是将一个类C拆分成C1和C2两个类,并且C2是C1的子类.另外还要保证C中的变量和方法,由C1继承或者由C2包含.

3)类型隐藏:

在Ja中,除了类之外,还有接口,接口也是一种类型.通过接口,可以声明待混淆类的变量和方法,从而实现类型的隐藏.另外,如果引入的所有接口只怎么写作于一个类,那么很容易被识别,为了使自动分析变得困难,可以使引入的接口同时为几个类怎么写作.

3 Ja程序混淆技术的算法

1)滥用标识符混淆算法:滥用标识符混淆算法[4]是指用同一个标识符代替一个类中出现的所有标识符,主要是通过Ja中标识符中的重命名来实现的.

2)重载无关联方法算法:重载无关联方法算法与扩展转换和方法重载有很大的关系.这种方法是将被混淆类中的所有实体用相同的标识符来重命名.在Ja程序中,如果某个编译时刻通过了一个象征性的参考,那么混淆操作一定会被执行,如果用这种方法对已操作程序反编译,并重新执行,就会改变程序的代码.

3)非法标识符替换算法:非法标识符替换算法[5]是将程序中的普通标识符用关 键 词和非法字符结合的字符串或者纯粹的关 键 词来代替.这种混淆算法,很容易迷惑大多数的反编译软件.

4)重写静态方法算法:重写静态方法算法可以处理一些被编译过的Ja类.它的混淆变化非常细微,很难被察觉,从而增加了攻击者的难度.


4 Ja程序混淆技术的应用

1)保护DRM技术.DRM技术的安全性和关键数据的保护有很大的关系,采用Ja程序混淆技术,可以保护DRM技术的关键数据信息.

2)保护算法.如果开发者想要将一个新算法应用到软件中的时候,可以通过代码混淆技术混淆算法的一部分,从而增加算法的理解难度,达到保护算法的目的.

3)代码抗篡改.当进行网络软件操作或者执行相关任务的时候,代码的安全是相当重要的.软件设计者可以采用Ja程序混淆技术保护操作软件,防止外来用户或者恶意主机篡改代码.

4)病毒变种.杀毒技术的重要方法就是模式匹配.对于病毒码,如果采用混淆技术,那么就可以产生很多不同特征的病毒变种,威胁到网络安全.

5 结束语

Ja程序混淆技术在不改变程序功能的基础上,增加攻击者对程序反编译的难度,提高软件知识产权的保护力度,因此混淆技术在代码保护方面,应用非常广泛.今后的混淆技术不仅要加大混淆力度,提高防篡改力度,还要考虑混淆算法的运行负担.