Ja代码混淆技术

更新时间:2024-01-22 作者:用户投稿原创标记本站原创 点赞:7057 浏览:30353

摘 要:由于Ja开发已经愈来愈流行,而引起编译器的不安全特点是其很容易被反编译,为了保护开发者的利益,混淆技术便应运而生.当前主要使用到的混淆技术有以下四种:代码外形混淆、控制命令混淆、内部数据混淆和预防混淆.

关 键 词:混淆技术;Ja;编程;算法

中图分类号:TP312文献标识码:A文章编号:1674-7712(2012)18-0038-01

一、前言

Ja作为一种新一代的编程语言,其因编程简单、跨平台性可操作性强被许多的开发人员和公司喜爱,而且如今已经成为应用程序的主流开发软件.然而,Ja编译器在编译时是将代码引用到的变量和方法符号保留在字节码文件中,并且这些符号都有语义信息,因此使得开发的程序很容易被反编译,导致软件被.最终将使得开发者的知识产权受到侵害.为了保护开发者的权益,代码混淆技术变应运而生.

二、混淆技术的发展

早在1997年Collberg便开始了对代码混淆的研究,在他发表的文章中提出了代码混淆变换的各种类型,他将其分为四类:代码外形混淆、控制命令混淆、内部数据混淆以及预防混淆.随后Kelly等人构造了一种用来实现构造代码的混淆算法机制.在国内,近些年了也有一些学者逐渐意识到了代码混淆技术在进行程序编写中的重要性,大量研究之后取得了较大的成果.比较有代表的有李永祥的多分语句控制迷惑技术,李长春的执行重整混淆算法等.由于混淆技术具有非常重要的软件保护作用,相信未来肯定会有更多的人和组织加入到代码混淆技术的相关研究课题中来.

三、混淆技术介绍

(一)混淆变换原理

作为一种非常实用的软件保护策略,代码混淆技术的基本思想是将应用程序在保持语句含义不变的前提下实现P到P’的变换.此变换中必须满足条件:P‘和P具有相同的运行结果;若P‘出错终止或终止失败,P也必须出错地终止或终止失败;P‘产生与P一样的输出.两个程序唯一不同的只是P‘比P更难去进行反编译,并且P‘可读性差以及相关工具难以解析.因此经过这种变换可以到达混淆的目的,使软件不易被攻击.

(二)混淆的应用领域

代码混淆的应用范围很广,归纳起来主要有一下几种领域:⑴分布式计算和软件保护;⑵法保护和DRM;⑶同形加密;

(三)混淆的分类

代码混淆技术根据混淆对象的不同可以分为四种:代码外形混淆、控制命令混淆、内部数据混淆和预防混淆.

1.代码外形混淆.Ja混淆器使用到的混淆方法中代码外形混淆最为典型,该算法可以将Ja所有源代码中包含的类的功能隐藏.如果最初的格式信息被除去后代码将不能恢复,因此称这种混淆为单向变换.程序经过这种变换后时间和空间复杂度不会受影响,因为它并没有额外执行代价.

代码外形混淆主要使用的技术有删除(删除程序和中的注释、调试信息、未被调用的方法和类等)和改名(程序中的变量名、常量名、类名、方法名等).此变换可以使程序的理解变难.

2.控制命令混淆.控制命令混淆能增加程序的复杂度和程序的反编译时间,它是通过改变程序的判断条件或添加可控判断条件以及对程序的结构和流程进行调整来实现的.常常用到的控制命令混淆主要有排序、聚集和计算变换.

3.内部数据混淆.内部数据混淆技术将会利用数据流中的难点问题,向程序中引入使程序精度降低或难度增加的因素,进而可以影响反编译器对程序的分析结果.内部数据混淆只会变换代码中的数据结构,而不修改软件代码.

进行内部数据混淆的主要方法有四种:变量分裂与变量合并、数据结构变换、静态数据动态生成、类继承转换.

4.预防变换.预防变换是利用某些专用反汇编工具的弱点而设计的.具体混淆可以分为针对特定目标实施的预防变换或者是依据已知的反编译算法实现的混淆.

5.四种混淆技术的分析和比较.代码外形混淆使攻击者解读程序造成不便,同时也能针对反编译工具的算法使之反编译难以实施.内部数据混淆改变逻辑变量.控制命令混淆使程序变得更加复杂从而增强程序的抵抗性能.预防混淆较多时候都是具有一定的针对性.内部数据混淆和控制混淆都会在增加程序复杂度的同时造成程序执行效率的下降,而代码外形混淆则不会影响执行效率.

四、标示符重命名混淆算法

标示符重命名混淆属于代码外形混淆的范畴.它是将字节码文件中的一些类名、接口名、方法名等替换为其他无意义的名字.这并没有造成程序的额外开销,抗攻击能力也不强.

重命名是因为进行内部数据混淆和控制混淆时都会增加程序的开销,而这并不是我们想要的.有时候我们经常需要一种可以抵抗攻击并且不会造成程序执行效率下降的算法,而重命名混淆正是这样的.当一些名字被毫无意义的字符替换后,攻击者很难从中读出该名字所代表的意义,这便使得攻击者在反编译是造成了困难.

当程序中一个实体被重命名后,所有与其相关的内容必须更新,否则会引起运行出错.但是有一些是不能被重命名的.这便有了代码混淆范围的提出.以下三种标示符是不在范围内的:(1)子类中一个超类或接口中抽象方法的实体方法;(2)超类中继承方法的重写;(3)特殊属性明确规定不可进行替换.

标示符重名算法可以分为四种:静态方法重写、替换非法提示符、无关联方法重载、部分标识符滥用.

五、算法分析

衡量一个混淆算法性能好坏的重要指标是对程序执行开销的影响.内部数据混淆和控制命令混淆都增加了程序的二外执行开销从而影响了程序的运行效率.重命名混淆只是将名字替换,很多时候都会将名字缩短,使文件变得更小,不会造成执行效率的下降,同时也使攻击者将花费更长的时间来理解和反编译程序.


六、总结

代码混淆技术是时下最常用的,同时也是最有效的保护Ja软件的方法,新型的混淆算法一定会随着技术的发展而被发现.虽然代码混淆技术在一定程度上保护了软件的安全以及开发者的权益,但只有我们杜绝使用盗版软件同时不去侵犯他人的知识产权才能切实的保护好开发者的权益.