(计算机科学与技术专业论文)基于数据混淆的软件保护研究.pdf_第1页
(计算机科学与技术专业论文)基于数据混淆的软件保护研究.pdf_第2页
(计算机科学与技术专业论文)基于数据混淆的软件保护研究.pdf_第3页
(计算机科学与技术专业论文)基于数据混淆的软件保护研究.pdf_第4页
(计算机科学与技术专业论文)基于数据混淆的软件保护研究.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

(计算机科学与技术专业论文)基于数据混淆的软件保护研究.pdf.pdf 免费下载

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

文档简介

武汉理t 大学硕士学位论文 中文摘要 随着软件业的不断发展,尤其是网络应用的快速发展,软件安全问题已经 成为计算机安全领域中最值得关注的个问题。计算机安全领域不断涌现新的 突破和新的发展,这些新的技术给软件安全带来了新的威胁,从而迫使软件保 护机制不断的改进。j a v a 语言以其良好的平台无关性在学术研究和商业开发中 都得到了广泛的应用。但是由于j a v a 字节码包含了大部分的源码结构等信息, 所以很容易对它们进行逆向工程,同时源代码也更易于被提取。 如何保护应用程序不受恶意主机的破坏是传统安全技术无法处理的。在恶 意主机环境下,主机可以对软件系统进行逆向工程或者肆意的篡改,其安全性、 完整性与可用性都受到了很大的威胁。因此,需要一种有效的方法来保护软件 和软件知识产权。代码混淆作为一种防止逆向工程的技术应运而生。在实际应 用中,对软件提供绝对的安全保护是不可能,也是没有必要的。只要能使攻击 者的攻击付出较高的代价,则可以认为混淆技术达到了安全保护的作用。 本文以保护软件、提高逆向工程代价为目标,分别从软件保护与软件破解 两方面对逆向工程与代码混淆技术进行了深入的研究。主要研究工作如下: 首先,对应用安全问题和软件保护进行了分析。针对目前软件安全领域中 存在的三种软件威胁模型,着重分析了恶意主机的威胁,并对几种常见的软件 保护技术做了详细的介绍,例如:软件水印、软件防篡改技术、加壳保护、软 件加密、代码混淆技术等。 其次,对j a v a 虚拟机的结构和运行机制做了详细的介绍,对j a v ac l a s s 文件 的格式进行了深入的分析。同时对代码混淆技术做了相应的研究,包括代码混 淆技术的概念、定义。目前,代码混淆技术主要分为布局混淆、控制流混淆、 数据混淆、预防混淆等几种。 最后,研究了逆向工程的相关概念、分类以及应用和发展方向。在对逆向工 程了解的基础上,针对程序中的关键数据的保护问题,本文设计了一个混淆系 统模型,其基本思想是通过同态加密和数据混淆以实现动态数据隐藏,并且从 理论和实际两方面分析了混淆转换的有效性、正确性以及性能过载。 关键词:同念加密:逆向工程:软件保护;代码混淆 a b s t r a c t w i t ht h ec o n t i n u o u sd e v e l o p m 饥to ft h es o 脚a r ei n d u s t 吼e s p e c l a l l yt h ef a p l d d e v e l o p m 哪o fn e t w o r ka p p l i c a t i o n ,s o 脚a r es e 嘶t y h a s b e c o m e ap r o b i e i i lw h l c h s h o u l d b ec o n c e n l e dm o s t l yi nc o m p u t e rs e 嘶t y t h e n e wb r e a k t u 曲 a n d d e v e l o p m e n th a v e 锄e 耀脚c o n t i n u a l l yi nc o m p u t e fs e c 面t y ,w h i c h n o to n l yb 彻g 盯e a tc o n v e n i e l l c et op e o p l eb u ta l s om n g n e w 恤a t st os o 脚a r es e c 明t y ,s om e s o 脚a r ep r o t e c t i o nm e c h a n i 锄 i sf o r c e dt oi m p r o v ec o n t i n u a l l y w i t hg o o d p l a t f o 咖i n d e p e n d e n t ,j a v al 锄g u a g eh a v e b e e nw i d e l yu s e di na c a d e i n l cr e s e a r c ha r i d c o 舢m e r c i a ld e v e l o p m e l l t h o w e v b e c a u s eo fj a v ab y t ec o d ec o n t a l n sm o s t o tm e s o u r c es _ t n l 晚玳i n f o n n a t i o n ,s or e v e r s ee i l 西n e 币n gh a s b e c o m ee a s l e rt h a ne v e r 锄d e x t r a c t e dt os o u r c ec o d ee a s i l y h o wt op r o t e c ta p p l i c a t i o np r o 伊锄舶mm a l i c i o u sh o s t i san e wl s s l l et h a t c 舢tb ed e a l tb y 仃a d i t i o n a lt e d m o l o 西e s r e v e r s e 锄g i n e 甜n gh a sb e c o m e p o s s l b l e 0 rd i s t o 棚w i l 伽yf o rs o 脚a r es y s t 锄i nm a l i c i o u s h o s ts u 咖u n d l n 黟,t h es e c u n t y , i n t e g r i t ya n da v a i l a b i l i t yo fs o 脚a r es y s t e ma r e t h r e a t 铋e d t h e r e l b r ec o n v e n l e i l t 觚d e 虢c t i v em e l h o d sa r en e e d e d l op r o t e c ts o 脚a r e 锄ds o 腑a r ei n t e l l e c t u a lp r o p 瞰y t h e nt h ec o d eo b 如s c a t i o na sat e c h n o l o g yt op f e v e n tr e v 瞅e n 舀n e 饥n g 锄e r g e d l n p r a c t i c a la p p l i c a t i o n ,t h ea b s 0 1 u t es e 砸t yp r o t e c t i o 施rs o 脚a r e l sl m p o s s l b l ea l l d a l s ou 仰e c e s s 跚莎a s1 0 n ga st h ea t t a c k e ri sf o r c e dt 0p a yah i 曲e rp n c e ,t h e c o d e o b 向s c a t i o nt e c h n o l o g yc a nb ec o n s i d e dr e a c h i n gt h ee 虢c to fs e c 明t yp r o t e c t l o n c u r r e n t l y ,p e o p l ep a ym o r e 锄d n l o r ea t t e n t i o nt oc o d eo b 如s c a t i o nw h l c h a san e w p r o t e c t i o ns 0 r w a r e s e c u r i t yt e c h n o l o 黟 砥sp a p e rt o o kp r o t e c t i n gs o r w 粼 锄di m p r 0 v i n g t h ec o s to fr e v 嘲 e i l 西n e 甜n g 镐t 鹕e t ,a i l dd e e p l yr e s e a r c h e d o nr e v e r s ee n 舀n e e n n ga 1 1 d c o ( 1 e o b m s c a t i o na b o u td e f 硫s ea n da t t a c ks 印a m t e l y m a i n c o i 崩b u t i o n smt h ep 印e ra r e : f i r s t l y t h ei s s u e so f 印p l i c a t i o ns e c u r i t y 锄ds o f h a r ep r o t e c t l o n a r ea i l a l y s e d a g a i n s tt h r e es o 脚a r et h r e a t e i l i n gm o d e l si n s o r w a r cs e 砥t yc 岍e n t l y ,t h i sp a p e r 锄p h a s et h et h r e a to fm a l i c i o u sh o s t s ,a sw e l la s 酉v et h ed e t a i l e d i n t r o d u c t i o nt o r s e v 硎s o 脚a r ep r o t e c t i o nt e d m o l o 酉e s , s u c ha s :s o r w a r ew a t 咖a r k ,s o 黼a r e t 锄p e 卜田) o 劬易p a c k e r s 州e c t i 鸭s o 肌a r e 饥c r y p t i o n ,c o d eo b 觚c a t l 伽t h n i q u 。8 武汉理1 二大学硕士学位论文 a n ds 0o n s e c o n d l y ,ad e t a i l e dd e s 谢p t i o ni s 舀v e nf o r t h es t r u c t i 】r e 锄d 叩e r a t i o n m e c h a n i s mo fj a v av i t u a lm a c h i n ea n dad e e pa f l a l y s i si sm a d ef o i t h ef o m l a to fj a v a c l a s sf i l e s m e a l l w h i l e ,w es t u d yt l l ec o d eo b 向s c a t i o nt e c h n o l o g yw h i c hi n c l u d i n gt h e c o n c 印t s ,d e 6 n i t i o n c 蚰铷t l y ,t h ec o d eo b 如s c a t i o nt e e h n o l o g yc o n s i s t so fl a y o u t o b 如s c a t i o n ,c o n t r o lo b 如s c a t i o n ,d a t ao b 恕s c a t i o na n dp r e v e n t i v eo b 如s c a t i o n f i n a l l y , t h er e l a t e d c o n c 印t s , c l a s s 语c a t i o n , 印p l i c a t i o n a n dd e v e l o p m e n t d i r e c t i o no ft h er e v e r s ee n 百n e 嘶n ga r es t u d i e d b a s e do nt h eu n d e r s t a n d i n go ft h e r e v e r s ee l l 舀n e 硎n g ,a g a i n s tt h ep r o t e c t i o no f 嘶t i c a ld a t ao fp r o 黟a m ,t h ep a p e f d e s i 朗粕o b 如s c a t i o ns y s t 咖,t h eb a s i c i d e ai st h a tt h r o u 曲h o m o m o 讪i s m e n 明硝i o ns c h e n l ea n dh o m 响。印h i s md a t ao b 向s c a t i o nt o a c h i e v ed y n 锄i cd a t a l l i d i n 舀a sw e l l a sm ee 仃e c t i v e i l e s s ,c o r r e 咖e s sa n dp e r f o 肿a n c eo v 甜o a do f o b 如s c a t i o nt 啪s f o 咖a t i o na r ea i l a l y s e d 舶mt h e o r e t i c a la n dp r a c t i c a l k e yw o r d s :h o m o m o 印h i s me 1 1 c 哪t i o n ;r e v e r s ee i l 百n e 嘶n & s o 胁a r ep r o t e c t i o n ; c o d eo b 如s c a t i o n i l l 武汉理工大学硕士学位论文 第1 章绪论 1 1 研究的背景和意义 伴随计算机信息业日新月异的发展,开发语言和平台种类层出不穷。但是, 不同平台上得运用不同的语言进行开发,这种局限性使得代码的通用性非常差。 寻求一种能跨越平台的语言和架构势在必行。j a v a 高级语言编写的源程序可以 被编译成一种称为字节码的中间代码,并且这种中间代码可以在任何平台下被 解释执行。因此,该语言无疑成为了人们在跨平台上进行软件开发的最好选择。 目前,以解释执行的中间代码对外发布方式已经成为软件开发中的主流方 式。鉴于跨平台的需求,j a v a 字节码包含了很多与平台有关的信息,任意平台 下的j v m 都能够正确解析执行j a v a 字节码文件。由于j a v a 程序采用动态连接, 所以j a v ad a s s 文件不仅包含了对自身属性和成员方法的引用,还包含了对其他 类属性和成员方法的引用。除此之外,j a v ac l a s s 文件同样还提供了很多可以供 调试的参考信息,这些调试信息主要涉及了j a v ac l a s s 文件的符号信息、局部变 量的名称以及类型、字节码指令集以及j a v a 语言之间的各种紧密联系。基于这 些特点,j a v a 语言比编译型语言c 、c + + 更加容易被反编译。 与此同时,互联网的普及和急速发展势必导致了新的计算环境和计算模型 的产生。如今越来越多的软件应用都加入网络通讯中。典型应用有:远程过程 调用、w 曲服务、移动a g e n t 等技术等。与传统的那些计算机模型相比,分布 式计算机模型更为强大的计算能力和更高的灵活性显而易见,并且它们确实给 人们的生活带来了实实在在的便利,但同时也带来了很多安全隐患。 目前,计算机软件行业所面临的两大主要安全隐患为: 第一类安全隐患是恶意代码问题u 2 】。程序在远程主机上执行时,我们必须 对远程主机提供相应的监控和保护,预防主机被进行恶意操,造成主机资源的 破坏。这类安全问题从始至终都是计算机安全领域考虑的重点,该领域主要涉 及:病毒、蠕虫木马、反病毒软件、防火墙入侵检测系统等。 另一类安全隐患为不确定主机下的软件代码被恶意的窃取和篡改。2 0 世纪 9 0 年代初,移动a g e n t 技术的出现又一次掀了起安全专家对恶意主机问题的讨 论高潮【3 】。由于软件在不确定的环境下运行,主机可以对软件任意地进行分析和 跟踪。如果此时不对软件采取相应的安全预防措施,软件遭到破坏的几率会非 武汉理工大学硕十学位论文 常大。一旦具有商业价值的信息或者机密性信息被攻击者窃取或者是肆意篡改, 带来的损失以及所产生的后果也是无法想象的。 这些软件安全危机的出现迫使了软件防御措施的不断改进。当前比较流行 的软件安全保护技术主要有密码保护技术、软件水印技术、数字指纹技术、软 件防篡改技术和代码混淆技术等。 密码保护技术实现的主要方法是用加密算法对机密信息和敏感数据进行加 密后再传到网络上。用户接收到信息后用相应密钥对信息进行解密,如果密钥 正确,则可以得到原始信息。一般来说,攻击者是很难在没有密钥的情况下获 取有用的机密数据。 软件水印技术主要是用来保护计算机软件产品的版权。其主要实现方法是 将软件的版权信息和用户的唯一性身份标志隐藏到程序中以此来达到保护软件 版权问题。软件水印中携带的唯一性身份标志可以用来唯一标记软件产品作者, 还可以用来鉴别软件产品的合法性。当需要进行版权合法性验证时,我们可以 提取隐藏在程序中的重要信息来证明软件版权的所有权的权属问题。 数字指纹技术可以被理解为一种由计算机处理的数字化的特征序列。通过 在作品拷贝中添加的唯一性身份标志可以甄别出不合法拷贝。不同的标识符号 将软件的一个版本映射出许多个不同的版本,而不同的软件版本共享一个软件 指纹。如果某个软件指纹被发现该系统具有多个相同的版本,则可以通过升级 或者打补丁的方式来终止这个软件的安装。 软件防篡改技术的实现主要是通过软件的完整性校验机制来判断软件是否 被篡改,是一种防止软件被非法篡改的技术。 代码混淆技术是一种新的软件保护技术,目前还处于发展阶段。代码混淆 技术主要是利用混淆算法对应用程序进行混淆,使经过混淆处理后的程序同没 经过混淆处理之前的程序在功能上相同,但是在混淆处理过程中,两者的语义 没有发生任何改变。代码混淆技术是本文研究的重点内容,后面章节将会做更 详细的介绍。 1 2国内外研究现状 代码混淆技术是近几年才发展起来的新兴技术,第一次对代码混淆技术进 行系统的研究是从上世纪九十年代末兴起的。目前在代码混淆技术的研究中, 新西兰a u c k l 柚d 大学c o l l b e r g 等人的成果影响最大。 2 武汉理i 大学硕七学位论文 c o l l b e r g 等人对代码混淆技术做了比较完整的阐述,并且给出了代码混淆技 术的定义,即是一种以增加程序理解难度系数为目标的程序变换技术【4 】。 w a n g 建立了针对恶意主机问题的代码安全体系,他所表现的思想是破坏程 序之间的控制通讯信息【5 】。o 西s o 在w a n g 的算法上做了进一步的改进,在破坏程 序控制通讯信息的基础上,对程序过程间的所有调用接口信息再进行更严重的 破坏【6 】。d o u g l a s 针对j a v a 语言的特征,通过构造复杂难解读的程序结构的方法来 增加代码的理解难度系裂丌。 混淆算法是代码混淆技术的核心。单一模式的混淆算法不可能满足各类应 用的安全需求,因此需要针对不同的应用去选取各自合适的算法。在理论研究 方面,对于构造的代码混淆算法是否有效,尚不能够提一套严格的证明机制。 许多的研究也表明,代码混淆技术并不是一种绝对的安全保护技术,它的局限 性在于经过混淆后的代码仍然具有信息泄漏或被篡改的可能。 w a n g 和o 西s o 采用反混淆算法的复杂度证明了混淆算法的有效性【8 哪。 b a r a l ( 最早从密码分析的复杂性角度探究了代码混淆是否有效,并提出了代码混 淆的密码分析框架【1 0 】。m 在的b a r a k 结论的基础上进行了进一步的推广,证明 了代码混淆在保证信息的安全方面不具备绝对性j 。 针对混淆算法的攻击主要涉及下列几种方式:模式识别、动态分析、黑盒 测试攻击等。模式识别主要是通过模式匹配进行分析;动态分析则主要是依靠 于流程之间的控制转换机制来进行的;黑盒测试攻击采取黑盒测试的方法去测 试程序,攻击者可以依据测试的结果去了解类、函数和域的功能,以此来获取 所需要的跟踪信息。 目前国内关于代码混淆技术的研究并不多,基本上都是处于跟踪国外研究发 展的阶段。现阶段代码混淆技术方面的研究成果大部分是对综述领域的涉足。 1 3 论文的主要研究内容 本文的研究内容主要包括以下几个方面: 分析了恶意主机的安全问题,了解了相关的软件保护技术。 研究了当前主流的代码混淆技术,包括稚局混淆、控制流混淆、数据混淆、 预防混淆,并揭示了混淆变换具有的些特性。 分析了逆向工程的概念、逆向工程的分类以及逆向工程的应用和发展方向。 设计了一个代码混淆系统模型,该系统是一个基于j a v a 字节代码的混淆系 3 武汉理一【大学硕十学位论文 统,主要实现了类合并和同态数据混淆。通过对混淆系统的测试,分别就混淆 转换的有效性、混淆转换的正确性、以及混淆转换的性能进行了分析和评估。 1 4 本文结果及章节安排 第1 章绪论。简要介绍了研究工作的相关背景和该领域的国内外研究现状,并 说明了本文的主要研究内容以及各章节的安排。 第2 章应用安全与软件保护。主要介绍了应用安全方面的问题、三种软件威胁 模型和相关的软件保护技术。 第3 章代码混淆技术。简要介绍了j a v a 虚拟机体系结构和j a v ac l a s s 文件的格 式以及代码混淆技术的概念、分类。 第4 章逆向工程与混淆设计。讨论了逆向工程的相关问题,包括逆向工程的概 念、逆向工程的分类以及逆向工程的应用及发展方向,并提出了一个基 于同态数据混淆的混淆转换模型。 第5 章系统实验分析和评估。对混淆转换做出相应的分析和评估,其中包括混 淆转换的有效性、混淆转换的正确性以及混淆转换的性能。 第6 章总结与展望。总结了论文的主要研究成果和对未来工作的展望,并对后 续的研究工作做出了相应的规划。 4 武汉理t 大学硕士学位论文 第2 章应用安全与软件保护 2 1应用安全 应用安全的涵盖面非常广泛,它主要是指保护那些存在安全隐患的应用程 序【1 2 j 。总体来说,它主要包括以下几个方面的安全: ( 1 ) 软件安全 一直以来,软件盗版问题都是一个热点话题。软件盗版侵犯了合法用户的 版权问题。软件安全主要是为了防止软件遭受到未授权的用户破坏,保护合法 用户的权利。 ( 2 ) 应用程序中的数据安全 应用程序中的数据安全主要是为了防止在数据保存和传递过程中,程序中 的重要数据遭到恶意用户的破坏。 ( 3 ) 网络应用安全 由于网络应用的迅速发展,人们可以很方便的利用网络进行各种信息的传 输。通过网络,人们可以了解到任何他们想要知道的信息。虽然网络的出现给 人们的生活带来了很多便利,但是网络中也存在着很多安全隐患。网络安全主 要是为了保护网络资源,防止攻击者对网络上的资源进行攻击。它的主要工作 是保护网络的正常的运行,保护网络中传输的重要信息不被攻击者窃取。 2 2 软件威胁模型 一般来说,对一个软件系统提供的保护不可能是绝对安全的,它或多或少 都存在着一些安全隐患。这些安全隐患主要包括:系统中的哪些设施需要我们 去保护或者是针对某些特定的安全隐患提供特定的保护。我们将系统可能经受 到的安全隐患称为威胁模型【1 2 】。 系统在实际运行过程中所经受到的威胁程度直接影响着威胁模型的好坏。 随着科技的进步,攻击者的技术也在飞速发展,如果我们不对威胁模型进行改 进,让其一直保持原来的现状,则系统所存在的安全隐患就会更加严重,所以 要不停的对威胁模型进行改进才能使系统的安全性更高。 目前,软件安全所面临的安全隐患主要三种,下面分别对这三种安全隐患 武汉理:l :大学硕十学位论文 做详细的叙述: ( 1 )内在的威胁模型 应用系统在正常环境下运行的时候,攻击者可以使用自己的特定权限来偷取 和修改数据。比如数据库管理员,他可以利用管理员身份登录到系统去查看重要 信息或者修改数据。 ( 2 ) 不确定的主机威胁模型 当应用程序运行在一台无法被信任的主机上时,此时应用程序所经受到的威 胁可能不是来自于外界而是来自于自身。对于这种威胁我们根本就无法预料,所 以很难进行防御。攻击者可以事先在主机上部署恶意程序,当正常的应用程序开 始执行时,恶意程序就可以对j 下常的应用程序进行肆意的分析,窃取重要的信息 或者是破坏正常的应用程序,让其处于非法运作状态。 ( 3 ) 网络威胁模型 由于大多数应用服务都依赖于网络,通过网络它们之间可以互相通信。虽然 通过这种网络方式可以给人们带来很大的好处,但是攻击者对这些暴露在网络中 的应用服务也格外青睐,攻击者可以通过各种非法手段使网络处于非正常状态, 他们还可以对网络中传输的重要数据进行恶意分析,一旦这些重要信息被非法用 户偷取到了,其后果也是非常严重的。 从以上的述说我们可以看出不确定的主机威胁模型的安全隐患最为严重,这 主要是由于这种威胁是我们不可预料的,很难做到相应的防御措施。 2 3 软件保护技术 软件保护技术主要是对软件进行相应的保护,而软件破解技术则是相反的, 它主要是对软件造成相应的威胁。软件破解技术的进步推进了软件保护技术的 快速发展。目前,软件保护技术的方法主要有:软件水印技术、软件加密技术、 软件防篡改技术、加壳保护技术、代码混淆技术【b l 等。 ( 1 ) 软件水印技术 软件水印技术现在处于快速发展的状态,是近几年才流行起来的一种新技 术。目前,软件水印技术主要有两种提取技术,分别是静态水印和动态水印。 静态水印主要是把应用程序看作成是种静态的目标对象。它所采取的的 方式是将重要的水印信息隐藏在代码或者图像中,以此来达到隐藏的目的。将 水印信息隐藏在图像中这种方式很容易实现但也很容易被发现,因为图像给人 6 武汉理工大学硕士学位论文 一种很直观的感觉,只要攻击者稍作分析就有可能找出隐藏在图像中的水印信 息。而将水印隐藏在代码中,由于代码的结构不是很直观,理解起来也非常费 劲,所以与隐藏在图像中的水印相比,将水印隐藏在代码中的这种方式的隐蔽 性更强,安全性更高。 动态水印与静态水印刚好相反,它主要是将应用程序看作成是一种动态的 目标对象。它既可以在程序执行的过程中隐藏水印还可以在程序指令执行的时 候将水印信息隐藏在指令执行的顺序罩。与静态水印相比,动态水印的隐藏性 更好,安全性也更高,但是它的目标对象必须是针对整个执行的应用程序。而 对于某个小程序片段的执行,动态水印起不到任何作用,而在这种情况下静态 水印却可以发挥出它的优势。所以采取哪种水印方式主要是根据自身的需要去 选择,不一定动态水印就比静态水印更加安全,因为有可能动态水印的选取根 是无效的,发挥不出来它的优势。 我们可以通过在应用程序中隐藏水印信息的数量、隐藏的水印信息能抵抗 攻击的能耐以及隐藏的水印信息不被人发觉的程度去评估个软件水印技术的 优劣。目前,软件水印大多数应用在对软件版权的保护以及对软件盗版的防御。 ( 2 ) 软件加密技术 软件加密技术主要由软加密和硬加密两种方式组成。软加密顾名思义就是 采取软件的手段去达到加密的效果。软加密主要包括注册码、许可证文件等。 注册码和许可证都可以生成一个唯一序列号,只有当用户输入这个正确的唯一 序列号之后,他们才能进行正常的操作。虽然采取软加密的方式实现起来非常 容易,但是它也存在着很多不足之处。密钥的存储就是一个非常棘手的问题, 因为不管密钥存储在哪里,它都有可能被泄密。另外,如果一个软件的的使用 期已经过期了,但是我们仍然可以通过修改系统的时间去使用该软件。 ( 3 ) 硬加密比软加密的安全性高,但是它的价格也非常高,对于一般用 户来说,硬加密方式是不可取的,因为用户可能根本就无法消费起。而对于商 业软件来说,它确实是一个不错的选择。因为商业软件都包含了很多重要信息, 一旦这些重要信息被偷取了,会造成很多严重的后果,商业软件对安全性要求 更高。硬加密的主要方式有加密狗、加密光盘。加密狗主要一种硬件产品,非 常智能。而加密光盘则主要是将密钥存储在光盘的轨道上,其它人则不能通过 刻录光盘而得到这个密钥。 ( 4 ) 软件防篡改技术 软件防篡改技术主要是来用来保护软件不被恶意攻击者肆意修改。它主要 7 武汉理工大学硕十学位论文 是通过判断软件是否具有完整性来证明软件有无被破坏。我们可以通过单向散 列函数的散列值去判断软件的完整性有无受到破坏。由于单向散列函数具有单 向性特点,它的输出跟输入没有任何关系,所以它的安全性非常高,这种优势 使得它应用于很多领域。单向散列函数的散列值具有唯一性特性,经过计算验 证,我们不可能找到一个于它值相等的另外一个散列值。基于散列值的特性, 所以我们可以将散列值隐藏在软件中,以此来保护软件的版权所有权或者是跟 踪盗版软件。散列函数有很多种算法,目前用的最多的是c r c 算法。 判断一个软件是否具有完整性可以通过以下两种方式来判断: 第一种方式是判断内存中的代码节是否具有完整性。应用程序主要是由代 码和数据组成的,它们在内存中被存储为代码节和数据节。如果我们选取内存 中的数据节作为检验对象,由于数据节是被操作的目标对象,它非常不稳定, 经常会变动、更新,所以选取数据节作为检验对象这种方式是非常不可取的。 由于代码节是固定不动的,在程序被编写完成后,这些代码节就不会再发生变 化了,所以我们可以选取代码节作为检验对象。这种方式实现的过程是先将内 存中的代码节进行c r c 求和,然后将计算结果保存起来。当程序被执行时,再 对此时内存中的代码节进行c r c 求和,然后比较两次计算的的求和结果。如果 两者的求和结果一致,则证明内存中的代码节具有完整性,反之,则被破坏了。 第二种是判断硬盘中的文件是否具有完整性。这种方式实现的过程是先将 储在硬盘上的文件中的重要数据进行c r c 求和,并将求和得到的结果保存起来。 当使用存储在硬盘上的某个文件的时候,我们再对文件中的重要数据求和,然 后将此次得到的求和结果与事先保存起来的求和结果进行比较,如果两次求和 结果是一致的,那证明硬盘中的文件具有完整性,没有被破坏。如果两次求和 结果不一致,则证明硬盘中的文件不具有完整性,已经被破坏了。 ( 5 ) 加壳保护 加壳顾名思义就是对软件进行一种特殊处理,即加上一个外壳,以此来达 到保护软件的目的。加壳所采取的方式主要是对应用程序进行加密或者压缩。 当对一个应用程序进行加壳后,存储在硬盘上的程序则都被加密了,此时 我们不可能在硬盘中看到原程序。只有当程序在运行过程中,它们才会被解密, 还原成原程序,并且解密过程只能在内存中进行。由于攻击者很难看到内存中 的运行状态,所以这种加壳方式可以对程序起到一定的保护作用。 对应用程序进行加壳后,它们的执行效率可能会提高也有可能下降,这主 要是由于选取了不同的加壳方式所导致的。一般来说,加壳后的应用程序会减 8 武汉理t 人学硕士学位论文 少对硬盘的读取操作的时间,但是却加深了c p u 的负载。 ( 6 ) 代码混淆技术 代码混淆技术是一种新的软件保护技术,目前还处于发展阶段。代码混淆 技术主要是利用混淆算法对应用程序进行混淆处理,使的经过混淆处理后的程 序与没经过混淆处理之前的程序在功能上相同,但是在混淆处理过程中,两者 的语义并没有发生任何改变。由于经过混淆处理后的程序在结构上发生了很大 的改变,所以令攻击者很难真正理解它们,即使攻击者最后能破解这些经过混 淆处理后的程序,但是也会让他们付出很高的代价。在实际应用中,我们不可 能对一个软件提供绝对的保护,如果能让攻击者付出更多的代价,则也可以认 为对软件起到了保护的作用。 2 4本章小结 本章主要介绍了应用安全中的三种安全问题和软件威胁模型的三种威胁模 型。针对不确定的主机威胁模型的问题,我们做了详细的介绍。如果对一个应 用程序的执行过程进行限制,我们可以防止正常程序遭受非法程序的破坏。但 是对于一个不确定的主机来说,我们无法预料它的行为,并且对于它自身的行 为,我们也不能采取任何行动。不确定的主机可以利用自己的内在优势去分析 程序中的重要数据或者破坏内存中运行的正常代码,令正常运行的程序遭到破 害。针对这种情况,我们唯一可以做的事情就是对主机的资源进行控制。但是 对主机的资源进行控制也不能防止不确定的主机的攻击,只能说减轻程序被攻 击的程度。 接着对目前几种常见的软件保护技术做了完整的述说。一般来说,我们是不 可能对一个软件进行对绝对的保护。然而,对一个软件进行某种程度上的保护 还是可以做到的,相应的研究结果也说明了这种情况。 9 武汉理t 大学硕士学位论文 第3 章代码混淆技术 3 1j a v a 虚拟机与j a v ac l a s s 文件 j a v a 虚拟机支持j a v a 面向网络体系结构三大支柱的所有方面。j a v ac l a s s 文件是可以运行在任何支持j a v a 虚拟机的硬件平台和操作系统上的二迸制文 件。j a v ac l a s s 文件中包含了j a v a 虚拟机所需知道的关于类或接口的所有信息。 3 1 1j a v a 虚拟机体系架构 j a v a 是一种面向对象的程序设计语言,它跟c + + 很相似,并且都是面向对 象的编程语言,但是它比c h 易学、易用,因为j a v a 剔除了许多c + + 容易混淆 的概念以及不安全的特性,例如:复杂的指针运算、内存回收等。 由于计算机网络的快速发展,使得以网络为核心的硬件资源逐渐增长,但 是不同的硬件设施和不同的操作系统都有各自的用途。以往一个软件程序只能 运行在一个特定的硬件系统和操作环境上,如果换了一个不同的硬件系统和操 作环境,可能导致该软件程序不能正常运行正是因为这种局限性使得j a v a 应 运而生。j a v a 可以在不同的平台上运行,支持不同体系结构的主机。不仅如此, j a v a 的安全性也非常高,在网络间可以安全发送,并能保证组件可以正常运行。 总体来说,j a v a 的网络体系架构有三大特点:与平台无关性、安全性、网络移 植性。正是基于这些特点,j a v a 语言非常适合在网络环境下进行开发。 下面对j a v a 的三大特点做简要的介绍: ( 1 ) 与平台无关性 j a v a 的与平台无关性,即“一次编写,随处运行是众所周知的。与平台 无关性指j a v a 字节码不经过任何修改可以在不同的硬件系统和操作环境下运 行。编译器首先将j a v a 源程序编译成j a v a 字节码,然后j a v a 字节码在j v m 控 制下执行。如果j a v a 源程序因需要被编译器编译成特定的机器代码,例如:调 用本地方法。在这种情况下,j a v a 的与平台无关性也就失效了。但是如果将其 它编程语言编写的程序编译成j a v a 字节码,并且该j a v a 字节码在j v m 上能正 常运行,这也是与平台无关性的一种体现。 ( 2 ) 安全性 由于互联网的迅速发展,人们从网络上下载任何软件程序都是非常方便的 l o 武汉理工大学硕十学位论文 但是网络资源的可靠性我们却不能得到保证。从网络上下载的程序有可能 是恶意的程序或者程序在设计的时候就自身带有缺陷。如何让终端用户在网络 上下载的软件程序是安全的,这是j a v a 安全性所面临的一个巨大的问题,为了 解决这个问题,j a v a 架构被设计成带有一个扩展的内置安全模型的架构。 沙箱模型指的是我们可以从网络上下载任何代码,其中包括从不信任网络 站点上下的代码。如果我们不运行那些不被信任的的程序,沙箱安全模型不会 采取任何行动。旦运行这些不被信任的程序,沙箱机制将会采取措施,阻止 这些恶意程序对系统的破坏。基于沙箱安全模型的特性,我们的安全工作也变 得更加方便,因为我们不用关心哪些程序代码是安全、可信任的;哪些程序代 码是非法、不被信任的,我们也不用去查找病毒。 下面简要介绍沙箱的基本组件: 类装载器:类装载器由启动装载器和用户自定义装载器组成。首先,类装 载器将c l a s s 文件装载到j a v a 虚拟机中,在装载过程中不必考虑代码是否为恶意 代码或者代码自身带有缺陷。然后,各自的类装载器为各自装入的类提供各自 的命名空间并确定代码在某个类中能进行的相关操作。通过这种方式可以将信 任的类和不被信任的类隔离开来,从而避免了恶意代码去破坏正常运行的代码。 c l a s s 文件检验器:c l a s s 文件检验器主要用于检验所装载的c l a s s 文件是否具 有正确的内部结构格式。c l a s s 文件检验器主要检查以下一些内容:程序代码中 是否有伪指针、类文件的结构是否被正确定义、变量在使用之前是否进行初始 化了、内存中是否有缓冲区溢出以及数据之间是否存在非法数据的转换等。如 果c l a s s 文件结构格式不正确,c l a s s 文件检验器会抛出异常。 内置j a v a 虚拟机的安全特性:j a v a 虚拟机除了对符号引用的检查外,还包 括对其它的一些内置安全机制的检查,其中包括:数组是否超越边界了、自动 垃圾收集、空引用的检查等。 安全管理器及j a v a a p i :在j a v a 虚拟机内部运行恶意代码或者自身带有缺 陷的代码时有可能会影响到j a v a 虚拟机外部的资源。在这种访问控制情况下, 安全管理器起到了很好的中枢作用。当j a v aa p l 进行操作时,它首先向安全管 理器申请请求,如果得到许可,则可以进行正常的操作,如果被拒绝,则停止 操作。 ( 1 ) 网路移植性 网路移植性起源于分布式处理模式,是一种新的软件模式。分布式处理模 式集合了处理器和网络的优点,将进程进行分布,然后运行在多个处理器上, 武汉理工人学硕士学位论文 进程之间共享数据。这种分布式模型具有传统大型计算机系统不可比拟的优势, 但是这种分布式软件模式非常不好管理,软件的安装、更新、维护都非常困难。 正是在这种情况下,j a v a 体系结构的优势使得软件的网路移植性成为了可能。 网络移动性的出现使得用户不用再去考虑软件的版本问题,通过网络发布的软 件可以自动更新为新的版本。这种新的软件模式客服了分布式处理模式下难以 管理软件系统的缺点。 j a v a 体系结构包括以下四个独立但相关的技术,分别如下: ( 1 ) j a v a 程序设计语言 ( 2 ) j a v a 虚拟机 ( 3 ) j a v a 应用编程接口 ( 4 ) j a v ac l a s s 文件格式 3 1 2j a v a 虚拟机结构 j a v a 虚拟机是由一个规范所定义的抽象计算机,所以被认为是“虚拟 的。 每个j a v a 虚拟机所必须实现的特性都是由该规范所定义。当启动一个j a v a 程序 时,一个虚拟机的实例也就诞生了,当j a v a 程序关闭退出时,这个虚拟机的实 例也会随之消亡。j a v a 虚拟机的主要任务是装载c l a s s 文件并且执行其中的字节 码。当编写程序时,j a v a 虚拟机通过调用类中的方法来访问系统资源。当程序 运行的时候,j a v a 虚拟机通过调用c l a s s 文件中实现了j a v a a p i 的方法来满足程 序的j a v aa p i 调用。每个j a v a 虚拟机都有一个类装载子系统和执行引擎,类装 载子系统根据给定的全限名来装入类或者接口,执行引擎负责执行那些包含在 被装载类的方法中的指令。 j a v a 虚拟机的结构主要由以下几个部分组成: ( 1 ) 数据类型 j a v a 虚拟机是通过某些数据类型来执行计算的,数据类型可以分为两种类 型:基本类型和引用类型。基本类型的变量是原始值,即真正的原始数据。而 引用类型的变量是引用值,即某个对象的引用。 ( 2 ) p c 寄存器 j a v a 虚拟机能够支持多线程的并发执行,每个线程都有它自己的p c 寄存器, 线程在启动时就会创建之间的p c 寄存器。每个线程执行个方法,如果当前被 线程执行的方法不是本地方法,则p c 寄存器会包含当前正在被执行的j a v a 虚 1 2 武汉理t 大学硕十学位论文 拟机指令的地址。如果当前被线程执行的方法是本地方法,p c 寄存器的值是没 有任何意义的。 ( 3 ) 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 a v a 虚拟机栈直接进行压入和弹出操作。如果在线程 计算中超出了j a v a 虚拟机栈所允许的大小,j a v a 虚拟机栈会抛出s t a c ko v e re n o r 错误。 ( 4 ) 堆 堆主要是用来存放程序在运行过程中所创建的对象。对于j a v a 虚拟机来说, 任何一个程序都可以拥有它,所以每个程序都会拥有自己的堆,正因为如此, 各个程序放在堆里的信息就不会互相影响。但是如果存在多线程的时候,情况 就会变的非常麻烦了。因为对于同一个程序中的多线程,它们都是共享一个堆 空间,所有的线程信息都存放在这个堆空间里,此时我们必须得采取相应的错 误来避免由于多线程引发的问题。 ( 5 ) 方法区域 在j a v a 虚拟机中,程序中方法执行时所需要的的信息都放在方法区的内存 中。方法区是动态的,它根据程序的方法的执行不停的进行变换,变大变小都 是随机性的。方法区可以被自由分配,并且在存储上不具有连续性。 ( 6 ) 运行时常数池 运行时常数池是一个动态的过程,它是对程序在运行时候的一种描述,其 主要是通过常数池表来进行描述的。对于任何一个类或者任何一个接口来说, 它都是唯一的,不可能同时出现几个。 ( 7 ) 本地方法栈 本地方法栈通常都是在每个线程被创建时才进行分配的。在j a v a 虚拟机栈 可以使用一些常规栈来支持它的本地方法。而本地方法栈它自己也可以被其他 类型的语言的在j a v a 虚拟机指令集解释器使用。 ( 8 ) 帧栈 帧的作用主要用来对数据进行存储、对程序在运行过程中所产生的结果进 行保存。当程序要进行动态连接的时候,帧也要提供相应的连接。当程序执行 1 3 武汉理r 人学硕士学位论文 完毕之后,如果有返回值或者是要继续调用其它类型的方法,帧也要提供相应 的功能。只有当所有的方法都执行完毕之后,帧才能终止自己的任务,被销毁。 一般来说,当程序调用其它的方法的时候,又会产生一个新的帧,这个帧称为 了当前活动的帧,只有当方法调用完毕之后,当前活动的

温馨提示

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

评论

0/150

提交评论