(计算机应用技术专业论文)对msil代码和本地代码的保护算法及实现.pdf_第1页
(计算机应用技术专业论文)对msil代码和本地代码的保护算法及实现.pdf_第2页
(计算机应用技术专业论文)对msil代码和本地代码的保护算法及实现.pdf_第3页
(计算机应用技术专业论文)对msil代码和本地代码的保护算法及实现.pdf_第4页
(计算机应用技术专业论文)对msil代码和本地代码的保护算法及实现.pdf_第5页
已阅读5页,还剩90页未读 继续免费阅读

(计算机应用技术专业论文)对msil代码和本地代码的保护算法及实现.pdf.pdf 免费下载

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

文档简介

华东师托大学硕士学位论文对m s i l 代码和本地代码的保护算法搅实现 摘要 计算机软件是一种极易复制篡改的特殊商品,加上各种政治经济和文化的原 因,使得目前对于软件的知识产权保护十分薄弱,本文提出了几种技术手段,力 图在技术上提高对软件知识产权的保护力度。 本文首先列举了目前存在的保护技术,包括硬件辅助的软件保护技术,加壳 技术,代码混淆技术,软件水印技术,防篡改技术等等。 在此基础上本文提出了3 个自己的保护算法:基于自动机的指令自修改技术: a b s m c ( a u t o m a t a b a s e ds e l f m o d i f yc o d e ) 技术是对传统的混淆技术的一种改进: 自适应动态图水印技术:s a d g w ( s e l f a d a p t i v ed y n a m i cg r a p hw a t e r m a r k s ) 是 对动态图水印技术的发展:超粒度混杂技术1 4 6 1 :h g i ( h y p e rg r a n u l a r i t y i m m i n g l i n g ) 和基于瘦虚拟机的指令集交替技术【5 6 j :t v m b i s a ( t h i nv i r t u a l m a c h i n eb a s e di n s t r u c t i o ns e ta l t e r n a t i o n ) 是对传统的加壳技术的一种改进。并且 本文在提出这些算法后,分析说明了这些算法在保证运行效率的情况下,能大大 提高了目标软件的安全性。 a b s m c 技术的基本思想是,在目标软件中插入许多会随着程序的运行而发 生改变的代码( 使用自动机控制代码的变化) ,由于很多代码都是在程序运行的 时候动态生成的,所以攻击者很难从静态代码直接得到目标软件的意图,也就是 说本技术能有效的防止攻击者的静态分析,并且在一定程度上能减缓攻击者的动 态调试的进行,所以比过去的混淆技术在安全性方面有很大的提高。 s a d g w 技术是根据以往针对动态图水印技术的各种攻击方法,而提出的西0 进方案。自适应动态图水印技术分析目标软件的数据结构,然后提取出一部分放 到水印中去,然后对使用这部分数据结构的代码进行混淆。这样攻击者对目标软 件中的水印修改的时候,就会造成目标软件的数据结构被修改,最终导致目标 软件运行失败。 h g l 技术是对本地代码进行保护的,它通过高安全性的加密算法,对目标软 件进行分割加密,保证内存中只有一块是明文的表示形式。并且各个块之间都要 进行校验,所以大大提高了攻击者的攻击难度。而t v m b i s a 在h g i 的基础上, 利用瘦虚拟机在保证安全行的前提下,大大提高了运行效率。 本文实现了一个可扩展的保护系统:f i s h e r p r o t e c t o r ,用于对目标代码进行保 护。本系统包括反汇编,反编译,用户要求控制,各种保护插件( 每种插件是一 种保护算法的实现) 。通过本系统不但为本文的算法提供了实践的平台,并且以 后的各种算法,只要符合本文提出的接口标准,都可以借助本系统运行,省去了 很多重复性的工作。本系统由多种语言协同开发而成,对于托管代码主要由c 撑 与m s i ” 编生成的程序处理,而本地代码主要出c + + 生成的程序处理。目前虽 然本系统仅仅支持最核心的指令,但是对特定软件的执行结果证明了本系统的有 用性和可靠性。 最后本文借助微软的测试工具( a h c 雨t l c s cm a n a g e dc o d eb e n c h m a r k ) 证明了, 本文实现的各种保护插件在运行时问,保护强度上都是符合原来的设计要求的。 关键 司:知识产权保护,软件保护,反盗版,混淆,水印,加密,逆向工程 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法岌实现 a b s t r a c t c o m p u t e rs o f t w a r ei sak i n do fs p e c i a lg o o d st h a tc a nb ee a s yc o p i e d ,t e m p e r e d a l o n gw i t hs o m ep o l i t i c a la n de c o n o m i cr e a s o n s ,c o m p u t e rs o f t w a r ep r o t e c t i o ni s v e r yw e a k t h i sd i s s e r t a t i o nb r i n g so u ts e v e r a lt e c h n i c a lw a y st oe n h a n c ei n t e l l e c t u a l p r o p e r t yp r o t e c t i o nw i t h i nt h es o f t w a r ed o m a i n f i r s tt h i s d i s s e r t a t i o ni n t r o d u c e ds o m ee x i s t i n gp r o t e c t i o nt e c h n o t o g i e s ,i n c l u d i n g : h a r d w a r ea s s i s t s o f t w a r e p r o t e c t i o n ,s h e l lt e c h n o l o g y ,o b f u s c a t i o n ,s o f t w a r e w a t e r m a r k i n g & t e m p e r i n g - p r o o ft e c h n o l o g y a f t e rt h ei n t r o d u c t i o no fe x i s t i n gp r o t e c t i o nt e c h n o l o g i e s ,1w i l lb r i n go u tm y p r o t e c t i o ns o l u t i o n s f 1 ) a b s m ci s an e wk i n do fo b f u s c a t i o n p r o t e c t i o n ( 2 ) s a d g w :a n i m p r o v e m e n tt ow e l lk n o w nd y n a m i cg r a p hs o f t w a r ew a t e r m a r k ( 3 ) h g i t v m b l s a :n e wk i n d ss h e l lt e c h n o l o g y a b s m cw i l la d ds o m ed y n a m i cc o d e st ot h et a r g e tp r o g r a m m e ( u s i n gaa u t o m a t i o nt o c o n t r o lt h ec o d et r a n s l a t i o n ) t h e s ed y n a m i cc o d e sc h a n g ew i t ht h er u n n i n go ft h e t a r g e tp r o g r a m m e t h e r e f o r e ,i ti sh a r df o ra t t a c k e r st ou n d e r s t a n dt h ei n t e n t i o no ft h e t a r g e tp r o g r a m m e i no t h e rw o r d s ,a b s m cc a nb l o c kn e a r l ya l lt h es t a t i ca n a l y s i sa n d s l o wd o w nt h ed y n a m i cd e b u g g i n g t h e r e f o r e ,i ti ss a f e rt h a nt h et r a d i t i o n a lw a y s s a d g wa n a l y s e sd a t as t r u c t u r e so ft a r g e ts o f t w a r e ,a n dg e to u ts o m eo ft h ed a t a s t r u c t u r e s ,m e r g et h e mw i t hd y n a m i cg r a p hs o f t w a r ew a t e r m a r k ,f i n a l l yo b f u s c a t e c o d e su s i n gt h e s ed a t as t r u c t u r e s s ow h e na t t a c k e r sm o d i f yt h ew a t e r m a r k ,t h e s ed a t a s t r u c t u r e sa r em o d i f i e dt o g e t h e r t h er e s u l to fa t t a c k e r s a c t i o n si sm a k i n gt a r g e t p r o g r a m m ec o l l a p s e d , h g lt e c h n o l o g yi sa i m i n gn a t i v ec o d e sp r o t e c t i o n i tm a k e sf u l lu s eo fh i g hs e c u r i t y e n c r y p t i o na l g o r i t h m ,a n ds p l i tt a r g e ts o f t w a r ei n t ob l o c k s ,t h e ne n c r y p t se v e r yb l o c k t h et e c h n o l o g ye n s u r e st h e r ei so n l yo n eb l o c ki si no r i g i nf o r m ,a n dc r o s sc h e c k b e t w e e nb l o c k sm a k e sa t t a c k i n gt h et e c h n o l o g ym o r eh a r d o nt h i sb a s i s ,t v m b i s a u s eat h i nv i r t u a lm a c h i n et oe n h a n c et h ee x e c u t i o ns p e e d ih a v ec o m p l e t e da ne x t e n s i b l ep r o t e c t i o ns y s t e mi n c l u d i n gd e a s s e m b l y , d e - c o m p i l e , u s e rr e q u i r ec o n t r o l ,s o m ep r o t e c t i o np l u g - i n ( e a c hp l u g i ni sai m p l e m e n t a t i o no fo n e p r o t e c t i o nt e c h n o l o g y ) m ys y s t e mn o to n l yp r o v i d e sap l a t f o r mt oi m p l e m e n t i n g t e s t i n gm ya l g o r i t h m s ,b u ta l s oc a ns e r v ef o ra l g o r i t h m sw i l lf o r m e di nt h ef u t u r ea s l o n ga sf i t t i n gf o ro u ri n t e r f a c e ,t h em a n a g ec o d ep a r t so fm ys y s t e mw e r ew r i t t e nb y c # m s i l , t h en a t i v ec o d ep a r t sw e r ew r i t t e nb yc + + t h o u g hm ys y s t e mo n l y s u p p o r tp a r t so ft h ei n s t r u c t i o n s ,t h ee x e c u t i o nr e s u l t ss h o wm ys y s t e mi sp r o m i s i n g a tl a s t iu s em i c r o s o f t sb e n c h m a r kt o o l s ( a n c l c s cm a n a g e dc o d eb e n c h m a r k ) t o p r o v em ya l g o r i t h m s & i m p l e m e n t a t i o n sa r ep o w e r f u l i nt h et e s t i n gd a t a ,y o uc a n f i n dt h ec o s t ,r e s i l i e n c e ,s t e a l t ha r ea l lf i tt h eo r i g i n a lp l a n k e yw o r d s :i n t e l l e c t u a lp r o p e r t yp r o t e c t i o n ,s o f t w a r ep r o t e c t i o n ,a n t i p i r a c y , o b f u s c a t i o n ,w a t e r m a r k ,e n c r y p t i o n ,r e v e r s ee n g i n e e r i n g 华东师范大学硕士学位论文对m s t l 代码和本地代码的保护算法及实现 第一章引言 1 1 本文的现实意义: 根据b u s i n e s ss o f t w a r ea l l i a n c e ( b s a ) 和i n t e r n a t i o n a ld a t ac o r p o r a t i o n ( i d c ) 的 报告:全球软件盗版研究( g l o b a ls o f t w a r ep i r a c ys t u d y ) f l | ,全球盗版现象十 分严重,给各国造成了严重的损失。如图1 1 所示:在2 0 0 3 ,2 0 0 4 年世界范围内 有超过1 3 的软件被非法使用。而图1 2 中的数据说明了各个地区因盗舨引起的经 济损失。可以看出,仅仅欧盟每年就因为盗版损失1 2 1 亿美元。 图1 - 1 :世界各地区的盗版率 图1 2 :世界各地区因盗版引起的损失 盗版情况如此猖獗有以下原因: 1 :计算机软件极易复制,传播。并且由于最近由于i n t e r a c t 技术的发展和p e e r t op e e r 软件的风行,使软件的非法传播十分迅速,在现在的网络上传输几个g 的 文件或程序已经是一件很容易的事情。 2 :法律在知识产权问题处理上的困难:由于软件是一种特殊的商品,对软 件的非法使用的取证和诉讼很麻烦【2 】。并且由于一些别的问题,如价格歧视 3 】, 加上社会舆论和道德都在一定程度上接受软件盗版【4 】,所以盗版问题无论是从法 华东师范大学硕士学位论文 对m s l l 代码和本地代码的保护算法及实现 律上还是道德上都是难以处理的,但本文不涉及这些内容,本文仅仅包括从技术 角度保护知识产权。 3 :目前很多程序为了追求可移植性,纷纷以平台无关的格式发布( 又称为: 中间代码可移植代码,如:f a v a 的b y t e c o d e ;m i c r o s o f t 的i n t e r m e d i a t el a n g u a g e : m s i l ) ,这种与平台无关的格式,更接近于源代码( s o u r c ec o d e ) ,更容易反编译。 现在针对这种与平台无关的格式的反编译器,已经有很多种了:如最早的m o c h a ( 1 9 9 6 发布) 【5 】,到d a v a l 6 ,到现在流行的a n a l 【f i n o 【7 l o 本文将在第2 章中详细介绍 这些反编译器的工作原理。这一切都给盗版者提供了更好的技术条件。 5 :随着计算机技术的发展,现在的软件越来越复杂,软件厂商被迫投入更 多的资金和技术来开发软件,所以软件的价值也随之不断提高,这也为盗版者提 供了更多的利益。 由于盗版不但对软件厂商造成经济上的巨大损失,并且使公司的知识产权受 到侵害,进而在竞争中处于不利的位置。所以,已经有很多个人,公司和研究机 构针对软件知识产权的保护进行研究,并且提出了很多方案。但是结果却不是 十分理想,这些方案或是过于复杂,造成了软件效率的大副降低;或是强度不够, 很容易被攻破;或是对用户有过多的限制,造成了用户的不满;或是过于昂贵, 造成了软件的发布成本大副提高。总之,到目前为止还没有套完善的方案,能 防止对软件的非法使用。 本文在软件保护的算法和实践上作了一些尝试,得到了些成果。并且为以 后的工作奠定了坚实的基础。 1 2 本文的目标: 现在学术界普遍认为想完全保护程序的安全,不受盗版者的攻击是不可能 的。b a r a k 等在文献【8 】中,c h r i s t i a n 等在文献1 9 1 中,都表达相同的观点。那么是不 是面对盗版者的攻击就要束手无策昵? 事实上并不是这样的。目标软件通过各种途径,到达了攻击者( 这里指想要 非法占有或使用软件的人,又称h a c k e r 或c r a c k e r ) 的手中。攻击者可以利用任何 想用的方法来分析理解目标软件,所以从理论上来说没有任何方法可以阻止一个 意志坚定的攻击者破解目标软件。唯一的选择是利用各种方法,尽量拖延攻击者 的进度。 从现在的形势来看,恰当的运用各种软件保护方法,还是能够比较好的保护 自己的知识产权的。所以本文在第2 章中将对这些软件保护方法进行分类,并且 对各种方法进行大致的介绍在第3 章中将提出自己的软件保护算法。 本文的目标是达到以下的标准:( 1 ) 保护算法强壮性的标准:首先,对于用 本地代码格式发布的软件,由于使用本格式发布的程序比较难反编译( 这里的反 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法及实现 编译d e c o m p i l e 是指从某种汇编指令或中间表示形式自动生成某种高级语言的形 式,而反汇编d e a s s e m b l y 是指从机器指令生成某种汇编指令或某种中间语言形 式) ,所以可以达到比较高的保护标准。因此对于这种程序,本文提出的算法应 该使被保护的软件麓抵御静态分析和动态分析,能保证被保护的软件在一定的时 间内( 跟软件的复杂度有关) 不被破解( 这里是指,即保证验证用户合法性的代 码仍然有效) 。其次对于用与平台无关格式发布的软件:本格式比较容易被反编 译,所以保护的目标主要是防止静态分析,防止对被保护的软件进行自动的反编 译,防止被保护的软件的模块不被窃取。 ( 2 ) 保护算法效率的标准:如果使用某种保护算法保护后,被保护的程序 大小大了一倍,或运行效率低了一倍,那么即使这种算法再安全也很难有很大的 应用前景,本文将在第2 章中针对各种保护算法,制定不同的评判标准,但时间 和空间是开销是最重要的2 个标准。 1 3 本文的工作: 本文列举了目前存在的保护技术,包括硬件辅助的软件保护技术,加壳技术, 代码混淆技术,软件水印技术,防篡改技术等等。 接下来本文提出了3 个自己的保护算法:基于自动机的指令自修改技术 a b s m c ( a u t o m a t ab a s e ds e l f m o d i f yc o d e ) 技术是对传统的混淆技术的一种改进: 自适应动态图水印技术s a d g w ( s e l f a d a p t i v ed y n a m i cg r a p hw a t e r m a r k s ) 是对 动态图水印技术的发展;超粒度混杂技术h g i ( h y p e rg r a n u l a r i t yi m m i n g l i n g ) 是 对传统的加壳技术的一种改进( 其中还有进一步的改进:基于瘦虚拟机的指令集 交替技术t v m b i s a ) 。并且本文在提出这些算法后,会分析说明这些技术在保证 运行效率的情况下,大大提高了目标软件的安全性。 本文不但提出了这些算法,而且实现了一个可扩展的保护系统,本系统包括 反汇编,反编译,用户要求控制,各种保护插件( 每种插件是一种保护算法的实 现) 。通过本系统不但为本文的算法提供了实践的平台,并且对于以后提出的各 种算法,只要符合本文提出的接口标准,都可以借助本系统运行,省去了很多重 复性的工作,比如对目标软件进行各种分析,反汇编,反编译的工作。 最后本文借助微软的测试软件证明了,本文实现的各种保护插件在运行时 间,保护强度上都是符合原来的设计要求的。 毕末师范人学硕士学位论文对m $ i l 代码和本地代码的保护算法及实现 弟二章软件保护技术的发展现状 为了保护自身的利益,软件厂商提出了很多软件保护的方案,同样学术界也 有各种各样的方案,大致可以分为以下的几类:硬件辅助的软件保护技术,加壳 技术,代码混淆技术,软件水印技术,防篡改技术,还有其他一些不易分类的技 术。本章就针对各种软件保护技术进行介绍。 其中硬件辅助的软件保护技术,加壳技术主要是软件厂商的主要保护手段, 而学术界的方案主要是代码混淆技术,软件水印技术,防篡改技术。 而硬件辅助的软件保护技术,加壳技术主要用于本地代码的保护,代码混淆 技术主要用于与平台无关的代码的保护。其他方法既可阻用来保护本地代码也可 以用来保护与平台无关的代码。 2 1 硬件辅助的软件保护技术 硬件辅助的软件保护技术,是一组比较实际的技术,包括很多分支。其中大 多数的方案都是由各个公司提出的。而学术界的关注焦点主要是安全处理器技 术,针对安全处理器技术,学术界提出了很多具体能解决方案。 硬件辅助的软件保护技术的想法就是利用各种硬件,来帮助帮助保护软件, 如利用硬件作为钥匙,利用硬件防止非法拷贝,利用硬件防止对软件的非法篡改。 并且有很多成功的案例,至今还有很多公司致力于这种方式的软件保护。 2 1 1 光盘辅助的软件保护技术 最常见的硬件辅助的软件保护技术是利用软件的载体:如c d - r o m 或d v d - - r o m 来防止非法拷贝,文献 1 1 q b f f 0 出了一些这种技术( 如s a f e d i s c ,s e c u r o m ) 。这 种方法一般把软件进行加密,然后把密钥以数字签名的形式保存在光盘上;当软 件安装后,软件中的加载器会在光盘中提取密钥,然后根据密钥把原来的软件解 密出来。当然如果没有光盘,那么就无法找到密钥,也就无法进行解密。如图3 1 是这种方法的大体结构。 是这种方法的灭体结构。 图2 - 1 光盘辅助的软件保护 4 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算弦及实现 2 1 2 d o n g l e 技术 d o n g l e 技术也是一种很成熟的技术,国内把这种技术称为软件狗,但大致的 思想相同,也就是:使用一种硬件设备( 国内把这种硬件设备称为:狗) ,通过 某种接口( 事口,并口,u s b e i 等等) 与计算机连接,当软件运行的时候就会检 测是否有此硬件,若没有则中止运行。 d o n g l e 技术经过了几十年的发展,从简单的二极管到单片机至l j s m a r tc a r d ,电 路是越来越复杂,所采用的芯片也是越来越高级。并且生产厂商还故意隐藏硬件 的信息,甚至完全自己设计硬件,让你无法知道他的软件狗是如何制造的。想 直接从软件狗内部获取各种数据信息,再仿制这样一个狗实在很困难。在软件方 法也经历了很大的变化,从最初的仅仅查询软件狗是否存在,到后来的程序的密 钥放在软件狗中,到现在的把程序的核心代码放在软件狗中,安全性能不断提高。 文献【1 2 】列出了国内一家比较成功的软件狗厂商,在他们的解决方案中可以 看出,要攻击高安全级别的软件狗解决方案还是很困难的。 2 。1 3 安全处理器保护技术 安全处理器技术,一直是学术界的焦点,被认为能很好的解决软件保护和知 识产权问题,在文献【1 3 】【1 4 】中提出了这种技术的架构,如图2 2 所示,整个系统分 为2 个部分,左边的为可以信赖的部分,即安全处理器的内部,右边是不可信赖 的部分,即其外设部分,包括,内存,硬盘,网络设备等。此架构对不可信赖部 分的软件,进行加密,动态完整性检查,来保证软件的安全,仅仅当数据和指令 进入到可信赖部分( 安全处理器内部) 以后,才进行解密。这就保证了软件不被 篡改和非法使用。 图2 - 2 安全处理器技术的架构 s 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法及实现 2 1 4 其他硬件辅助的保护技术 当然还有很多其他的硬件辅助的保护技术,如i n t e l ,i b m 和东芝等公司提出 的c o n t e n tp r o t e c t i o ns y s t e ma r c h i t e c t u r e 【1 5 】,由于篇幅原因这里不再叙述。 2 1 5 硬件辅助的软件保护技术的不足 首先,硬件辅助软件保护技术的最大问题是成本,很多软件是靠销售量来达 到盈利的目的,单份软件的利润都很低,如果使用硬件辅助的软件保护技术,那 么硬件的成本要在整个产品的成本中占据很大的一部分,有时候,甚至占据整个 产品的5 0 以上( d o a g k 技术) 。所以对于这种软件,硬件辅助的软件保护技术 不适用。 其次,硬件辅助的软件保护技术给合法用户带来了很大的不便,比如对于光 盘辅助的软件保护技术,用户无法备份自己的光盘。并且用户的硬件丢失或损坏 了,他们将无法再使用自己的软件,这也是不合理的。 最后,硬件辅助的软件保护技术也不是完全安全的,在文献【】6 中可以看到, 微软的家用游戏机x b o x 是使用此技术的典型案例,但是x b o x 还是被攻击者成 功的破解了安全检查机制,破解后的x b o x 可以运行盗版游戏。 2 2 加壳技术( p a c k e r c r y p t e rt e c n o l o g y ) 加壳技术是指:为要保护的目标软件,附加上一些代码,这些附加的代码一 般都是先于程序运行,拿到控制权,负责保护软件不被非法修改或反编译。而负 责为要保护的目标软件添加这些代码的软件一般称为加壳软件。因为这些加壳软 件一般在对软件进行保护的同时会对目标代码进行优化和压缩,国外一般称为 p a c k e r c r y p t e r 。 这种软件保护方式一般针对以本地代码形式发布的软件,并且基本上是软件 保护公司的作品,他们是为没有太多软件保护经验的公司、个人提供最基本的软 件保护。从安全性能上来看,这种保护方法并不是很理想,并且对于程序的性能 有很大的影响,但是由于很多小公司不知道怎么保护自己的知识产权,所以这种 保护方案还是有很大的市场的。下面介绍2 个比较成功的加壳软件:( 1 ) a s p r o t e c t 1 7 1 ,( 2 ) x t r e m e p r o t e c t o r 【1 引。 a s p r o t e c t 是俄国人越e x e ys o l o d o v n i k o v 写的加壳软件,这个工具有很长时间 的历史了,并且它的加密强度的比较高。这个工具提出了很多新的技术,如:s h e , 各种流行的反跟踪反调试技术,b p m 断点的清除,已经被大多数同类软件所吸收。 更值得一提的当属r s a 的使用,使得d e m o 版无法被c r a c k 成完整版本;c o d e d i p s 也 源于此工具。r r 的处理即使到现在看来也是很强大的。此工具的特长在于各种加 密算法的运用,这也是别的同类工具学习它的地方。但是它的缺点就在于对于跟 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法及实现 踪和调试限制的太松,作者认为这样做的目的是为了不妨碍合法用户调试别的软 件。 x t r e m e p r o t e c t o r 是最近出现的一个加壳工具,这个工具的特点就是安全性比 较高,可以说是目前强度最高的加壳工具了。它的特色是:使用了非常多的精力 来对付攻击者,它使用驱动程序进入系统的核心层:血妒,驱动程序有反跟踪, 反调试,多线程解码,r u n t i m e 解码,繁多的花指令等等功能。用一般的调试 器,如:s o f r l c e 脱这个壳基本是不可能的,因为此工具对i n t 3 、i n t l 和d r x 来下的断点进行了严格的监控。所以说如果不利用硬件辅助调试,几乎无法攻击。 但是此工具也有很大的缺陷,那就是因为加入了很多保护代码,所以对被保护程 序的性能有很大的影响。 2 3 代码混淆技术 在过去,学术界一直不重视混淆技术,因为有更高级的高强度加密方法存在。 但是对于软件保护,高强度的加密方法就不像在别的地方那么有用了,首先如果 软件进行高强度的加密势必会带来软件性能的极大损失;其次,加密后的软件如 果要运行,势必要进行解密,那么必须把密钥放在程序可以存取的地方,那么攻 击者可以分析读取密钥的代码,得到密钥,然后利用密钥对软件解密。 现在代码混淆技术是软件保护技术的重要手段,尤其是对于以平台无关格式 存在的软件,代码混淆是最基本也是最有效的保护方法,其主要是防止攻击者的 反向工程攻击,其基本想法是对目标软件的代码进行等价变形( 保证程序的功能 不发生改变) ,隐藏程序的信息,使目标软件更难理解。 由于一般反编译工作都是对于与平台无关的代码进行的,所以本小节中仅仅 涉及与平台无关的代码,并不讨论本地代码的问题,对于本地代码中使用的相似 的技术本文将在“其他技术”小节中介绍。 2 3 1 目标评价标准 在文献【9 】中,c h r i s t i a n 提出了代码混淆的目标和评价标准,并且被广泛接受。 c h r i s t i a n 认为代码混淆的目标是对被保护的程序进行混淆变形( o b f u s c a t i o n t r a n s f o r m a t i o n ) ,使之更难理解。而混淆变形是指: p p 是混淆变形的充分条件是:( 1 ) 当p 不能中止时或者遇到错误不能中 止时,p 可以中止也可以不中止( 2 ) p 必须和p 有相同的输出。也就是说p 和p 必须有相同的可察觉行为( o b s e r v a b l e b e h a v i o r ) 。可察觉行为是指:用户可以觉 察到的行为,这意味着,变形前后有可能发生某些变化,比如创建文件通过互联 网发送消息等等,这要这些变化用户察觉不到,那么这种变化就允许的。 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法及实现 什么样的混淆变形怎么才是一个好的变形呢? 可以根据以下标准来判断混 淆变形的好坏: ( 1 ) p o t e n c e :混淆的力度标准,是指通过混淆使程序变得复杂的程度。 m c c a b e 认为程序的复杂性和程序中所含的断言数有判1 9 】;h a r r i s o n 认为程序的复 杂程度和程序中分枝结构,循环结构的嵌套层次有关【2 0 】;还有人认为和数据结 构的复杂程度有关【2 l 】;和跨基本程序块的变量引用有关f 2 2 1 ;和正规参数的个数 有关【2 3 】;和继承树的嵌套层次有关i 矧:以上的所有尺度都是衡量混淆力度的标 准的一部分。 ( 2 ) r e s i l i e n c e :混淆的伸缩性标准,是指程序混淆后,在多大程度上能抵挡 自动混淆去除技术的攻击。这和2 个难度有关,首先和需要编写自动除去混淆代 码软件的难度有关,其次是运行此混淆代码去除器所需要的时间和存储空间。 ( 3 ) s t e a l t h :混淆的隐蔽性标准:是指混淆代码,在多大程度上能和被保护 软件原来的代码类似,难以被攻击者发现。当然这个标准依赖于目标代码的性质。 ( 4 ) c o s t :混淆的效率标准:是指混淆以后,目标软件的时间或空间消耗的 增加不能太多。本标准是一个很重要的标准,因为如果没有本标准,那么可以简 单的增加代码长度,插入大量无用代码,这样就可以得到很好的混淆效果。但是 这种方法是无用的,如果一个1 m 的程序文件混淆后变为几十m ,并且运行的内 存需求增加了1 0 倍,运行时间增加l o 倍,那么就没有人会使用混淆技术了。 2 3 2 名字去除 由于程序中的各种名称:类名,结构名,方法名,属性名,局部变量名以及 各种用户自己定义的字符串;为攻击者提供了很多信息,所以要软件就必须首先 把这些名字替换成无意义字符串。实际上大多数早期的混淆器也仅仅进行名字去 除工作1 。1 。 下面以m i c r o s o f t n e t 的文件结构为例大致说明一下基本方法,具体内容可以 参考本文后面章节中的具体实现。名字去除工作比较容易完成,m i c r o s o f t n e t 中名字分为2 种,一种是系统使用的名字,如类名,方法名,局部交量名等,这 种名字放在文件的# s t r i n gs t r e a m 中;而第二种名字是用户自己定义的字符串,放 在# u ss t r e a m 中;别的地方要使用名字,都是向这2 种名字引用,并且所有的名 字一般以u n i c o d e 格式存放,所以只要根据文件的结构找到这些名字,修改并重 新为文件计算校验和即可。 实际上名字去除并不能带来很多的安全性的提高,对于富有经验的攻击者, 这种工作只能略微增加攻击的难度。 2 3 3 指令控制流混淆变形 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法及实现 对指令控制流混淆变形很多文章有过论述,大致可以分为3 类:( 1 ) 利用无 关代码隐藏程序的真正意图;( 2 ) 插入一些非结构化的代码,其没有对应的高级 语言表示形式,或者把目标程序的代码修改成非结构化的形式:( 3 ) 删除真正的 控制流抽象,或加入一些伪造的。文献【2 6 l 在总结前人工作的基础上提出一些比 较实际的方法。 2 3 3 1 不透明断言( o p a q u e p r e d i c a t e s ) 不透明断言( o p a q u ep r e d i c a t e s ) 是指:如果断言p 的值在混淆的时候是清楚 的,但是对于攻击者或者反混淆软件,p 的值是很难推断的;那么p 就是一个不 透明断言。 现在很多混淆器都依赖不透明断言来模糊程序的控制流程,使得反编译器无 法构造c f g 。但是对于一般程度的不透明断言,如图2 3 ,攻击者可以利用方法 内- h 法问静态分析来攻破此种不透明断言。 图2 - 3 低安全级别的不透明断言 对于许多高安全性能的不透明断言,虽然很难判别它的值,但是这种断言的 隐蔽性往往比较低,如图2 4 所示的情况就很典型,这种断言和原来程序的代码 没有相似的地方,很容易被攻击者找到。 图2 4 不透明断言具有高安全级别,低隐蔽性 文献【2 6 l 提出了一种比较理想的不透明断言。精确的动态分配空间的别名自动 分析,是一个早已被学术界公认为是困难的或者基本上不可能的闽题。所以文献 【2 6 】的基本想法是使用别名分析难题来构造不透明断言。 这里使用的方法是,加入的混淆代码维护一个动态修改的数据结构( 图或者 树) ,然后有一些指向这个程序结构的指针。由于此数据结构是动态变化的,所 以,想判断这些指针是否相等很困难的。这里就利用这些指针的相等性来构造不 透明断言。如图3 5 所示,指针f ,g ,指向动态结构g ,指针h 指向动态结构h , 显然f 和g 是可以相等的,但因为和h 不指向同一个结构,所以不可能相等。在结 构g 分割后,卿g 分别指向不同的结构g 和g ”,所以此时f ,g 是不可能相等的。 华东师范大学硕士学位论文 对m s i l 代码和本地代码的保护算法及实现 图2 - 5 利用动态别名分析构造不透明断言 可以看到图中的5 ,6 ,1 1 行是本方法构造的典型例子,可以看出这种不透明 断言和目标软件的代码比较接近,具有很高的隐蔽性。 2 3 3 2 插入无关代码或无效代码( i n s e r ti r r e l e v a n to rd e a dc o d e ) 根据m c c a b e 和h a r r i s o n 的程序复杂性理论,需要为程序增加更多的分支结构 使程序更复杂,这里使用上面的不透明断言来构造这些结构。这种变形显然会增 加程序的开销,但是任何混淆技术都会带来额外的开销。 如图2 6 所示,这是一种典型的代码插入方法。首先原语句序列( 顺序结构) 被分割成2 部分。接下来,循序结构的语句序列可以被转化成了3 种分支结构。第 一种方法永远只有一个分支被执行,第二种方法2 个分支的执行效果相同,第三 种方法永远只执行条件为真的分支,另一个分支有b u g - 会使攻击者的运行过程中 图2 - 6 插入无关代码或无效代码 l0 望奎墅垫盔兰堡主兰焦笙苎;壁! 箜些垡璺塑奎丝丛堡墼堡芝墨鎏墨窒翌 2 3 3 3 构造非规约的程序 对于j a v ab y t ec o d e ,m si lc o d e 或本地代码,它们可以表示一些非结构化的 程序结构,在高级语言中没有其对应的程序结构。高级语言仅仅可以表达可规约 的程序流程( r e d u c i b l e f l o w ) 。如图2 - 7 所示,图( a ) 中的循环结构有多个入口, 图( b ) 是为了防止攻击者删除不透明断言的攻击,而做了进一步的修改。 图2 - 7 构造非规约的程序 2 3 4 数据混淆变形 对于数据,同样有很多混淆措施,由于篇幅原因,这里仅仅介绍部分比较重 要和有效的混淆方法,读者可以参考文献【卸,c h r i s t i a n 等在这里提出了很多混淆 的方法。 2 3 4 1 修改继承关系 对一个面向对象的语言来说,最基本的封装和抽象的单位是类,类是数据( 实 例变量) 和控制( 实例方法) 的封装,即个类c 可以看作是实例变量v 和实例 方法m 的聚合:c = ( 、m ) 。 如图2 。8 所示,可以对类c 进行各种混淆:( 1 ) 类c 分割成2 个类c 1 ,c 2 。( 2 ) 在c 1 ,c 2 之间增加一个伪造的类c 3 。( 3 ) 即使用分割又使用伪造技术。( 注:图 中的。表示继承关系;图中的r o o t 表示继承的根类,如j a v a q u 的o b j e c t ,m s n e t 中的s y s t e m o b j e c t ) 。 华东师范大学硕士学位论文对m s i l 代码和本地代码的保护算法及实现 如图2 9 所示,是另外一种对类间继承关系的修改,此方法,对2 个没有公共 内容的类= - c 1 ,c 2 ,伪造一个公共的父类c 3 ,在c 3 中伪造一些c 1 和c 2 要继承的 方法和字段,但c 1 和c 2 并不真正使用这些伪造的方法和字段,并且这些伪造的 方法和字段有一些故意生成的b u g ,所以如果使用这些方法和字段就会出现错 误。 图2 - 9 修改类间的继承关系( 伪造公共父类) 2 3 4 2 重构数组 数组也是各种高级语言的重要组成部分,本节介绍下对数组的混淆处理: ( 1 ) 分割数组( s p l i t ) ,例子代码和内存情况如图2 1 0 所示;( 2 ) 合并数组( m e r g e ) 例子代码和内存情况如图2 1 1 所示:( 3 ) 折叠数组( f o l d ) ,即减少数组的维数, 例子代码和内存情况如图2 1 2 所示;( 4 ) 平铺数组( f l a t t e n ) ,即增加数组的维数 例子代码和内存情况如图2 1 3 所示。可以看出本节的处理有很高的s t e a l t h 和 华东师范大学硕士学位论文 对m s i 代码和本地代码的保护算法及实现 p o t e n c y ,并且c o s t 不高。 图2 1 3 重构数组方法4 :平铺数组 还有很多混淆的方法和手段由于篇幅原因这里不能再详细介绍,有兴趣的读 者可以翻阅参考文献1 2 7 1 。 2 4 软件水印技术 堡壅堑整盔堂耍主堂垡笙塞堕坚墅! 垡塑塑奎垫垡壁盟堡翌墨鲨墨壅墨 为什么要使用水印技术? 因为水印为知识产权( 视频,音频,图像,软件等) 的所有者提供一种保护自己的方法,可以用来作为有力的证据,来赢得法律诉讼 的胜利,关于使用的意义可参考【2 8 】。 和混淆技术不同,软件水印技术不是针对攻击者的反向工程攻击方法面设立 的防范手段,软件水印是为软件的所有者提供证据,当有人盗窃软件时,就可以 使用代码中的水印作为证据,来证明软件的所有权。 和媒体水印不同,软件水印一般是隐藏在软件的代码中,而媒体水印是隐藏 在图片,音频,视频中。所以媒体水印的方法大多数无法在这里使用。 提到水印技术,就不能不介绍一下指纹( f i n g e r p r i n t ) 技术。指纹技术是软件 水印的一种发展,传统的水印技术仅仅包含软件所有者的一些信息,而指纹技术 还包含软件使用者的信息,一个典型的f i n g e

温馨提示

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

评论

0/150

提交评论