(计算机系统结构专业论文)用于软件保护的代码混淆技术研究.pdf_第1页
(计算机系统结构专业论文)用于软件保护的代码混淆技术研究.pdf_第2页
(计算机系统结构专业论文)用于软件保护的代码混淆技术研究.pdf_第3页
(计算机系统结构专业论文)用于软件保护的代码混淆技术研究.pdf_第4页
(计算机系统结构专业论文)用于软件保护的代码混淆技术研究.pdf_第5页
已阅读5页,还剩59页未读 继续免费阅读

(计算机系统结构专业论文)用于软件保护的代码混淆技术研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 近年来,移动代码技术得到了极大的发展,并有着广泛的应用前景,但代码 移动性所引发的安全问题阻碍了该技术在现实商业应用中的大规模使用。在这些 安全问题中,如何保护移动代码不受主机的损害是传统安全技术无法处理的新需 求。在恶意圭机环境下,软件系统可以被逆离工程或被篡改,其机密性、完整性 与可用性受到威胁。业界迫切要求简便和行之有效的保护软件与软件知识产权的 方法。代码混淆作为一种防止逆向工程的技术应运而生。尤其随着j a v a 语言的 迅速发展引起了对混淆技术的研究热潮。这是因为j a v a 目标代码一字节代码 ( b y t ec o d e ) 很容易被反编译为j a v a 源代码,这就迫切要求有效的保护j a v a 字 节代码的方法。因此,恶意主枫环境下用于软件保护的代码混淆技术的研究就具 有重要的理论和现实意义,并越来越受到业界的重视。 本文以保护软件,提高逆向工程代价先墨标,分别放破解与保护两方面对逆 向工程与代码混淆技术进行了深入的研究。针对j a v a 字节代码的解析与混淆, 我们实现了一个软件混淆系统原型j o t ,该系统是一个基于j a v a 字节代码的 综合软件混淆系统,也是本文研究成果的重要体现。本文的主要研究工作如下: ( 1 ) 分析了逆向工程的概念、逆向工程的分类、逆向工程的研究方法等。 并对形式化方法在逆向工程孛的应用徽了详尽的研究。 ( 2 ) 研究了当今主流的代码混技术,内容主要涵盖外形混淆、控制流混淆、 数据混淆、类结构混淆以及预防性混淆这五类混淆技术,揭示了混淆交换具有的 一些特性。 ( 3 ) 提出了一个通用的软件保护模型。该模型对具体应用领域的软件保护 策略的制定具有积极的指导意义。其对软件的保护涵盖了5 种安全服务:机密性、 完整性、可用性、可靠性、鉴别。 ( 4 ) 提出一个通用的针对面向对象程序的混淆转换模型。该模型对制定具 体的混淆转换方案具有一定的参考价值。 ( 5 ) 设计并实现了一个用于混淆转换j a v a 字节代码的原型系统j 钟 ( j a v ao b f u s c a t et 0 0 1 ) ,j o t 在实现外形混淆的同时,还实现类结构混淆。并 且我们在系统中需要进一步扩展的部分留出了相应的接口以待完善。 关键词:恶意主机;应用安全;逆向工程:形式化;软件保护;代码混淆 a b s t r a c t r e c e n t l y ,m o b i l ec o d et e c h n o l o g yh a sag r e a td e a lo fd e v e l o p m e n t a n dp r o m i s e s w e l l h o w e v e rt h es e c u r i t yp r o b l e mw i t hm o b i l ec o d et e c h n o l o g yo b s t r u c t si t sw i d e a p p l i c a t i o ni nr e a lb u s i n e s s a m o n gt h e s es e c u r i t yp r o b l e m s ,h o wt op r o t e c tm o b i l e c o d e f r o mm a l i c i o u sh o s ti san e wi s s u et h a tc a n n o tb ed e a l tb yt r a d i t i o n a l t e c h n o l o g i e s i nm a l i c i o u sh o s ts u r r o u n d i n g s ,as o f t w a r ec a l lb er e v e r s ee n g i n e e r e d a n da l s oc a l lb et a m p e r e dw i t h t h ec o n f i d e n t i a l i t y , i n t e g r a l i t ya n da v a i l a b i l i t yo f s o f t w a r ea r et h r e a t e n e d ,s oc o n v e n i e n ta n de f f e c t i v em e t h o d sa r en e e d e dt op r o t e c tt h e i n t e l l e c t u a lp r o p e r t yc o n t a i n e di ns o f t w a r e c o d eo b f u s c a t i o nt r a n s f o r m m i o ne m e r g e s a sad e f e n s et e c h n i q u et op r o t e c t $ o f p , v a r ef o r mr e v e r s ee n g i n e e r i n g t h ea d v e n ta n d w i d e l yu s e o fj a v al a n g u a g eb r i n g st h ew i d e l yr e s e a r c ho nc o d eo b f u s c a t i o nb e c a u s e t h ec l a s sf i l ei se a s yt ob ed e c o m p i l e d s oc o d eo b f u s c a t i o nf o rs o f t w a r ep r o t e c t i o ni n m a l i c i o u sh o s ta t t r a c tm u c ha t t e n t i o na n dt h e r ea r ev e r yi m p o r t a n tt h e o r e t i c a la n d p r a c t i c a ls i g n i f i c a n c e t h i sp a p e rt r e a t e dp r o t e c t i n gs o f t w a r ea n du s i n gm o r ec o s t l yf o r m so fr e v e r s e e n g i n e e r i n ga st a r g e t ,d e e p l yr e s e a r c h e dr e v e r s ee n g i n e e r i n ga n dc o d eo b f u s c a t i o n a b o u td e f e n s ea n da t t a c k ap r o t o t y p eo fc o d eo b f u s c a t i o ns y s t e m ( j o t ) b a s e do n j a v ab y t ec o d ei sr e a l i z e d ,t h ec o m p r e h e n s i v es y s t e mi sa ni m p o r t a n tm a n i f e s t a t i o n f o ro u rr e s e a r c h m a i nc o n t r i b u t i o n si nt h ep a p e ra r e : ( 1 ) a n a l y s i s t h ec o n c e p t ,c l a s s i f i c a t i o na n dr e s e a r c hm e t h o d so fr e v e r s e e n g i n e e r i n g ,a n dr e s e a r c ht h ea p p l i c a t i o no ff o r m a lm e t h o d s i nr e v e r s ee n g i n e e r i n g ( 2 ) r e s e a r c h e sa l lk i n d o fm a i n s t r e a mt e c h n o l o g i e s o fc o d eo b f u s c a t i o n , i n c l u d i n gl a y o u to b f u s c a t i o n ,c o n t r o lo b f u s c a t i o n ,d a t ao b f u s c a t i o n , c l a s so b f u s c a t i o n a n dp r e v e n t i v eo b f u s c a t i o n w ed e m o n s t r a t e ds o m ep r o p e r t i e s o fo b f u s c a t i n g t r a n s f o r m a t i o n ( 3 ) d e s i g no fam o d e lf o rg e n e r a lp r o t e c t i n gs o l - - c a r ew i t hc o n f i d e n t i a l i t y , i n t e g r a l i t y , a v a i l a b i l i t y , r e l i a b i l i t ya n da u t h e n t i c a t i o no fs o f t w a r e t h em o d e lh a sa s t r a t e g yg u i d ef o rs o f t w a r ep r o t e c t i o n ( 4 ) d e s i g no fam o d e lw i t ht h eo b j e c t o r i e n t e dp r o g r a m m i n gf o ro b f u s c a t i n g t r a n s f o r m a t i o n t h em o d e lh a ss o m er e f e r e n c ev a l u ef o ro b f u s c a t i n gt r a n s f o r m a t i o n ( 5 ) d e s i g n e da n di m p l e m e n t e do fap r o t o t y p es y s t e m f o rb o t hp a r s ea n d i i o b f u s c a t i oo fj a v ab y t ec o d e ( j o t ) ,j o tn o to n l ya c h i e v et h el a y o u to b f u s c a t i o n ,b u t a l s oa c h i e v et h ec l a s so b f u s c a t i o n l e a v i n gs o m ee x t e n s i b l ei n t e r f a c e st ob ep e r f e c t e d k e yw o r d s :m a l i c i o u sh o s t ;a p p l i c a t i o ns e c u r i t y ;r e v e r s ee n g i n e e r i n g ; f o r m a l ;s o t t w a r ep r o t e c t i o n ;c o d eo b f u s c a t i o n i i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得或其他教育机构的学位或证书而使用过的材料。与我一同工作 的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表 示谢意。 学位论文作者签名:签字日期:年月 日 学位论文版权使用授权书 本学位论文作者完全了解江西师范大学研究生院有关保留、使用 学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印 件和磁盘,允许论文被查阅和借阅。本人授权江西师范大学研究生院 可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采 用影咿、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名: 签字日期:年月 日 导师签名: 签字日期:年 月 日 用于软件保护的代码混淆技术研究 第1 章绪论 1 1 研究背景及意义 随着计算机软件业的不断进步和互联网络的高度发展,形形色色的软件充斥着 我们的生活,软件产业的发展已经成为国际竞争的核心和制高点。 越来越多的软件( 如j a v a ,n e t ) 以平台无关的中间代码来发布。以这种方式发 布的软件代码与源码类似,比起传统的二进制可执行代码更易遭到静态分析、逆向 工程和篡改等恶意攻击。随着网络技术的发展,更多软件是在不确定( 甚至是恶意) 的环境下运行的,主机可以任意地对软件进行分析和跟踪,而且随着各种逆向工程 技术的发展,使得对软件的攻击变得更加容易。如何保护软件中的核心算法和机密 数据成为人们关注的一个焦点,对于软件的保护也面i 临着严峻的挑战。 目前,计算机软件所面临的安全问题主要有两类: 。 一类安全问题是恶意代码问剧1 别。程序远程执行时,必须对远程主机提供必要 的保护,以防止程序执行恶意操作,破坏主机资源。其实一直以来,关于计算机安 全领域的研究也主要集中于此。病毒、蠕虫、木马,反病毒软件、防火墙、入侵检 测系统等,攻击与防御双方展开了激烈的军备竞赛。2 0 世纪9 0 年代初,移动a g e n t 技术的出现( a g e n t 程序可能迁移到非信任主机上运行) ,引发了安全专家对另一方 面的安全问题的关注与研究,这就是恶意主机问题口1 。程序在非信任主机上运行时, 需要对程序进行保护,防止恶意主机的攻击。 一 恶意主机环境下的攻击通常是以窃取软件知识识产权为目的的,主要的形式有: 软件盗版、逆向工程等。盗版就是非法拷贝软件并再次出售。这是软件销售商最为 关心的问题,在过去的几十年里,产生了加密狗,加密锁等各种软硬件方法,而面 对当今红火的盗版市场,说明反盗版技术还有许多不完善的地方。逆向工程是指对 软件进行分析和从中挖掘信息。近年来一些有关软件的法庭案件说明了这种威胁的 存在。某软件产品被其竞争对手挖掘出来,并用到其相应的软件产品中。这种威胁 正受到业界越来越多的关注,因为随着软件工程技术的发展,许多软件产品并非以 二进制形式存在,它们很容易被反编译,如j a v a 的c l a s s 文件,以及a n d f h l 等。 另一类安全问题则是软件代码窃取及篡改晦1 ( c o d es t e a l i n g & t a m p e r i n g ) 。它 是指在未经版权所有者同意的情况下,把软件代码的部分或全部归为己有或者将其 进行改动。软件代码中包含着大量的具有商业价值的算法或者商业机密,一旦被窃 硕士学位论文 取或篡改后果会非常严重。美国c l o a k w a r e 公司舾1 对1 9 8 8 年至2 0 0 4 年期间软件遭 受的这类威胁事件所做的统计( 如图1 - 1 所示) 表明,计算机软件面临的代码窃取及 篡改的威胁与日俱增且呈愈演愈烈之势。 图1 - 11 9 8 8 2 0 0 4 年软件威胁事件统计 由于计算机软件具有不同于一般文学作品的特性,是逻辑、智力产品,其能见 性较差,难于测量和控制,用法律来保护计算机软件有着不可避免的缺陷。这主要是 因为法律只保护计算机软件的表现形式和复制问题而不保护其构思,但对于计算机 软件来说,构思是决定其价值及成败的关键,而根据同一构思又极易开发出表现形 式不同的软件,软件开发者当然希望对其构思技巧和技术方案享有较长时间的专有 权,而不是特别在乎计算机软件表现形式的保护。因此,如何对软件进行本质上的 保护,使攻击者更难于对软件代码迸行窃取和篡改是开发者更为关心的。软件防篡 改技术作为一个年轻的、不成熟的软件保护技术的分支,正受到业界越来越多的关 注。 软件保护受到越来越广泛的重视,从软件销售商到多媒体( 电影、音乐) 提供商, 他们都不希望自己的知识产权被侵犯,从而导致了软件保护技术的研究热潮。微软 目前投入巨资支持研究下一代的可信赖计算平台- - 一n g s c b ( n e x t g e n e r a t i o n s e c u r ec o m p u t i n gb a s e ) 忉,n e t w o r ka s s o c i a t e 针对恶意主机环境下安全运行移 动a g e n t 正在进行s e l f - p r o t e c t i n gm o b i l ea g e n t s 的研究晒1 。当前已存在的软件 保护技术主要包括嗍:代码混淆( c o d eo b f u s c a t i o n ) 、软件篡改抵制( s o f t w a r e t a m p e rr e s i s t a n c e ) 、多样性( d i v e r s i t y ) 、软件水印( s o f t w a r ew a t e r m a r k ) 、 时间限制模式( t i m e - 1i m i t e ds c h e m e s ) 等。其中代码混淆技术作为一个与加密技术 互补的,针对逆向工程的的安全分支,正受到越来越多的关注。 本文主要涉及代码混淆技术。它是一个很年轻的学科分支,发展还不够成熟。 2 用于软件保护的代码混淆技术研究 1 2 代码混淆技术当前研究现状 代码混淆技术是近几年才发展并兴起的一种新技术。第一次对代码混淆进行系 统的研究是在上世纪9 0 年代末开始的,是j a v a 语言的迅速发展引起了对混淆技术 的研究热潮。这是因为j a v a 目标代码字节代码( b y t ec o d e ) 很容易被反编译为 j a v a 源代码,这就迫切要求有效的保护字节代码的方法。这一领域中的大部分工作 是由c o l l b e r g ,t h o m b o r s o n n 0 1 3 1 ,l o w 和c h e n x iw a n g 做出的。 c o l l b e r g 伽第一次对混淆转换进行了详细的总结和分类,也首次提出了混淆转 换的有效性与性能的若干评价标准。他将混淆转换分为四类:外形混淆转换、控制 混淆转换、数据混淆转换以及预防性混淆转换。 外形混淆转换目的是改变源程序的格式信息,包括混乱变量名、去除注释以及 改变程序文本格式;控制流混淆转换包括增加混淆控制分支以及控制流重组;数据 混淆转换包括存储与编码转换、聚集转换( 将多个变量或对象组织在一起) 、次序转 换;预防性混淆转换被设计为使用添加别名等方法抵抗知名的反混淆器的攻击。文 中提出的混淆转换算法普遍适用于高级语言。但是未涉及实现细节。 c h e n x iw a n g 在文献 1 4 1 6 中实现了在c 语言源代码上的若干种控制混淆转 换与数据混淆转换。w a n g 还给出了混淆转换造成的性能过载以及混淆转换对静态分 析工具i b mn p i ct o o l n 力以及r u t g e rp a ft o o l k i t n 踟的有效性。 另外,w a n g 给出了理论证明,证明了其采用的混淆策略对静态分析来说是 n p h a r d 问题。 一 h o h h l n 们提出用带有时间限制的黑盒( t i m e - 1i m i t e db l a c kb o x ) 方法来保护移动 a g e n t 。这里的黑盒就是指混淆转换过的a g e n t 程序。对移动a g e n t 进行逆向工程, 做出有意义的发现或修改需要一定的时间,据此,限制移动a g e n t 在目的主机上运 行的时间。在派发移动a g e n t 的之前,需要对其进行混淆转换,这增加了逆向工程 的代价,从而延长在目的主机上的运行时间。 包括移动a g e n t 在内的程序都可能受到黑盒测试攻击。h o h h 啪3 提出了一个协议 用来检测移动a g e n t 的运行。 另外,在文献 2 1 ,2 2 中,提出了针对可执行代码和汇编指令的混淆技术。 1 3 主要研究内容 本文的研究内容主要包括几个方面: 分析了当前软件安全领域中相关软件保护技术的研究现状,并针对代码混淆技 术进行了系统的研究。与此同时,我们设计并实现了一个代码混淆系统原型j o t , 3 硕十学位论文 该系统是一个基于j a v a 字节代码的综合代码混淆系统,主要实现了外形混淆和类结 构混淆。 分析了恶意主机的攻击模型,各种攻击描述,包括逆向工程、篡改等,以及相 应的防御方法、防御体系,如,代码混淆、软件篡改抵制、软件多样性、软件水印 和软件加密等。 分析了逆向工程的概念、逆向工程的分类、逆向工程的研究方法等。并研究了 形式化方法在逆向工程中的应用。 研究了当今主流的代码混技术,内容主要涵盖外形混淆、控制流混淆、数据混 淆、类结构混淆以及预防性混淆这五类混淆技术,揭示了混淆变换具有的一些特性, 基于这些特性可以创建一系列的混淆算法。 根据对软件保护技术的系统研究,本文提出了一个通用软件保护模型和面向对 象程序的混淆转换模型。该软件保护模型涵盖了5 种安全服务:机密性、完整性、 可用性、可靠性、鉴别,对具体应用领域的软件保护策略的制定具有指导意义;面 向对象程序的混淆转换模型对制定具体的混淆转换方案具有指导意义。 1 4 本文结构及章节安排 本文内容安排如下: 第1 章绪论。简要说明了此研究工作的相关背景、国内外该领域研究现状以及 研究的主要内容。 第2 章应用安全与软件保护。主要介绍了应用安全以及软件保护的概念、范畴, 并分析了恶意主机环境下的攻击手段以及相应的防御措施。 第3 章逆向工程技术。主要要讨论了逆向工程的分类、逆向工程的研究方法、 逆向工程的应用及逆向工程的发展方向。并研究了形式化方法在逆向工程中的应用。 第4 章代码混淆技术。主要研究了当今主流的代码混淆技术。 第5 章软件保护模型与混淆转换模型。提出了一个通用软件保护模型和面向对 象程序的混淆转换模型。 第6 章原型系统j o t 的设计与实现。主要介绍了j o t 的分析、设计与实现的过 程。 第7 章结论与展望。总结了论文的研究成果,并对后续的研究工作做出规划。 4 第2 章应用安全与软件保护 2 1 应用安全 应用安全( a p p l lc a t i o ns e c u r i t y ) ”“足一个九的安伞概念,如罔2 - 1 所不。它 涵盖了当今几乎所有安全问题。上一章中谈到的恶意代码问题和恶意丰机问题都属 于应用安全。应当指出,构建一个安全的系统,必颁考虑每个层面的安全细节它 们是环环相扣的,有哪一个方面疏忽了,就有可能像多米诺骨牌一样,导致系统整 个安全防线崩溃。何滑应用安全呢? 麻用安全包括,或者说依赖于3 方面的内容: = i 三 区圈区习e 耍l 陶21 应用安全体系结构图 数据安全:数据安全包括在数据存储和传输过程中的机密性和完整性保护。数 据安全技术或者更直接地说加密技术的基本前提假设是:通信的端点是可信赖的。 然i 血这个假设在应用安全的其他领域内并不总是成立的。 网络安全:包括保护( 可访问、可用性、完整性) 网络资源、网络设备、和服务( 带 宽、连接、平台) 。相应的安全机制包括:防火墙、八侵监测系统、系统访问控制机 制等。 软件安全:软一安全被定义为保护软件( 包括软件中的数据) ,防止非授权访问 与使用、篡政、分析和从中挖掘信息。软件安全依赖于3 方面的内容:软件保护 ( s o f t w a r ep r o t e c t l0 1 3 ) 、安全代码( s e c u r i t yc o d e ) 和威胁模型( t h r e a dm o d e l ) 。 软件保护不同于拷贝保护( c o p yp r o t e c t i o n ) ,软件保护包含了更广的原则,方法 和技术,例如,提供了防止缓冲区溢出攻击、逆向工程、恶意篡改( t a m p e r ) ,非授 硕士学位论文 权访问与使用软件、内容保护、非授权的使用软件处理的数据( 如,音乐、视频等) 。 因此,拷贝保护是软件保护的一个方面。软件保护也不同于安全代码( s e c u r i t y c o d e ) ,安全代码是应用程序的一部分,它提供了鉴别( a u t h e n t i c a t i o n ) 等功能。 应当说,安全代码是实现软件安全的许多机制( 安全机制指的是安全策略的实现) 之 一。一个应用是由3 部分软件构成的:功能代码、错误处理代码、安全代码。安全 代码不能提供所有的安全功能,另外,安全代码也有可能受到攻击,所以必须在3 部分软件之上实施软件保护,比如,进行混淆、数据加密等。当前己经存在的软件 保护技术主要包括:代码混淆、软件篡改抵制、软件多样性、软件水印、时间限制 模式等。 2 2 软件威胁模型 2 2 1 什么是威胁模型 威胁模型定义了一个系统可能遇到的威胁,这些威胁是根据相关类型的攻击和 系统的环境条件和假设得到的口羽。相关的问题包括:哪些资源需要保护、针对哪种 恶意攻击进行保护等。而回答上述问题需要进行风险评估( r i s ka s s e s s m e n t ) :分 析威胁与系统弱点、估计潜在的损失、估计可能的特殊攻击及其成功的可能性。威 胁模型的质量决定于它在多大程度上反映了系统真正的运行环境和系统实际中遇到 的威胁。威胁模型需要随着攻击的不断产生做不断的调整。有些威胁模型就不能在 新的环境下继续使用。r e s c o r l a 幽3 提出了两个基本假设,许多著名的协议,包括 s s l 都是建立在其假设之上的:( 1 ) 协议中的通信端点是可信赖的;( 2 ) 通信的中间 过程是脆弱的,是受攻击控制的。然而第一个假设在某些环境中己经不成立了,比 如2 0 0 3 年红色代码w o r m 破坏了大量主机的完整性。加密不能解决所有的安全问题。 2 2 2 三种基本的威胁模型 软件威胁模型主要存在以下三种: ( 1 ) 网络威胁模型:攻击来自网络外部,来自远程。典型威胁包括:缓冲区溢 出、协议攻击、恶意代码等。 ( 2 ) 内部威胁模型:攻击来自网络内部,攻击者具有一定的权力。典型威胁包 括:篡改用户权限、获取软件内部信息等。 ( 3 ) 恶意主机威胁模型:在这种假设下,一个应用程序运行于恶意主机上,该 应用可能受到来自该主机的攻击,例如,攻击来自操作系统、内核、其他的应用、 6 用于软件保护的代码混淆技术研究 甚至硬件等。攻击者拥有一切特权,包括访问运行代码、安装使用辅助攻击软件、 硬件工具等。这种来自恶意主机的攻击被称之为白盒攻击( w h i t e b o xa t t a c k ) ,防 御这种攻击需要专门的软件保护技术。它不同于黑盒攻击( b l a c k b o xa t t a c k ) ,黑 盒攻击只能监视软件的输入和输出;也不同于负效应攻击( s i d e c h a n n e la t t a c k ) , 攻击者能监视软件运行的负效应。白盒攻击典型的威胁包括:盗版( 数据及软件) 、 非许可使用、篡改数据及程序、窃取软件中嵌入的信息( 比如算法) 及知识产权等。 有关这三种威胁模型的比较如表2 1 所示。 表2 - 1 三种威胁模型的比较 网络威胁模型内部威胁模型恶意主机威胁模型 攻击者的权利无一此全部 攻击目标位置远程局域网内或本地主机本地主机 主机是否受信任是是 否 2 3 软件保护措施 :本文对当前主流的五种软件保护方法进行了研究:代码混淆( 防御逆向工程) 、 篡改抵制( 防御软件篡改,保护软件完整性) 、软件多样性( 防御恶意主机环境下的软 件自动攻击) 、软件水印( 鉴别和保护所有者版权) 、软件加密。 关于代码混淆是本文研究的主题,我们将在第4 章重点讨论。 2 3 1 篡改抵制 , 代码混淆对软件提供的保护,主要用于防御逆向工程。逆向工程的目标是理解 程序,因此它成为软件篡改的前提。不理解程序是无法做出有意义的篡改的,至多 是破坏性篡改。篡改抵制的目标就是要检测出程序的完整性是否被破坏,即,是否 被篡改。 这个领域的基础性研究是由a u c s m i t h 汹1 和g r a u n k e 啪1 做出的。a u c s m i t h 给 出了篡改抵制软件的定义( 软件自己能够在恶意主机环境下抵制被观测和被修改) i 并提出了一个基于i v k ( i n t e g r i t yv e r i f i c a t i o nk e r n e l ) 的篡改抵制模型,能够让 程序自动检测自身关键代码段的完整性。 h o r n e 等提出了一种类似的设计方案,但是在软件中嵌入了许多的用于检测 的方法,每个方法负责检测一小部分代码的完整性。这种嵌入多个检测方法的设计 增大了系统的信息嫡,使得攻击者很难找到并去除整个检测功能。 7 硕士学位论文 另外,c h a n g 和a t a l l a h 瞳引提出了一种设计,在软件中嵌入多个守护者,每个 守护者负责不同的安全工作,比如最粗略的设计是:嵌入两个守护者,第一个负责 关键代码段的完整性检测,另一个负责当完整性被破坏时对程序进行自动修复。 2 3 2 软件多样性 软件的多样性在近些年来受到越来越多的关注。其思想来源于自然界:多样性 能够保护一个物种不因为一种单一的病毒或疾病而全部消亡。同样,多样性能够保 护软件,如果同一款软件在完成相同的功能下具有不同的实现,那么攻击者发现的 漏洞只是其中一个软件的漏洞,对其他的无效。 当然不可能把软件多样性的任务交给程序员,同时开发若干个版本的相同功能 的软件,这样的代价太大了,目前多样性的实现是通过自动转换工具实现的。f o r r e s t 等1 提出了多种实现软件多样性的方法。 2 3 3 软件加密 软件的加密不同于数据的加密,它只能是“隐藏。无论你是否愿意让合法用 户或是解密高手( c r a c k e r ) 看见这些数据( 软件的明文) ,软件最终总还是要在机 7 器上运行,对机器而言,它就必须是明文。既然机器可以“看见 这些明文,那么 解密高手,通过一些技术,也可以看到这些明文。于是,从理论上,任何软件加密 技术都可以破解。只是破解的难度不同而已。有的软件要让最高明的解密高手忙上 几个月,有的可能不费吹灰之力就被破解了。所以,软件加密的任务就是增加解密 高手的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要 大,从而使解密高手的破解变得毫无意义。 2 3 4 软件水印 软件水印是近年来涌现的软件产品版权保护新技术,可以用来标识作者、发行 者、所有者、使用者等,并携带有版权保护信息和身份认证信息,可以鉴别出非法 复制和盗用的软件产品。通过网络传输的数字产品很容易被恶意的个人或团体在未 经许可的情况下非法使用,因而网络世界中数字产品版权保护问题成为人们亟待解 决的问题。软件水印技术就是在这种情况下产生的。 根据水印的加入位置,软件水印可以分为代码水印和数据水印。代码水印隐藏 在程序的指令部分中,而数据水印则隐藏在包括头文件、字符串和调试信息等数据 中。根据水印被加载的时刻,软件水印可分为静态水印和动态水印。静态水印存储 8 用于软件保护的代码混淆技术研究 在可执行程序代码中,比较典型的是把水印信息放在安装模块部分,或者是指令代 码中,或者是调试信息的符号部分。动态水印保存在程序的执行状态中,而不是程 序源代码本身。这种水印可用于证明程序是否经过了混淆转换处理。动态水印主要 有3 类:e a s t e re g g 水印、动态数据结构水印和动态执行状态水印。其中,每种情况 都需要有预先输入,然后根据输入,程序会运行到某种状态,这些状态就代表水印。 e a s t e re g g 水印无须检测,它通过一个输入产生一个输出。比如输入一个字符串, 然后屏幕上就显示出版权信息或一幅图像;动态数据结构水印的机制是:输入特定 信息激发程序把水印信息隐藏在堆、栈、全局变量域等程序状态中。当所有信息都 输完之后,通过检测程序变量的当前值来进行水印提取。可以安排一个提取水印信 息的进程或在调试器下运行程序查看变量取值;动态执行过程水印是指,当程序在 特定的输入下运行时,对程序中指令的执行顺序或内存地址走向进行编码生成水印。 水印检测则通过控制地址和操作码顺序的统计特性来进行。 目前己经存在多种水印算法。c o l l b e r g 和t h o m b o r s o n 啪1 提出了一种动态图 水印技术,即把软件水印隐藏在程序动态建立的图结构拓扑中;由于指针的引用, 使得控制动态图结构的那部分代码不易分析,因而很难对图进行保持语义变换,而 且证明这种结构是否被篡改比证明代码或纯数据更容易些。 a k i t o 和h a j i m u 懵u 提出一种针对j a v a 程序的水印算法。这种算法的基本思- 想是,在源代码中加入一些冗余代码,这些冗余代码不参与程序的执行。 2 3 5 代码混淆 本文将在第4 章讨论代码混淆技术,这也是本文研究的重点。 2 4 本章小结 防御恶意主机的攻击远远难于防御恶意代码的攻击1 。防御恶意代码的攻击 只需要限制程序的运行即可,然而,我们却无法限制一台自主主机的行为,主机能 够利用任何可能的技术来挖掘程序中的敏感数据,内存中的执行代码,并可以随意 破坏程序的完整性。唯一受限制的因素就是主机的资源。当前普遍被接受的观点是, 彻底的对软件的保护是一个不可能达到的目标嘲,最近的研究结果表明,在一定程 度上对软件的保护是可以实现的。 混淆转换在保持功能的前提下将一个程序转换成另一种形式,转换后的程序相 对更加难以进行逆向工程;反篡改技术使得对目标程序的任何改动都将被自动检测 出来,这是一种被动的防御技术;多样性能够防御恶意主机环境下的软件自动攻击; 9 硕士学位论文 软件水印技术在软件产品中插入一段作者的版权信息,从而能够鉴别软件的归属, 即知识产权。另外,在商业领域应用的软件保护技术大多是基于硬件实现的,比如 加密狗矧,智能卡片矧等。 1 0 第3 章逆向工程技术 3 1 概述 “逆向工程 一词来自硬件领域,是通过检查样品来开发复杂硬件系统规约的 过程7 1 ,主要指研究他人的系统,发现其工作原理,以达到复制硬件系统的目的【蚓。 但是,逆向工程也同样适用于其他领域,逆向工程在软件工程领域中是一个较新的 令人感兴趣的领域旧1 。 目前,逆向工程技术的重要性已经引起重视,得到了国内外学术界和商业界的 广泛认同。在学术界,面向逆向工程领域的国际会议w c r e ( t h ew o r k i n gc o n f e r e n c e o nr e v e r s ee n g i n e e r i n g ) 、i w p c ( t h ei n e r n a ti o n a l w o r k s p o p o np r o g r a m c o m p r e h e n s i o n ) 和p a s t e ( t h ew o r k s h o po np r o g r a ma n a l y s i sf o rs o f t w a r et o o l s a n de n g i n e e r i n g ) 每年举行一次。卡内基梅隆大学软件工程研究所成立了专门的再 工程中心,致力于逆向工程的研究。i b m 研究中心设立了“软件工程中关注点的多 维分解研究项目,研究工作已经进行了多年。 3 1 1 逆向工程的概念 在软件领域中,迄今为止还没有逆向工程的标准定义。一般将逆向工程定义为 包含两个步骤的过程:第一步分析目标系统,标识系统对象及其关系;第二步创 建不同形式或更高抽象层次的系统表示。s c o t tr t i 1l e y 将抽取和抽象进一步精 化为建模、抽取和抽象三个步骤: ( 1 ) 建模,采用建模技术构造应用程序的领域模型; ( 2 ) 抽取,利用适当的抽取机制从目标系统中收集原始数据; ( 3 ) 抽象,对目标系统进行抽象,以辅助系统理解并允许浏览、分析和表示抽象 结果。 国家自然科学学科发展战略报告计算机科学技术部分中是这样定义软件逆向工 程的h :从可运行的程序系统出发,生成对应的源程序、系统结构以及相关设计原 理和算法思想的文档等。从这个定义可以看出,软件逆向工程可以用于较低级的抽 象层次,例如把可执行程序转换为源代码,但主要是用于将源代码转换为更高抽象 层次上的表示,如控制图、数据流图和类关系图等h 钉。 硕士学位论文 下面是与逆向工程相关的几个术语: ( 1 ) 再文档( r e d o c u m e n t a t i o n ) :根据源代码,在同一层次上创建或修改系统文 档。 ( 2 ) 设计恢复( d e s i g nr e c o v e r y ) :结合目标系统、领域知识和外部信息认定更 高层次的抽象。 ( 3 ) 重构( r e s t r u c t u r i n g ) :保持系统外部行为( 功能和语义) ,在同一抽象层次 上改变表示形式。 ( 4 ) 再工程( r e e n g i n e e r i n g ) :结合逆向工程、重构和正向工程对现有系统进行 审查和改造,将其重组为一种新形式。 它们之间的关系如图3 - 1 h 3 1 所示。 正向工程 逆向工程 图3 - 1 逆向工程关系图 3 1 2 逆向工程技术分类 重均 再工程 对于软件逆向工程技术,可以分为形式化技术和非形式化技术1 。非形式化方 法是基于代码的词法结构,并依赖于模式匹配及用户驱动的聚集技术的方法。非形 式化技术易于产生结构和功能抽象,模式匹配和聚集技术是非形式的,因为被构造 的设计陈述是非形式化的,并且这些技术缺乏严格方法来验证在源和设计之间的一 致性。形式化技术是基于一些形式化的方法从源代码来导出其规格,形式化的基础 可以归结为数学逻辑,所以每一步都可以形式化的验证。两者主要的不同是对于形 式化规格语言的应用。形式化规格语言有良好定义的句法和语义i 因此形式化技术 又可以用来构造证明的关联引用规则,用来严格验证逆向工程过程的每一步的正确 性。 非形式化技术又可以分为基于计划的和基于解析的两种子类型,基于计划的技 术主要依赖用模式匹配来分辨代码中的计划,这是学术界和商业组织的主流。一个 1 2 用于软件保护的代码混淆技术研究 程序计划是程序中承担一些抽象功能的一个计算单元所包含的描述,它可以是连续 的或分散的代码段。基于解析的技术是用编程语言的句法结构特点分析一个程序, 用来构造源代码的高层结构抽象。 如果一个逆向工程技术的步骤有一个形式化的数学基础,那么它是形式化的。 它把源程序作为输入,生成一个形式化的规格。形式化的逆向工程技术可以分为两 类:基于知识或转换规则的转换技术和应用推导或翻译规则的翻译技术。软件转换 和软件翻译都是把个规格从一种形式变换到另一种形式而保持软件的语义不变, 但是它们的自动化程度不同。它们主要的不同是应用域和编程语言的高层知识结合 到转换和翻译规则中的程度不同。对于转换,规则一般涉及转换编程语句聚集为简 单的、等价的语句,或简洁的形式化规格。为处理不同的聚集组合,需要很多的规 则。而翻译涉及许多基于单个原子语句的规则,如赋值、条件和循环语句。 ” 3 1 3 逆向工程研究方法 现有的逆向工程分析方法主要有以下几种m 1 : ( 1 ) 词法分析和语法分析。 该方法直接对程序源码进行分析,已经发展得比较成熟。通过词法分析可以得 到程序信息的多种有用表示,其中最常用的是交叉引用列表。通过语法分析可以得 到两类表示:分析树( p a r s et r e e ) 、抽象语法树a s t ( a b s t r a c ts y n t a xt r e e ) 。其 中,分析树只是指导分析过程,是比较原始的结果。分析树显示了程序语句的分解 过程,包含和程序的实际含义无关的信息。去除分析树的无关信息后得到a s t ,a s t 只包含和程序实际内容相关的细节,是更复杂的程序分析工具的基础。 ( 2 ) 图形化方法。 。 图形化方法包括控制流分析、数据流分析以及程序依赖图。 控制流分析对执行语句的若干可执行路径进行分析,确定程序的控制结构,建 立控制流图。控制流分析有两种形式:过程内分析和过程间分析。过程内分析通过 构建控制流图c f g ( c o n t r o lf l o wg r a p h ) 进行,可确定子程序内语句的执行顺序。 构建c f g 必须先确定子程序的基本块。一个基本块对应c f g 中一个节点,是一些 连续语句的最大集合。在该语句集合中,控制只能从第一条语句开始,也只能从最 后一条语句经条件分支或非条件分支转出。就是说基本块的第一句执行,基本块中 所有语句都会执行。基本块可以直接通过遍历a s t 确定,再用控制流弧线连接基本 块来创建c f g 。过程间控制流分析是确定系统子程序之间可能的控制流路径的过程, 用调用图( c a l lg r a p h ) 表示。调用图给出了一个系统中对子程序的可能调用。调用 图是树、有向无环图还是一般的图由系统结构决定。调用图中的结点和子程序对应, 硕士学位论文 节点之间的有向弧标识出调用关系。控制流分析对执行语句的若干可执行路径进行 分析,确定程序的控制结构,建立控制流图。 数据流分析是在不执行程序的情况下,收集程序数据的运行时信息,分析程序 中数据对象之间的关系,数据流分析关注于解决程序中从定义到使用的过程的相关 问题,比控制流分析要复杂得多。 程序依赖图是数据流分析的进一步改进,比数据流分析更复杂。在程序依赖 图中,节点表示语句和谓词表达式( 或运算符和操作数) ,边表示该节点的操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论