




已阅读5页,还剩75页未读, 继续免费阅读
(计算机软件与理论专业论文)基于java的代码混淆研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 由于计算机软件是一种极易复制篡改的特殊商品,因此,过去的几年,许多 关注于软件数据的机密性、完整性和可用性的研究得以展开。特别是随着多媒体 的应用和网络的普及,多媒体数据的安全也成为了保护的焦点。同时,软件产品 的唯一性也给软件的保护提出了一个巨大的挑战,这主要是基于:首先,由于软 件可以被逆向工程破解,从而导致机密算法等的流失;其次,软件可以被有目的 性的修改,从而使软件做出超出预期和准许的行为。 目前,商业软件越来越普遍的采取非二进制的代码形式发行,比如j 越,a 的 字节码,但这些形式的代码包含了大部分的源码结构等信息,使得对它们的逆向 工程变得更加容易,源代码也更易于被提取。同时由于各种政治经济和文化的原 因,使得目前对软件的知识产权保护十分薄弱。 本文首先描述了针对软件安全的攻击模型,特别提到了恶意主机的威胁,以 及多种软件保护技术手段,比如:网络验证保护、硬件辅助保护、软件水印保护 和防篡改保护等。但本文的主要内容是代码混淆的软件保护技术,代码混淆技术 是在保持原程序语义功能一致的前提下,通过混淆原程序的代码信息使得恶意用 户即使得到了混淆之后的代码也无法得知相关机密数据信息,以此来达到软件保 护的目的。 针对目前混淆技术主要局限于名称混淆等情况,本文采用基于j 越厂a 字节码 的面向对象的控制流混淆和设计混淆算法实现混淆转换。文中的类聚合和类分裂 是两种面向对象编程的设计混淆方法,其中类聚合就是将两个或两个以上的类用 一个类代替的方法,类分裂则是将一个类用两个或两个以上的类替代的方法,控 制流混淆则是对程序执行流程的混淆方法。除此以外,j a 、厂a 的体系架构、j 趟厂a 虚拟机、混淆的定义和分类以及评测标准都将在本文中进行说明。 本文最后设计和实现一个基于对j 越,a 字节码进行保护的代码混淆工具,并 采用了控制流混淆、类聚合和类分裂的算法原则,同时从理论和实际两方面分析 混淆转换的有效性和性能过载等方面的实验结果。 关键词:恶意主机,代码混淆,j a 、,a 字节码 a b s t r a c t c 伽p u t e rs o 胁a r ei sa l 【i n do fs p e c i a lg o o d sm a tc a nb ee a s i l yc o p i e d t e m p e r e d mm e p a s ts e v e r a ly e a r s ,m 觚yr c s e a r c h 销l m ,ec o n c 饥n a t c do np r o t e c t i n gd a t af b m l es t 锄d p o i n to f c o n f i d e n t i a l i t mi n t e g r i t ya n da v a i l a b i l i t y s u c h 弱p r o t e c t i o no fd i 舀t a l d a t a 歪而mu n a u m o i i z e da c c e s s s 0 1 f t w a r ei sa 向mo fd a t aw i t hu n i q u ep r o p 硎鹪觚di t s p r o t e c t i o np o s e su n i q u ec h a l l e i l g e s f i r 瓯s o r w a r ec a nb ef e v e r s e 酉n c e 同,w t l i c h m a y 麟u l ti i ls t o l e ni n t e l l e c t u a lp r o p 融y s e c o n d ,s o r w a f ec 锄b e a l t e r e dw i mt h e m t e n to f 肿n 】1 i l 冯o p 耐i o 璐m i ss 0 f h a r em 髑tn o tb ea l l 0 、i e d 幻p 曲n i l nh a sb e c o m em o r e 觚dm o r ec o m m o nf o rc o m m 硎a ls 0 f t 、v a f et 0d i s t r i b u t ei n f o 加 1 sm a tr e t a i nm o s to ra l lo fm ei n f o 肌a t i o np r e s c i l ti nm eo r i 百n a ls o u r c ec o d e s u c h 嬲j a v ab y t ec 0 d e s ,砌,e r s c ;铋g m o e 血gh 嬲be c l d m ee 撕e rt l l _ 吼e v 既s i i l c es u c h c o d l 。sa r ee a s yt 0b ed e c o m p i l e d 趴dc ) m a c t 。dt os 0 l l r c ec o d e ,m e yi n c r e 弱et l l er i s ko f m a l i c i o l l sr c v e r s ee i l 百n e e 商g 扰a c k s m e a i l w h i l ea l o n gw i ms o m ep o l i t i c a la n d e c o n o m i cr e :豁o n s ,c o m p u t e rs o m v a r ep r o t e c t i o ni sv e 巧w e a k f i r s t ,t h i sd i s s 洲i o nb r i n g so u ta t t a c km o d e l sf o rs o 脚a r es o c u r i t y e s p e c i a l l y m a l i c i o u sh o s ta 仕a c ka n ds e v e r a l l 枷c a lw a y st 0e n h a i l c ei n t e l l 洲p r o p e n y p r o t c c t i o nw i t h i i lt l l e s o 凡) l ,a r ed o m a i 玛i n c l u d i n g :s e r v e r - s i d ee x e 础o i l h a r d w a r e 嬲s i s t - s 0 f t w a r ep r o t e c t i o 玛s o r w a r ew a t e 珊a d 【i n g & t e i 1 1 p 咖g p i ft e d m 0 1 0 9 y c o d eo b 向s c a t i o 玛w 1 1 i e hi sm et e c h n i q u ef o rt e d m i c a lp r o t e c t i o no fs o a w a r e s e c r e t s ,h 蕊b e e nm a i n l yd i 。s c r i b 。di i lm ef e 瓯o ft h ed i s s 咖t i o i lo b f b c a t i o nt e c _ h - n i q 吣h a v e b e e i lp r o p o s e dt 0i i i l p e d ei l l e g a l 陀煅g i i l 。e f s o b 缸s c a 眦a r ep r 0 踟 n m l s 旬姗a :c i o n sm a tp i 岱e r v em ep r o g 阳mf l 】枷o m l l i 够w l l i l eo b s c u 痂1 9t t l ec o d e ,m c r e b y p r o t e c t i i l gt h ep r o g r a m 驾a i l l s tm a l i c i o 憾r e v 盯e l l 百n 锄g b u t 缸l e 铡函妇go b f b c 撕o n 蛐q u 俗a r el i r 咄e dt oo b 蛐g v 撕a :b l en a m e s 锄do b s c l m n g 懿胛e 豁i o i l su s i n g 谢a b l 骼o fp 涮t i v e 锣p 伪s oi i lt h i sd i s s c n a t i o 玛l o c a lc o m r o ln o w 锄dd e s i g no f 0 b j e c t - o r i e n t e dp r o 影m l sb a s 。do nj a v ab 计c c o d el l a _ v eb e a d a p t e d i i im e0 b 觚咖o n 缸a n s f o n n a n o n s c l a s ss p l i t t i i 培a n dc l 嬲sc o a l e s c i n go b m s c a t i o i l sa r e 觚ot 池1 0 百e so fd e s i g no f i i a b s l k a u l o b j e c t - o r i e n t e dp r o 莎锄s t h ec l a s ss p l i t t i n gi s w h i c hr e p l a c e sas i n 哲ec l a s sw i m m u l t i p l ec l a s s e s 锄dc l a s sc o a l e s c i n gi sw h i c hr 印l a c e sm e s ec l a s s e sw i mas i n 酉e t a r g e tc l a s s o t h c r w i s ej a v aa r c l l i t e c t u r e ,j 纳r av i r t u a lm a c h i n e ,m e 觞u r e s ,m ed e f i n i t i o n a n dd a s s i f i c a t i o l l so fm i st e c m q u ea r ca l s oi n 昀d u c e d f i n a l l y at o o lb a s e d o np r o t e c t i o no fb y t ec o d eh 弱b e e nd e s i 印e da n d i m p l 锄e n t e d 向rc o d eo b 缸s c a t i o ni n d u d i n gc o n t m lo b m s c a t i o n ,c l a s sc o a i e s c i i l g 舭d c 1 a s s s p l i t t i l l g e v a l u a t i o no ft l l ee 疏c t i v 吼e s s趾dp 拍m a i l c eo v e r h e a db y o b f b c a t i o n 缸柚s f o m a t i o ni s 西v e n k 秘w o r d s :m a l i c i o u sh 0 瓯o b m s c a t i o 玛j a v ab y t e c o d e i 主要符号表 主要符号表 v i 图索引 图索引 图3 1 类文件结构图2 1 图4 1 混淆定义2 3 图4 2 外联和内联2 5 图4 3 模糊谓词插入2 6 图4 4 混淆算法主循环2 9 图4 5 分解控制流图3 0 图4 6 平展控制流图31 图4 7 指针别名控制流图3 2 图5 1 正向工程与逆向工程示意图3 6 图5 2 类加载流程( c l a s sl o a d e r ) 4 2 图5 3 模块结构图4 4 图5 4 父类成员的分裂原则。5 2 图5 5 类分裂和类插入5 2 图5 6 基本块结构5 5 图5 7 生成基本块集5 6 图5 8 c a s e 入口产生5 7 图5 9 s w i t c hc a s e 结构生成5 7 图6 1 强度、耐受性和代价的关系6 0 图6 2 不同混淆域的影响6 4 v i i 表索弓l 表索引 表5 l 等价符号表4 5 表s l 复杂缝标准表6 l 表6 2 通用测量标准6 6 v i l l 独剑性声明 本人声明所呈交煎学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方辨,论文审不雹含冀链入已经发表或撰写过麴研究成采,趣不包含 舞获褥毫子科技大学蕺其它教育概掏的学位或证书两嫒震过的材辩。 与我同工作的同志对本研究所做的任何贡献均已在论文中作了明 确豹说镑著表示谢意尊 签名:塞室1 薹2 日期:年 月日 ? 关于论文使甩授权的说魄 本学位论文作者完全了解奄子科技大学有关傺整、使用学位论文 的规定,有权保留并向国家有关部门戚机构送交论文的复印件和磁 盘,允许论文被查阕释借阕毒本人授投毫子辩技大学可戮将学位论文 的全部或部分内容编入煮关数据摩进褥检索,可鞋采耀影印、缩印或 扫描等复制手段保存、汇编学位论文甘 ( 保密的学位谂文在鬃密后应遵守就规定) 签名:缒圄。导师签名: 霹期:年月 舀 第一章引言 1 1 研究的背景和意义 第一章 引言帚一早jl苗 软件保护,在计算机领域并不是一个陌生的概念。由于软件这种产品是创作 者智慧的结晶,其内在的价值是无形的,但软件是一种数字产品,其复制成本极 低,复制过程中不会降低软件本身的质量,与原始版本基本没有差别,正是由于 软件产品的这一特性使得侵权者能够无差别的生产复制品。这个问题不断地困扰 着软件的开发者,软件保护就是这种情况下应运而生的。 伴随着计算机网络的诞生,越来越多的软件服务于网络,新的计算环境和计 算模型分布式计算环境与分布式的计算模型也得以产生。远程过程调用、网 格、w 曲服务、移动a g c n t 等分布计算技术人们已不再陌生,并得到了广泛的应 用。这些新的分布式计算模型在给我们带来更强大的计算能力,更高的灵活性和 方便的同时,也随之产生了一系列的安全问题,这些安全问题是单机计算环境所 不具有的。 其中一类安全问题是恶意代码问题【l 】【2 1 ,为防止远程程序执行恶意操作,破 坏主机资源,必须在程序执行时对远程主机提供必要的保护。此领域一直是计算 机安全研究的重点,该领域主要包括:病毒、蠕虫、木马,反病毒软件、防 火墙、入侵检测系统等。2 0 世纪9 0 年代初,移动a ge i l _ t 技术的出现( a g e n t 程序可能迁移到非信任主机上运行) ,引发了安全专家对另一类安全问题的关注与 研究,这就是恶意主机问题【3 】。 恶意主机指的是:程序在非信任主机上运行时,需要对程序进行保护,防止 恶意主机的攻击。恶意主机环境下的攻击通常是以窃取软件知识产权为目的,主 要形式有:软件盗版、逆向工程、篡改等。盗版就是非法拷贝并再次出售,这是 软件开发、销售商业人员最关注也最耗费精力的问题。在过去的几十年里,虽然 产生了加密狗,加密锁,数字水印等各种软硬件方法,但当今红火的盗版软件市 场却反映出目前的反盗版技术依然存在着诸多的缺陷和不完善的地方。逆向工程 的飞速发展,促进了软件工程的进步,但非法的逆向工程行为也随之而来。它通 过分析软件,从中盗取有用信息用于非法目的,近年的一些法庭案件也说明了逆 电子科技大学硕士学位论文 向工程正逐渐成为一种针对软件安全的重要威胁,如:某软件产品中一个由该公 司自主开发的未公开的算法被其竞争对手利用逆向工程挖掘出来,并用到其相应 的软件产品中,从而给原公司造成巨大的商业损失。随着软件工程和网络技术的 快速发展,许多软件产品的发布并非以二进制代码的形式存在,因此它们很容易 被反编译,并且被安装到不能被信任的主机上,比如j a v a 的c l a s s 文件,以及 a n d f 【4 】格式文件等。除了盗取其他软件的有效部分为其所用外,还存在另一种侵 害,就是对软件进行恶意篡改,许多软件产品,比如m o b i l e a g e n t ,e c o m m e r c e 等应用软件,都包含有密匙或其他的一些秘密信息,如果这些信息被篡改,将意 味着巨大的经济损失。 根据全世界商业联盟的统训5 1 ,每l o 个软件产品中就有4 个受到软件破解、 盗版的侵害,过去数年间,全球性的盗版行为增加了4 0 。美国商用软件联盟 ( b s a ) 2 0 0 5 年的年度报告显示【6 】,2 0 0 5 年全球p c 软件盗版造成的损失达3 4 0 亿 美元,比上年增长了1 6 亿美元。在软件市场巨大的国家,相对较低的软件盗版率 仍会带来惊人损失。尽管美国的盗版率全球最低,仅为2 1 ,但仍然是损失最大 的国家其损失为6 9 亿美元。中国盗版率为8 6 ,损失了3 9 亿美元,是全球 第二大损失国。 因此除传统的安全领域外,恶意主机环境下的软件保护受到了越来越广泛的 重视。无论是软件销售商还是多媒体( 电影、音乐) 服务提供商,他们都不希望因 为自己的知识产权受到侵犯而蒙受损失,这种情况引发了软件保护技术的研究热 潮,促使软件保护的新技术不断涌现。在众多的保护技术中,起源于上世纪9 0 年代的代码混淆因其主要研究如何有效解决:软件代码对非授权的逆向工程的抵 抗能力问题,而逆向工程恰恰是软件盗版、恶意篡改等危害软件安全技术的基础, 使得代码混淆无疑是一种具有良好发展前景的软件保护技术。当前,不管是从国 家的软件发展战略层次或是从公司、个人的利益的角度出发,代码混淆都是值得 我们去深入探究,并做出相关成果的一个新兴技术方向。 1 2 主要研究内容 本文的研究内容主要包括几个方面: 研究了目前对软件安全造成了巨大威胁的恶意主机问题,并了解相关的已实 际应用的软件保护方法,如网络验证保护、防篡改、软件水印等; 2 第一章引言 了解j a v a 的整体体系架构,着重对j a v a 虚拟机的结构、运行机制等内容的 理解,同时研究j a v a 虚拟机的相关特性以及d a s s 文件的相关格式内容; 研究代码混淆的相关技术要点,在了解逆向工程动态和静态攻击方法的基础 上,结合j a v a 字节码的特点设计和采用了控制流、类分裂和类聚合的混淆算法进 行代码混淆; 通过对混淆算法的实验,分别就混淆转换的正确性、性能过载和有效性进行 分析和评价。 1 3 本文结构及章节安排 本文的内容安排如下: 第一章主要介绍软件保护相关背景和研究发展的情况,并说明本文的主要研 究内容以及各章节的安排情况。 第二章介绍恶意主机的安全问题、概述目前已存在的软件保护技术。 第三章分析j a v a 的体系架构,对虚拟机的运行机制、结构组成、指令系统以 及c l a s s 文件的格式进行分析理解。 第四章说明代码混淆技术的概念、相关技术类别以及研究现状。 第五章介绍逆向工程以及静态和动态的逆向分析技术,结合j 心厂a 字节码的 特点,采用针对字节码的混淆算法,设计实现混淆转换。 第六章实验分析,从理论和实际分析总结混淆转换的有效性和性能过载。 第七章本文的工作总结,对未来的工作进行展望,明确下一步的目标。 3 电子科技火学硕七学位论文 第二章软件保护的现状 软件保护与软件破解作为不可调和的矛盾双方,自从软件诞生之日起,它们 之间的斗争就从来都没有停止过。一方面软件破解手段推陈出新、不断涌现,而 另一方面针锋相对的软件保护技术则层出不穷。本章首先介绍威胁软件安全的三 个基本模型,接着将简要介绍几种目前常见并且正在使用的软件保护方法。 2 。1 软件安全的威胁 目前,对软件的安全状况造成的威胁主要存在如下三种威胁模型: ( 1 ) 网络威胁模型:攻击来自网络外部,来自远程。典型威胁包括:缓冲区溢 出、协议攻击、恶意代码等。 ( 2 ) 内部威胁模型:攻击来自网络内部,攻击者具有一定的权力。典型威胁包 括:篡改用户权限、获取软件内部信息等。 ( 3 ) 恶意主机威胁模型:在这种假设下,一个应用程序运行于恶意主机上,该 应用可能受到来自该主机的攻击,例如,攻击来自操作系统、内核、其他的应用、 甚至硬件等。攻击者拥有一切特权,包括访问运行代码、安装使用辅助攻击软件、 硬件工具等。这种来自恶意主机的攻击,我们称之为白盒攻击,防御这种攻击需 要专门的软件保护技术。它不同于黑盒攻击,黑盒攻击只能监视软件的输入和输 出;也不同于负效应攻击,攻击者能监视软件运行的负效应。白盒攻击典型的威 胁包括:盗版( 数据及软件) 、非许可使用、篡改数据及程序、窃取软件中嵌入的信 息( 比如算法) 及知识产权等。 这三种威胁中,恶意主机相较于其他二者来说,它对软件的安全危害最大。 这主要体现在恶意主机的攻击前提条件是无从掌控的,例如: 首先,攻击者可能完全具有对程序运行环境的控制权,这其中包括有硬、软 件的环境资源,比如j a v a 虚拟机,方法栈等。攻击者拥有这些权限的同时,也就 意味着他可以任意对程序进行静态分析,读入相关文件,分析程序结构,关键算 法等相关操作,并同时执行对程序跟踪和调试。其次,攻击者可能了解部分甚至 全部的程序的允许的输入以及相关的防御措施,如混淆算法等。实际情况中,混 淆算法或者混淆工具的源代码的获取不是一件困难的事,这就如同当下的加密算 4 第二章软l j ,l :保护的现状 法,只要被广泛的使用,那么该算法肯定是公开的。再者,攻击者能够通过动态 分析的方法,不断输入不同的数据对程序进行重复的运行测试,以此来达到分析 程序本身的行为,获取程序敏感信息的目的。比如,程序中有一个常量,其中记 录着某个客户愿意出价的最大值,那么攻击者可以用不同的输入反复运行程序来 得到这个值,进而改变这个值,也就改变了程序的行为。 除此以外,诸如:将同一软件的不同版本或不同用户使用的同一版本进行比 较,从而定位出关键信息的差异分析;多个攻击者共同参与,并共享相关资源和 经验的共谋攻击;捕获程序运行的状态及环境状态并保存起来,这样可以重复运 行的重放攻击等也是被频繁使用的方法。 2 2 软件保护技术 在介绍完上述软件安全的威胁之后,下面将介绍目前正在使用的一些软件保 护技术,其中一些已经比较成熟,而另一些则还处于发展阶段。相关说明如下: 2 2 1 网络验证保护 网络验证保护是一种客户端服务器模式的验证机制,发布软件的公司或个人 运行一个验证服务器程序,用户购买的软件包含客户端验证功能,在软件运行时 会先向验证服务器发送软件的注册、许可或相关信息,由服务器端进行验证、确 认软件是否被许可安装或软件是否完整( 没被篡改) ,并将验证的结果发回客户端, 如果返回的信息表明验证通过,客户端软件才可以被用户正常使用,否则自动退 出。有一些更为先进的网络验证技术将客户端软件的一些关键数据或代码放在服 务器端,只有在服务器端验证通过了才会收到从服务器端发过来的关键数据或代 码,客户端的软件才能够继续运行。 这种网络验证保护技术将验证的过程放在服务器端进行,在一定程度上阻止 了用户所在方对注册码的破解和滥用,为许多网络软件所采用,如w i l l p r o x y 。但 是也有它的弊端,主要是两个方面: 1 验证过程必须借助网络,如果客户主机没有联入因特网就不能运行被保护 的软件,因此这种保护技术主要用来保护一些网络软件,对于一些不需要联入网 络的单机软件,如果要求用户使用此软件必须联入h l t e n l e t ,显然也是不合理的; 2 成本的增加,因为服务器端需运行一个验证服务器,为客户提供2 4 小时 验证服务,并且要保证稳定性,可靠性。除此之外,这种需要网络验证的保护技 电子科技大学硕士学位论文 术还有可能因为防火墙阻挡给不熟悉电脑操作的用户带来不便。 2 2 2 硬件辅助保护 硬件辅助保护就是借助一定的硬件来实现对软件的保护,一般分为两种: 1 借助软件发布载体。早期通过软盘发布软件时产生了许多防拷贝技术,一 般是将部分数据写在不用的保留扇区或者将扇区标记为坏扇区,但程序可以读取。 现在软件一般通过光盘来发布,程序运行时会检查光盘上的特殊数据( 俗称数据指 纹) ,以此来判断是否正版光碟。m a c r o s i o n 公司的s a f e d i s c 就是属于此类的比 较常用的商用保护方法,其数字指纹是在光盘生产过程中用激光生成的,难以通 过刻录的方式来复制。 2 利用d o n 西e 技术,这种技术在国内被称为软件狗,属于硬加密技术,它具 有加密强度大、可靠性高等特点,已广泛应用于计算机软件保护。 软件狗技术的发展经历了多次更新换代。第一代软件狗通过短接并行口的某 两根线,或者再加上一些电阻、电容、二极管等实现;第二代软件狗采用逻辑门 电路跨接在并行口上,并采取适当的措施尽量避免软件狗和打印机之间的相互干 扰;第三代软件狗的核心芯片是e e p r o m ,主机通过并行口直接读写e e p r o m 以 实现对加密信息的存取;第四代软件狗以微控制器和e e p r o m 为核心器件,又称 微狗,它具有一定的智能,应用灵活性和抗破解能力都得到了很大提高。 软件狗的基本思想就是使用一种特定的硬件设备通过某种接口与计算机相 连,当软件运行时就会检测是否有此硬件,否则就中止运行,在前两代软件狗技 术一般是这样,但是这种技术经过多年发展,到第三代开始,就已经从当初的检 测硬件存在发展到将密钥等信息存放到硬件中,甚至将程序核心代码放到硬件中, 安全性能不断提高,而且硬件也是厂商自己设计,很难对硬件进行仿制。 相比其它的软件保护方法来说,借助硬件的软件保护的安全性比较高,尤其 是先进的软件狗加密技术,很多商用软件采用这种方式来进行保护。但是这种硬 件保护也存在一些缺点: 1 ) 利用硬件保护必然会增加成本,如果是采用特制的光盘保护,这些特制的 光盘的成本比普通光盘成本要高,如果是采用软件狗技术,软件狗的设计和制作 更是给软件增加额外的成本。 2 ) 给用户带来不便,因为用户不能自备份,而且一旦硬件丢失或损坏,他们 将无法再使用自己合法购买的软件,即便他是软件的合法使用权拥有者,这显然 6 第二章软件保护的现状 也是不合理的。 2 2 3 防篡改技术 软件防篡改技术是一种防止软件被非法篡改的技术,主要是通过对软件进行 完整性校验来判断软件是否被篡改。 防篡改技术对软件完整性进行检验一般都要借助密码学中散列函数来产生散 列值。单向散列函数算法( 又称为h a s h 算法) 可以将任意长度的信息压缩到某一固 定长度( 该过程是不可逆的) 。所产生的散列值的长度应足够长,因此使得找到两块 具有相同散列值的数据的机会很少。h 柚函数可用于数字签名、消息的完整性检 测、消息起源的认证检测等。常见的散列算法有c r c ,m d 5 ,s h a ,n h a s h , r i p e m d 等,而用于软件完整性校验方面一般是采用c r c 。 防篡改技术对软件进行完整性校验又可以分为两种【7 】【8 】,第一步是磁盘文件的 完整性校验,将磁盘文件的数据按字节进行c r c 求和,得到的结果存放在文件特 定位置,或者写入一个单独的文件,运行时对磁盘文件进行计算校验和,将计算 出来的校验和和预先保存的校验和进行比较,如果不相等就表明该磁盘文件被篡 改过了,反之则表明被没有被篡改。 这样虽然可以保证检查出磁盘文件是否被篡改,但是对于内存补丁就没有用, 因此还需要第二种完整性校验,就是对内存镜像的完整性校验。每个目标代码文 件都至少有一个代码节和一个数据节,其中数据节都是可读写的,程序运行时, 全局变量通常会放在这里,这些数据会动态变化,因此对这部分数据进行校验是 没有意义的。一般代码节是只读的,存放程序代码,运行过程中不会发生变化, 因此内存镜像的完整性校验都是针对代码节的。原理同磁盘文件完整性校验类似, 对内存镜像中的代码节进行c r c 求和,得到的结果与预先计算保存在文件中的校 验和进行比较来判断内存镜像是否被篡改。有时候内存中的代码节也会发生变化, 譬如使用了自修改技术,内存中的代码在运行时根据需要发生变动,这时只能对 一些不被自己修改的代码片段进行校验,同理,磁盘文件完整性校验也可以只对 某部分代码数据进行校验。 2 2 4 软件水印 软件水印是近年来出现的软件产品版权保护技术,可以用来标识作者、发行 者、所有者、使用者等,并携带有版权保护信息和身份认证信息,可以鉴别出非 7 电子科技大学硕士学位论文 法复制和盗用的软件产品。通过网络传输的数字产品很容易被恶意的个人或团体 在未经许可的情况下非法使用,因而网络世界中数字产品版权保护问题成为人们 期待解决的问题。软件水印技术就是在这种情况下产生的。 根据水印的加入位置,软件水印可以分为代码水印和数据水印。代码水印隐 藏在程序的指令部分中,而数据水印则隐藏在包括头文件、字符串和调试信息等 数据中。根据水印被加载的时刻,软件水印可分为静态水印和动态水印。 静态水印存储在可执行程序代码中,比较典型的是把水印信息放在安装模块 部分,或者是指令代码中,或者是调试信息的符号部分。动态水印保存在程序的 执行状态中,而不是程序源代码本身。这种水印可用于证明程序是否经过了混淆 转换处理。动态水印主要有3 类:e a s t e re g g 水印、数据结构水印和执行状态水印。 其中,每种情况都需要有预先输入,然后根据输入,程序会运行到某种状态,这 些状态就代表水印。 目前己存在多种水印算法。c o l l b e r g 和t h 0 i n b o r s o n 【9 】提出了一种动态图水印 技术,即把软件水印隐藏在程序动态建立的图结构拓扑中。由于指针的引用,使 得控制动态图结构的那部分代码不易分析,因而很难对图进行保持语义变换,而 且证明这种结构是否被篡改比证明代码或纯数据更容易些。 此外,a k i t o 和h 两i m u 【1 0 】等也提出了一种针对j a v a 程序的水印算法,这种算 法的基本思想是:在源代码中加入一些冗余代码,这些冗余代码不参与程序的执 行。 2 2 5 序列号保护机制 序列号验证的应用非常广泛,网上下载的共享软件大多采用这种方式,注册 过程一般是用户把自己的私人信息( 如用户名、电子邮件地址、机器特征码等) 告诉 软件公司( 软件作者) ,软件公司根据用户的信息利用预先写好的一个计算注册码的 程序( 俗称注册机) 算出一个序列号,以电子邮件或传真方式发给用户。用户在得到 序列号后按照注册步骤在软件中输入注册信息和注册码,软件再以一定计算方法 进行验证。 软件验证序列号的过程,其实就是验证用户名和序列号之间的数学映射关系。 这个映射关系是软件的设计者制定的,所以各个软件生成序列号的算法是不同的。 显然这个映射关系越复杂,序列号就越不容易被破解。根据映射关系的不同,程 序检查注册码通常有如下三种方法: 第二章软件保护的现状 1 以用户名作为自变量,通过函数f 变换,得到的值与序列号进行比较,或 者反过来,对序列号做变换得到用户名。 序列号= f ( 用户名) 或者用户名= f - 1 ( 序列号)( 2 1 ) 对于根据用户名来生成序列号,再同用户输入的序列号进行比较的方法,这 种方法等于在用户软件中再现了序列号的生成过程,实际上是非常不安全的,不 论其换算过程多么复杂,解密者只需要把换算过程从程序中提取出来,就可以编 制一个通用的注册程序。而对于根据序列号来生成用户名与用户的用户名进行比 较的方法,实际上是序列号生成算法的反算法,如果正向算法与反向算法不是对 称算法的话,对于解密者来说,的确有点困难,但是这种算法非常不好设计。 2 通过对等函数检查序列号,如果输入的用户名和序列号的关系满足下式, 就认为输入的是正确的序列号。采用这种方法可以做到在进行检验时内存中不出 现正确序列号的明文。 f l ( 用户名) = f 2 ( 序列号) ( 2 2 ) 这种算法中,f 1 和f 2 是两种不同的算法,分别对用户名和序列号进行计算得 出的特征值进行比较,这种算法的设计比较简单,在保密性上也比第一种要好得 多,可解密者一旦找到其中之一的反算法,这种算法就不安全了。 3 对用户名和序列号作某种变换使得结果和某个特定的值相等,则可以认为 是合法的用户名序列号对。 特定的值= f ( 用户名,序列号)( 2 3 ) 这个算法使用户名的序列号之间的映射关系不那么清晰,但相应的,注册机 的实现也比较困难,用户名和序列号之间己没有了一一对应关系。 使用序列号进行保护的方法优点是非常方便简洁,难点在于设计一个好的算 法,序列号长度达到一定时,破解的难度也是非常大。缺点就是序列号放在用户 的电脑上,因为程序启动时要将序列号读出来进行判断,容易被攻击者找到,而 且输入错误序列号后都有提示信息,容易被攻击者利用错误提示信息找到序列号 的判断点。 2 2 6 代码混淆技术 代码混淆技术是比较新的软件保护方法,起源于上世纪9 0 年代,它的兴起与 j 越,a 的发展有着紧密的联系。j 趟厂a 为了实现跨平台的特性,没有将源程序编译 9 电子科技大学硕士学位论文 成与c p u 相关的二进制指令格式,而是一种j a 、,a 特有的,可以被j 越厂a 虚拟机 识别并执行的字节码,这样就使得各平台下的j 越,a 虚拟机都可以运行这种字节码 程序。但是也带来一个问题,这种字节码容易被反编译,存在很大的安全隐患, 因此迫切需要一种技术,能够使得这种字节码不容易被反编译,或者反编译所得 的代码难于被理解。代码混淆就是在保持程序功能一致的前提下,对程序进行转 换并且转换后的程序难于被攻击人员和逆向工具软件所理解的技术。但代码混淆 的目的并不是对软件提供绝对的保护,它所需要的效果是使得攻击者的攻击行为 产生的代价超过或是远远超过其自身所能承受的范围,以此来使攻击者放弃攻击 行为。 由于混淆技术可以根据不同的目的,不同的混淆对象等采用不同的方法,这 使得它的类别非常多,因此采用何种混淆方法可以依实际情况而定。本文研究以 j 趟厂a 为代表的面向对象语言的代码混淆技术,其混淆对象是虚拟机中运行的字节 码,并且考虑到面向对象的特性,可以在维护代码混淆原则的基础上,对相关技 术进行灵活的选取和应用,从而有效保护j a 、,a 应用程序的知识产权,达到混淆程 序的目的。 2 3 本章小结 本章主要介绍了目前威胁软件安全的三种模型,并列出了几种常见的软件保 护方法,但未具体阐述相关方法的细枝末节,不过已能了解三种威胁模型以及软 件保护方法的基本原理。从总体来看,软件保护的形势不容乐观,各种保护方式 虽能在一定程度上保护软件不被修改破解,并对一些专门攻击工具都能做到较好 的保护,但是对于意志坚定的攻击者,譬如对汇编与逆向工程比较熟悉的攻击者, 还没有一种比较完美的软件保护方法。软件保护和软件攻击之间的矛与盾的斗争 还将会此消彼长的继续下去,而且目前现状表明软件保护仍处于下风,前面提到 的b s a 调查显示的盗版率可以说明这一点。本文的研究的内容:面向对象的代码 混淆,也正是基于这一现实情况,希望能够找到比较好的针对逆向工程的软件保 护方法。 1 0 第三章j a v a 虚拟机 第三章j a v a 虚拟机 j a v a 是一种一般用途的、并发的、面向对象的程序设计语言。它的语法和c 以及c + + 有许多相似之处,但是j a v a 省略了许多使c 和c + + 复杂的、易混淆和 不安全的相关特性,如指针的运算、手动进行内存回收等。j a v a 的出现起源于处 理联网的消费者设备的软件问题,因为网络的发展使得以网络为核心的硬件环境 增长迅速,其所包含的设备越来越广泛,而这诸多的不同设备、不同硬件体系、 不同操作系统又用于不同的用途,也就是说围绕这些硬件的软件程序只能是在一 个特定的系统以及操作环境下运行,而在另一个不同的系统和操作环境下就无法 正常运行。因此j a v a 被设计为支持多主机体系结构,从而使j a v a 能创建出与平 台无关的程序来解决前述问题,同时j a v a 还实现了软件组件在网络间移植的安全 发送,并保证客户对组件的安全运行。 3 1 j a v a 体系架构 3 1 1 架构概述 提到j a v a ,通常人们的反映是指j a v a 编程语言,但实际上j a v a 不仅仅是一 门编程语言,它还包括j a v a 程序运行的整个环境。目前比较规范的标准是j a v a 体系结构包括了四个独立但相关的技术,分别如下: j a v a 程序设计语言 j a v a 虚拟机( j ) j a v a 应用编程接口( a p i ) j a v ac l a s s 文件( 字节码) 当编写并运行一个j a v a 程序时,可以体会到它们之间的关系。首先用j a v a 编程语言编写源代码,其次将代码编译成j a v ac l a s s 文件,然后把c l a s s 文件装入 j a v a 虚拟机运行。当编写程序时,通过调用类( 类中实现了j a v aa p i ) 中的方法 来访问系统资源( 比如i o ) 。当程序运行的时候,它通过调用c l a s s 文件中实现 了j a v a a p i 的方法来满足程序的j a v a a p i 调用。 电子科技人学硕士学位论文 j a v a 虚拟机和j a v aa p i 一起组成了一个“平台”,所有j a v a 程序都在平台上 编译。因此j a v a 虚拟机和j a v aa p i 的组合除了被称为j a v a 运行时系统之外,还 可以被称为j a v a 平台。j a v a 程序之所以可以在不同的计算机上运行,就是因为j a v a 平台自己可以用软件来实现。 3 1 2 架构特点 j a v a 之所以特别适合于开发网络计算环境下的软件,主要是由于j a v a 架构具 有的三大特点所决定的,它们分别是:平台独立性、安全性和网络移动性。 ( 1 ) 平台独立性 平台独立性指的是j a v a 创建的可执行二进制程序,能够不加改变地运行于多 个平台,即j a 源程序先被编译成j a v a 字节码,然后再在j 上运行。但是如 果j a v a 源程序被编译为特定c p u 的本地机器码形式,比如调用了本地方法或是 各开发商自己提供的非标准运行时库等,那么平台的独立性也就无从谈起。同时, 除j a v a 语言以外,用其它编程语言编写的程序编译成j a v a 字节码来执行,也是 平台独立性的一个具体体现。 ( 2 ) 安全性 由于软件可以通过网络下载到本地运行,因此如何保护终端用户免受从网络 下载的、来自不可靠来源的、恶意的程序或是善意程序中的b u g 的侵犯对j a v a 的 安全性提出了一个巨大的挑战,同时也成为设计虚拟机的一个重要的参考基本原 则。针对这种情况,j a v a 架构采用了一个扩展的内置安全模型。该模型随着j a v a 平台的版本得到不断的发展。例如:j d k l o 提供一个可定制的沙箱来运行不被信 任的程序,j d k l 1 提供基于代码签名和认证的信任模型来加强沙箱,j d k l 2 以 上的版本允许建立更细粒度的安全策略。 沙箱模型指的是你可以接收来自任何来源的代码,而不是要求用户避免将来 自不信任站点的代码下载到机器上,但是当来自不可靠来源的代码运行时,沙箱 将限制它进行可能破坏系统的任何动作。不必指出哪些代码可以信任,哪些代码 不可以信任,也不必扫描查找病毒,沙箱安全模型使得安全工作变得更加容易。 组成沙箱的基本组件如下: 类装载器 c l a s s 文件检验器 内置与j a v a 虚拟机( 及语言) 的安全特性 1 2 第三章j a v a 虚拟机 安全管理器及j a v aa p i 1 类装载器 类装载器分为启动( 默认) 装载器和用户自定义装载器两种,类装载器的工 作是负责将c l a s s 文件装入j v m ,而不管代码中是否有漏洞或是代码本身就是恶 意代码。而后由不同的类装载器分别为装入的类提供不同的命名空间,从而守护 了被信任的类库的边界,并确定了代码在某类中可以进行的操作,以此来防止恶 意代码去干涉善意的代码。 2 c l a s s 文件检验器 c l a s s 文件检验器保证装载的c l a u s s 文件内容有正确的内部结构,并且这些c l 嬲s 文件相互间协调一致。如果c l a s s 文件检验器在c 1 嬲s 文件中发现问题,它将抛出 异常。d a s s 文件检验器通过扫描来完成它的操作,扫描具体包括以下一些检查内 容: 类文件的结构是否正确 代码有没有伪造的指针 所有变量在访问前是否己经初始化 变量的类型是否是指令所期望的类型。绝大多数指令都是有类型的 没有栈上溢或下溢 没有缓冲区溢出( 数组边界每次访问时都要检查) 不管控制流按照什么路径到达一条指令,栈大小完全相同 是否侵犯访问限制 是否进行非法数据转换 按照正确参数调用方法 3内置与j a v a 虚拟机( 及语言) 的安全特性 j a v a 虚拟机装载一个类,除了对符号引用的检验等外,j a v a 虚拟机在执行字 节码时还进行其他一些内置的安全机制的操作。它们大都是j a v a 编程语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黏土相框设计课件
- 打造书香校园课件
- 2025版企业战略顾问聘请合同模板(未来发展)
- 2025版门卫岗位技能提升与职业发展合同
- 2025版酒店客房用品环保材料销售合同
- 2025版剧院消防系统安装及施工安全责任合同
- 2025版高端手机抵押消费贷款合同范本
- 二零二五年健身房健身教练职业发展规划咨询合同
- 旬阳县医院消防知识培训课件
- 早餐安全知识培训课件
- (2025年标准)离职手协议书
- 2025年团场人员考试题库
- 班组质量管理
- 2025年四川省建筑施工企业安管人员考试(企业主要负责人·A类)历年参考题库含答案详解(5卷)
- 2025版金属材料买卖合同终止及废旧材料回收利用协议
- 实战能力评估模型-洞察及研究
- 智慧监狱AI大模型数字化平台规划设计方案
- 超声引导髂筋膜阻滞技术
- 危大工程安全智能化管理措施
- 内能的利用单元练习 2025-2026学年物理人教版(2024)九年级全一册
- 铁路建设工程质量安全监督管理办法
评论
0/150
提交评论