




已阅读5页,还剩76页未读, 继续免费阅读
(信号与信息处理专业论文)基于可执行文件签名补丁比对软件工具的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
、 一 - h 1 1 , 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 基于可执行文件签名补丁比对软件工具的设计与实现 摘要 补丁比对技术对漏洞研究具有重要的意义。它以软件的补丁程序和原程 序为研究对象,通过二者之间的比对,发现补丁所修复的位置,从而确定 软件漏洞存在的位置,为漏洞研究提供重要的分析基础。 ,- 本文在广泛了研究国内外补丁比对算法的基础之上,提出了基于可执行 文件签名的补丁比对方法。算法创新性的提出了可执行文件签名技术,并 通过此技术对比对算法进行自动化的选择,以便在比对过程中适应可执行 文件的特点。同时,在比对算法中采用了“签名自匹配”,以处理函数签 名碰撞的情况。 之后,本文对基于可执行文件签名的补丁比对算法的关键环节进行了设 计。可执行文件签名和可执行文件签名判决子针对可执行文件的特点,对 比对算法进行选择;函数签名的设计是用来提高函数的区分度,“签名自 匹配 方法在比对之前对文件自身的函数签名进行处理,都是为了解决比 对过程中签名碰撞的问题,从而提高工具的整体性能。 最后,在算法及其关键环节的研究基础上,本文设计并实现了 b i n a r y p a t c h m a t c h 的补丁比对软件,对软件的各个模块进行了详细的介绍。 本文对b i n a r y p a t c h m a t c h 软件的性能指标进行了测试,并以微软公司的 m s 0 9 0 5 7 补丁作为应用实例,对b i n a r y p a t c h m a t c h 的应用方法与比对效果 做了介绍。 :一 。 关键词:补丁比对结构化比对可执行文件签名签名自匹配软件漏洞 i l 6 北京邮电大学硕士毕业论文 3 5 3 5 3 5 3 7 3 8 3 9 4 0 4 2 b i n a r y p a t c h m a t c h 的设计与实现。4 3 4 3 4 4 4 4 4 4 4 5 5 2 4 函数信息获取功能的实现4 6 5 2 5 数据存储功能的实现4 7 5 3 比对模块的设计与实现4 8 5 3 1 模块的设计思路4 8 5 3 2 数据读取功能的实现。4 9 5 3 3 函数控制流图与签名功能的实现4 9 5 3 4 函数调用图的生成。5 2 5 3 5 可执行文件签名判决功能的实现5 3 5 2 6 比对功能的实现5 3 5 4b i n a r y p a t c h m a t c h 用户界面模块的设计与实现5 3 5 4 1 输入界面5 4 5 4 2 比对结果显示界面5 4 5 4 3 可执行文件结构化分析界面5 5 5 5 本章小结5 6 第六章b i n a r y p a t e h m a t c h 的性能测试以及在w m d o w s 补丁比对中的应用5 7 6 1b i n a r y p a t c h m a t c h 性能测试5 7 6 1 1b i n a r y p a t c h m a t c h 软件包介绍5 7 6 1 2 测试环境。5 7 6 1 3 测试用例5 8 6 1 4 测试步骤5 8 6 1 5 测试数据与结果。5 8 6 1 6 测试结果分析与比较5 9 6 2b i n a r y p a t c h m a t c h 在w i n d o w s 补丁比对中的应用6 0 6 2 1 用i d a p r o 插件进行基本块划分与签名6 0 6 2 2b i n a r y p a t c h m a t c h 对d b 文件进行比对6 l 6 2 3 对比对结果进行后续分析6 3 6 3 本章小结6 3 第七章结束语6 4 7 1 本文工作总结6 4 7 2 下一步的工作“ v h 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 1 1 背景及意义 1 1 1 软件漏洞对信息安全的影响 第一章绪论 软件漏洞,又被称为软件脆弱性( v u l n e r a b i l i t y ) ,是计算机软件在设计与实现过 程中存在的缺陷与不足。软件漏洞对于计算机系统安全的威胁是十分巨大的。非法用户 通过对软件漏洞的利用,可以实现对计算机的非授权操作。软件漏洞攻击行为不但可以 帮助攻击者获得访问权限的提升,甚至能够执行任意代码。鉴于软件漏洞有如此的特性, 软件漏洞攻击也就成为了黑客发起攻击的起点。一般软件漏洞攻击可以实现木马植入, 僵尸程序传播,后门开启等后续攻击行为。俗语讲,“千里之堤溃于蚁穴 ,软件漏洞 正如信息安全防护大堤上的蚁穴,如果软件漏洞不及时进行修补,那么所有的防护措施 都可能因一个漏洞而形同虚设。 近些年来,软件漏洞越来越受到软件用户的重视,一方面是软件使用者的安全意识 得到了普遍提高;另一方面,软件漏洞的数量以及危害程度在不断提高,软件漏洞所造 成的危害和损失也使软件用户不得不重视软件的漏洞隐患。以美国国土安全部( u s d e p a r t m e n to f h o m e l a n ds e c u r i t y ) 国家网络安全局( n a t i o n a lc y b e rs e c u r i t yd i v i s i o n ) 资 助的c v e 安全组织发布的漏洞数据为例【i 】,漏洞的数量在逐年的增加。1 9 9 9 年以前, 用户和软件生产商对于漏洞的关注度不高,黑客所开发出的病毒以传统的感染方式进行 扩散,因此漏洞数量维持在较低水平。1 9 9 9 至2 0 0 4 年间,漏洞的发布数量由每年1 0 0 0 个的水平增长到每年近3 0 0 0 个。在此期间,全球著名的冲击波、震荡波等病毒在互联 网上肆虐。漏洞数量的增长,一方面是由于互联网应用的广泛普及,另一方面是黑客已 将注意力转移到了软件漏洞方面的研究。冲击波、震荡波正是利用了操作系统漏洞对感 染主机进行破坏,同时利用蠕虫技术将病毒扩散出去,因而造成了如此巨大的影响。2 0 0 5 年之后,漏洞的发布数量达到了一个高峰期。虽然c v e 统计的漏洞数量中包含了跨站 脚本、s q l 注入、x p a t h 注入等w e b 漏洞,但是在数量众多的漏洞当中,软件漏洞占相 当大的比例。瞄j 第1 页 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 图i - 1c v e 年漏洞数量统计 由此可见,软件漏洞是信息安全中的重要一环,其影响力随着软件的广泛应用深入 到计算机应用的每一个层面。随着社会信息化的步伐日益加大,商务、政务、军队都引 入了以计算机、互联网为信息媒介的信息化设备。软件的安全也就自然成为了关系到国 家经济安全、政治安全、军事安全的关键要素。研究软件漏洞的相关技术,对于保障国 家信息安全具有重大意义,对于提升相关人员的安全防护意识具有积极的影响。 1 1 2 对软件漏洞的分析方法 对软件漏洞的分析主要有源码分析和二进制逆向分析两种手段。 源码分析是通过对软件程序的源代码进行分析,找出程序逻辑设计和代码编写过程 中所存在的错误。但是,随着软件的商业化趋势日益深入,越来越多的软件由于知识产 权保护等诸多问题而使得分析人员无从获得软件的源码。这对通过源码分析手段分析漏 洞造成了巨大的阻碍。除了开源软件可以采用源码分析之外,大多数的软件主要采用二 进制逆向的手段进行分析。 二进制逆向分析是在获得软件编译生成的二进制软件样本的情况下,通过加密、解 密、指令逆向技术手段,将二进制的样本文件还原为汇编语言代码的一种分析方法。软 件逆向只是分析过程中的重要一步,对通过逆向得到的汇编代码进行控制流、数据流、 软件行为等进行深入的分析,了解软件程序执行过程中的行为、流程以及对执行环境的 影响。就目前而言,w i n d o w s 平台下的软件绝大多数都是未公开源码的软件,并且 w i n d o w s 操作系统本身就是非开源的商业软件,因此,二进制逆向分析技术是研究软件 漏洞领域中十分重要的一种分析手段。 第2 页 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 二进制逆向分析技术又可以分为动态分析和静态分析两种。动态分析技术借助动态 调试工具( 如o l l y d b g 、w i n d b g 等) 或操作系统提供的程序调试接口,对程序运行时 的汇编指令进行跟踪调试,可以监视程序执行过程中寄存器、内存、堆栈等内容的变化, 从而分析漏洞的成因、溢出原理、溢出点等。静态分析技术通过对指令逆向得到的汇编 代码进行分析处理,生成程序的控制流图和数据流图,以帮助分析程序的逻辑结构、行 为流程。补丁比对技术作为静态分析技术中的一种,以已发布漏洞补丁的软件漏洞为研 究对象,通过基本块划分、函数签名、签名笔对等操作,可以实现对漏洞位置的快速定 位,使后续的漏洞分析工作更有针对性。随着软件安全公告发布机制的完善,补丁比对 越来越成为快速定位漏洞、分析漏洞的一种有效手段。 1 1 3 本课题的意义 本课题的题目为“基于可执行文件签名补丁比对软件工具的设计与实现”,旨在研 究出一套准确、有效、分辨率高的二进制补丁比对工具,以帮助漏洞分析人员通过漏洞 补丁精准定位漏洞位置,及时地对漏洞进行研究。 补丁比对技术虽然只是把已发布漏洞补丁的软件漏洞作为研究对象,但是它在漏洞 研究的各个层次都有较大的应用价值: 漏洞挖掘 漏洞补丁一般只修补软件中出了问题部分的代码,程序中就包含了原有代码和修补 代码两部分。原有代码经过了用户长时间的使用与测试,因此可以视为安全可靠的。对 于修补代码,虽然是用来修补漏洞的,但是它仍有可能引入新的缺陷,从而带来新的漏 洞。这就是基于软件补丁的漏洞挖掘技术【3 】。补丁对比技术帮助确定修补代码的位置, 使得漏洞挖掘变得更有针对性。 漏洞分析 对于已公布补丁的漏洞,通过补丁比对确定修补位置,准确定位旧版本代码中存在 问题位置。再通过借助静态工具分析以及调试工具动态跟踪调试,可以掌握漏洞的原理 以及触发条件。与传统的通过p o e 来分析漏洞的方式相比,补丁比对技术更加快速、准 确。 漏洞利用 补丁比对技术对于漏洞的快速利用也有重要的意义。由于漏洞补丁在用户群中的覆 盖过程需要一定的时间,这使得已公开的漏洞具有了一定的利用价值。一般而言,安全 公告中只指出漏洞的存在和漏洞类型,而不说明漏洞的准确位置和成因,使得漏洞利用 比较困难。而通过补丁比对技术能够准确的定位漏洞,然后分析漏洞,开发出漏洞利用 程序,从而在漏洞补丁发布之后仍可以对未能及时打补丁的部分用户产生作用。 第3 页 在2 0 0 4 年4 月提出了图形化的比对方【5 】,其核心思想是:将可执行文件视为图,以指令 或者常量等作为顶点,以控制流图中的边作为图的边,从图的顶点开始以寻找图的同构 部分为目标进行匹配。图形化的比较方法可以非结构化的变化,包括缓冲区大小的改变 等,且能够直观的显示出来;同时又受编译器优化的影响较大,而且不能自动发现大量 比较的起始点1 6 。 基于控制流级的比对方法不仅需要还原程序指令,还需要抽象出程序的控制流,以 更宏观的角度进行分析。基于控制流的研究方法最先并没有在补丁比对领域应用。早在 1 9 9 7 年r o b e r ts c o h n 等发表的论文中【7 】就使用了基于控制流的函数签名,用于提高基 于w i n d o w s - n t 的可执行程序性能。z h e n gw a n g 等开发的b m a t 工具【8 】【9 】【1 0 】虽然是以 程序优化为研究目标的,但是它已经将新的研究方法应用到了比对方面。b m a t 是一种 二进制匹配工具,它的主要算法如下:首先将匹配过程分为两个阶段,第一阶段在两个 版本的程序之间建立一个一一映射,第二阶段是在配对程序之间匹配基本块。在基本块 的比较过程中,应用了6 4 位哈希运算以计算每个基本块的值,如果两个基本块具有相 同的哈希值时,就可以认为它们相配。如果有两个或更多的模块在一个程序内具有相同 的哈希值,就通过启发式算法以确定哪一个匹配更正确。 第4 页 北京邮电大学硕士毕业论文 基于可执行文件签名补丁比对软件工具的设计与实现 b r e n d ab a k e r 在研究可执行文件区别时,更注重解决补丁的发布效率,以适应一些 小设备通过昂贵的连接进行更新的情况【1 1 1 。研究中构建了原始文件和更新文件的区别内 容d e l t a ,将升级过程分为d e l t a 生成和d e l t a 应用两步骤,其目标就是如何使d e l t a 最小 化。文中的一个关键点就是p r e - m a t c h i n g ,用于找寻可执行文件间的区别。p r e - m a t c h i n g 采用的匹配算法是文本比较中常用的最长共有子序列的算法。c o l i np e r c i v a l 的研究也主 要集中在可执行文件补丁的有效发布方面【1 2 1 。 h a l v a rf l a k e 在2 0 0 4 年2 月,首次明确的提出了结构化比对方法,对补丁比对技术 影响深远【l 引。首先明确一点,源代码与目标代码之间存在着非对称性:当源代码作了很 小的改动,经过编译器的重编译,目标代码发生了巨大的变化,使得针对目标代码的逆 行工程需要从头来做。h a l v a rf l a k e 所提出的方法用于解决该不对称性。假设可执行文 件a 的两个变体a 和a ”,a 与a ”的所有函数之间建立一个一一映射,这种映射不依 赖于特定的编译器指令集,而是对更具一般控制流图的映射,从而忽略了指令重排和寄 存器重分配等编译器优化带来的影响。如果两个函数的功能被严重不同,它们将不能建 立起以一映射,从而发现新版本中函数功能的变化。 2 0 0 5 年,t h o m a sd u l l i e n 提出了基于图的结构化比对方法,其总体思路如下【h 】:图 a 和b 分别代表进行比对的两个可执行文件,并在图a 和b 中建立多个基点( f i x e d p o i n t s ) 基点就是在两个图中相匹配的一个点对这些基点通过迭代方式寻找并建立更 多的基点,直至基点数量不能够再增加。一旦函数匹配数量达到最大,可以以同样的方 式匹配基本块。此时,相当于已经得到了一个同构图,并在函数之间建立了关联,剩下 的只需要匹配控制流图的相应节点了。而一旦到了基本块级别,就可以再次以图的方式 处理基本块( 此时的图变得非常简单了) ,并建立同构图。 2 0 0 8 年的i e e e 会议上,d a v i db r u m l e v 等发表的论文为基于补丁的自动化生成 e x p l o i t 提供了可行的技术手段【1 5 1 ,其技术的基础就是有效的补丁比对技术,快速准确的 定位漏洞,再辅助以数据流分析技术,从而在短时间内构建出可以利用漏洞的e x p l o i t 1 6 。 在理论研究取得进展的同时,一些用于补丁比对的工具也相继问世。2 0 0 5 年1 2 月 i d e f e n s e 发布的i d a c o m p a r e 是一款i d a 插件,用于分析恶意代码的变种和程序补丁【1 7 j 。 z y n a m i c sb i n d i f f 也是基于i d a 的插件,不过它是非开源的,需要付费使用【l 圳。e e y e 发布了e e y eb i n a r yd i f f i n gs u i t e ( e b d s ) ,是款开源软件。它包含了逆向工具b i n a r y d i f f i n gs t a r t e r ( b d s ) 和代码分析工具o a r u n g r i m1 9 1 。d a r u n g r i m 2 的开发正在进行之中, 并用c + + 语言进行了重写,相信很快就能够公布其源代码【2 。b i n a r y d i f f e r 由c 代码编 写,其执行速度比p y t h o n 语言编写的d a r u n g r i m 要更快一些1 2 1 1 。此外,n c n l p c 也于 2 0 0 7 年1 2 月发布了n i p cb i n a r yd i f f e r ( n b d ) 补丁比对工具,大大的扩充了经典算法 中简易签名【2 2 1 。t e n a b l es e c u r i t y2 0 0 8 年推出的p a t c h d i f f 2 主要用于安全补丁分析和恶意 软件研究,基于c g ( c a l lg r a p h ) 同构比较技术,是一款不开源的免费工具1 2 引。 第5 页 5 ) 设计并实现了一套补丁比对系统。根据上述的研究要点,设计并实现了基于可 执行文件签名补丁比对软件( b i n a r y p a t c h m a t c h ) 。本文对软件的工作参数和性能指标 进行了详细的测试与介绍,并通过应用实例介绍b i n a r y p a t c h m a t c h 在w i n d o w s 补丁比 对中的应用方法与效果。 1 4 论文结构安排 本文共分为七章,各章节的主要内容安排如下: 第一章介绍了本课题的背景及研究意义、国外研究技术现状、本课题的研究内容和 本文的结构安排。 第二章介绍了二进制补丁比对技术的核心比对算法,包括字节级、指令级和控制流 级的比对,然后对结构化和图形化比对算法进行了深入的研究,并对两种算法进行了对 比。 第三章对一般补丁比对工具的关键技术进行了讨论。首先介绍了为比对分析提供基 础的机器指令逆向技术,然后对控制流图和函数调用图的生成技术进行了介绍。 第6 页 北京邮电大学硕士毕业论文 2 1 2 指令级比对 指令级别的比对方法把汇编指令作为分析的对象,研究指令之间的相似性和差异 性。 指令级别较字节级别的比对方法而言,它的优势在于引入汇编指令作为比对对象, 可以通过汇编语言的语义分析程序的逻辑和行为,提高比对的准确度。 采用指令级别的比对,由于引入了语义分析,因此需要定义下面内容来对指令间的 比较关系进行描述: 2 4 】 相似 即两条指令的语义完全相同。如若判定两条指令相似,需要至少满足以下三个条件 中的一条: 1 ) 两条指令的二进制字节完全相同。 2 ) 指令的o p c o d e ( 操作码) 相同或者两条指令同为j m p ( 无条件跳转) 或j c c ( j u m p c o n d i t i o nc o d e ,即条件跳转指令) 指令,j c c 指令较多,包括: 状态跳转指令: j z ( j e ) ,j n z ( 盯忸) ,j c ,j n c ,j o ,i n o ,j s ,j n ,s j p ,j n p 用于无符号比较的跳转指令: j a ,j n b e ,j a e ,j n b ,j b ,j n a e ,j b e ,j n a 用于有符号比较的跳转指令: j g ,j n l e ,j g e ,j n l ,几,g e ,j l e ,j n g 3 ) 同时满足下列所有条件: a ) o p c o d e 完全相同。 b ) 两条指令的m o d r m ,s i b ,i m m ,d i s p 的对应域值相等,或者它们的地址位于同 一个p e 模块的地址空间内。 c ) 两条指令的操作数属于以下集合: e b ,e w ,e v ,m p ,m s ,m q ,m t ,p q ,r d ,q d ,e d ,q q ,p d ,m a ,m ,l w , l v ,o v ,o b 上述条件中涉及到了i n t c l 汇编指令结构的相关内容,将在后面的3 1 章节中作详细 的介绍。 相近 即两条指令具有相同的o p c o d e 和操作数列表。相似两条指令的在语义上不完全相 同,但已经非常接近完全同构。 可忽略 第9 页 毕业论文基于可执行文件签名补丁比对软件工具的设计与实现) 指令为n o p 指令,或者是只有唯一后继节点的j m p 指令,那么该指令则 “可忽略 。 中的一条指令被标记为“可忽略。 中,“相似”、“可忽略”、“不同 的定义明确,很容易确定指令间这 果。如何确定“相近 ,就成为了指令级比对方法需要重点解决的问题。 比较通常结合图形化的比较方法,所以指令“相似的判定一般采用图的 判定。能够被识别为同构部分的指令可以认为是相似的,不能够同构的指 本代码区别的地方。 关于图形化的比较方法会在后续章节进行详细介绍。 2 1 3 控制流级 控制流级的比对方法通过对程序控制流的抽象,以宏观的视角对程序行为和逻辑的 差异进行分析比较。 控制流级的比较方法将程序按照各个控制结构( 如顺序结构、循环结构、条件选择 结构等) 对程序进行了模块划分,然后比较对应模块之间结构的差异性。由于控制流级 的比较的基础与指令级的比较一样,需要对二进制的程序文件进行逆向。然后基于对汇 编语言的控制流抽象,得到用于描述程序行为的函数调用图、控制流图。在程序结构化 过程中还用到了函数签名。 控制流级比对方法中的基本定义如下:【2 5 】 函数调用图 可执行文件由一系列函数和数据组成,函数之间的调用构成了可执行文件的行为主 体。可执行文件中的函数用集合f = f l 表示,其中f i 厶分别对应源码中定义的函数。 函数调用图是以函数集合f 中的元素作为节点的有向图,图中点到f j 的边描述毛包含 一个f j 的子调用。每个函数f i 可以用一个控制流图表示,包含基本块以及块之间的连接 关系。 控制流图( c o n t r o lf l o wg r a p h ) 函数由基本块组成。基本块是一组最长的顺序执行指令序列,它只能由第一条指令 进入,并从最后一条指令离开。 控制流图是以函数入口和出口分别作为e n t r y 和e x i t 节点,以基本块作为节点,以 基本块之间的控制流关系作为边的有向图。e n t r y 节点连接函数初始基本块,e x i t 节点连 接每一个结束基本块( 即没有后继的基本块) 。 函数签名 第l o 页 北京邮电大学硕士毕业论文 b l ,b i ) a i 和b j = p ( a i ) 被视为两个版本中未发生变化的函数。其他未建立映射关系的函数则 是发生了变化的函数。 第1 2 页 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 2 3 1 基于结构化签名比对算法 从广义上讲,a 和b 两个集合的势是不同的,严格意义上的映射是不存在的。因此 通过一种近似映射迭代的方法,来求得映射p 。 首先建立初始化映射p l = a 1 b l ,其中a l 所代表的集合 a l ,。a p ) 是a 调用图的节点 集合的子集,b l 所代表的集合 b l ,b q ) 是b 调用图的节点集合的子集,p l 则表示a l 到 b l 之间的映射。之后,采用循环迭代的方式生成像,p 2 ,p h ,分别为从a 2 ca 3 c c a b 到b 2 cb 3 c c b h 的映射。 详细算法如下:瞄】 1 ) 产生初始映射p l :通过对函数的签名,在集合a 、b 当中寻找相同的函数a i 和 b j ,当他们同时满足下列条件时认为是相同的: a ) a i 和b i 的签名相同; b ) b 中除了b i ,没有别的函数与a i 的签名相同; c ) a 中除了a i ,没有别的函数与b i 的签名相同; 2 ) 在得到初始映射p l 之后,利用函数调用图的函数调用关系进行对p l 的扩充。由 p i 1 计算p i 的过程如下:对于p i - l 中的所有节点a i 和p i 1 ( a i ) ,通过函数调用图得到他 们的调用子函数集合( 不包含已经在p i - l 中的节点) ,分别记作a i 和磁,以构造p l 的 方式在a i 和b i 之间构造映射p i :a i - b i 。映射p i 1 和p i 一起构成了新的映射p i ,对于 其中的a jca i i ,令p i ( 码) = p i i ( 码) ;如果a j 旺a i i ,令p i ( 码) = p i ( 码) 。 3 ) 如果p i 不能够再增加,那么算法结束;否则,转2 ) 算法继续。 2 3 2 基于可信基点的结构化签名比对算法 基于可信基点的结构化签名比对算法是对结构化签名比对算法的一种优化。文献【2 7 】 中对可信基点的产生和传播算法都做了优化。 在初始化方面,简单定义映射p 。( x ) s ( x ,b ) 。s ( x ,b ) 表示的是选择子 运算,即从b 中选择一个与x 最相似的节点。当n = l 的时候即为初始化映射。初始化的 算法如下: 硒r e a c h i d f d o a n = 万( a ,f i ,f j ) ;b m 2 万( b ,r i ,r j ) f o r x a n d o p kx ) - s ( x ,b m ) e n d e n d 第1 3 页 接 算 通过前面两个小节对图形化与结构比对技术的介绍与分析,可以总结出它们各自的 优缺点。 图形化比较技术可以有效地识别非结构化的改变,包括分配的缓冲区的大小变化等, 并通过图形进行直观表示。而其缺点主要在于,图形化技术受编译器优化带来的影响很 大。编译器优化后的可执行文件指令可能会重新排列,使得相同源码产生“不同”的二 进制代码块,从而引起误报。同时,图形化比较技术不易自动发现比较开始点。更关键 的是,图形化比较算法的难点在于如何确定哪两个函数是相匹配的。相似图形的判定是 一个n p 不完全问题,会存在较高的误报率。 结构化比较技术分编译器优化的影响较小,可以有效的忽略指令重排、寄存器重分 配等影响。但是它不能发现非结构的变化,如缓冲区大小的调整等。并且在比对过程中, 可能存在签名碰撞问题,即在同一个可执行文件中有多个函数的结构化签名相同,可能 导致部分函数无法匹配。对于某些代码耦合度较低、结构化特征不是很明显的动态链接 第1 4 页 北京邮电大学硕士毕业论文 第三章一般补丁比对工具的关键技术 本章主要对一般的补丁比对工具的关键技术进行了研究,主要包括机器指令逆向技 术、控制流图生成技术与函数调用图生成技术。机器指令逆向技术是一般补丁比对工具 的分析基础,控制流图与函数调用图生成技术是在用户界面显示时,能够为用户提供直 观的分析结果,以供用户对补丁于原程序之间进行分析比对。 3 1 机器指令逆向技术 机器指令逆向技术是指将可执行文件中的二进制机器指令,通过逆向还原为汇编语 言代码的技术,又可以被称作反汇编技术。 在结构化的分析方法当中,对二进制指令进行逆向是必不可少的步骤之一。因此, 机器指令逆向技术就成为了结构化补丁比对工具的关键部分之一。由于机器指令集与计 算机的硬件架构设计密切相关,例如i n t e l 的x 8 6 指令集,i n t d 的6 4 位指令集,s u n 的 s p a r c 架构的指令集等。本文重点研究了广泛应用的i n t e l 的x 8 6 指令集,以此作为机器 指令逆向的基础。在对可执行文件进行指令逆向之前,首先要对p e 文件进行解析,确 定程序起始指令的位置。 机器指令逆向主要有两种技术路线:一种是基于p e 文件结构知识和i n t e l 汇编技术 手册,开发一套反汇编工具;另一种是在现有的第三方的反汇编软件基础上,以插件的 形式对反汇编结果进行处理。3 1 1 和3 1 2 节中将对第一种技术路线的技术进行介绍, 3 1 3 则对主要的几款具有反汇编功能的工具进行介绍。 对于这两种技术路线在实现中的选择,本文将在后面的4 2 节中结合基本块划分技 术一起讨论。 3 1 1w i n d o w s 平台p e 文件格式 w i n d o w s 平台的可执行文件又被称作p e ( p o r t a b l ee x e c u t a b l e ) 文件。p e 格式实 质是一种数据结构,它对w i n d o w s 操作系统p e 加载器执行可执行代码的必要信息进行 了封装,包括连接时所需的动态连接库,a p i 导入表和导出表,资源数据和线程局部存 储( t h r e a d 1 0 c a ls t o r a g e ,t l s ) 数据等。在w i n d o w sn t 平台上,p e 格式文件主要包 括e x e ,d l l ,o c x ,s y s 等类型的文件。当前的p e 文件支持队3 2 ,队6 4 和x 8 6 6 4 ( a m d 6 4 i n t e l 6 4 ) 指令集架构【z 引。 第1 6 页 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 p e 文件主要继承了u n i x 平台的c o f f ( c o m m o no b j c c tf i l ef o r m a t ) 规范,并保留 了m s d o s 中m z 头部以保证与旧版m s d o s 和w i n d o w s 操作系统的兼容【2 9 1 。p e 文 件由一系列的头和段组成,这些信息告诉动态连接器如何将p e 文件映射到内存中去。 p e 文件的结构如下图所示: i z sh e a d e r d o ss t u b p eh e a d 盯 s e c t i o nt a b l e s e c t i o n1 s e c t i o n2 s e c t i o n3 s e c t i o nn 图3 1p e 文件格式 m s d o s 头部是为了与旧版m s d o s 和w i n d o w s 操作系统的兼容而保留的,其结 构定义如下: t y p e d e fs t r u c t i m a g e d o s h e a d e r u s h o r te _ m a g i c ; m a g i cn u m b e r ,d o s 头标记 u s h o r tec b l p ; 文件最后页的字节数 u s h o r tec p ; 文件页数 u s h o r tec r l c ; 重定义元素个数 u s h o r tec p a r h d r ; 头部大小,以段落为单位 u s h o r tem i n a l l o c ; 所需的最小附加段 u s h o r tem a x a l l o c ; 所需的最大附加段 u s h o r tes s ; 初始的s s 值( 相对偏移量) u s h o r tes p ; 初始的s p 值 u s h o r tec s u m ;校验和 u s h o r te i p ; 初始的i p 值 u s h o r tec s ; 初始的c s 值( 相对偏移量) u s h o r tel f a r l c ; 重分配表文件地址 u s h o r teo v n o ; 覆盖号 u s h o r ter e s 4 】; 保留字 u s h o r teo e m i d ; o e m 标识符( 相对eo e m i n f o ) u s h o r teo e m i n f o : o e m 信息 u s h o r ter e s 2 【1 0 】; 保留字 l o n gel f a n e w ; 新e x e 的头部地址,指向p e 头部 i m a g e d o s h e a d e r ,p i m a g e d o s h e a d e r ; 上述结构中,em a g i c 用于标识m s d o s 兼容的文件类型,一般都将这个值设为 0 x 5 a 4 d ,表示a s c i i 字符“m z ,所以m s d o s 头部又被称为m z 头部。此外,最 第1 7 页 北京邮电大学硕士毕业论文基于可执行文件签名补丁比对软件工具的设计与实现 重要的部分就是ei f a n e w 指针,它指向了p e 头部,通过它可以找到p e 头部,进而进 行解析。图3 2 显示了el f a n e w 指针与p e 头的指向关系。 一_ , 0 0 0 0 0 0 0 0 h :| l d5 a9 00 0 0 3 0 0 0 0 0 0 0 4 0 00 00 0 f f f f 0 00 0 ;西z ? 一 i ,: 0 0 0 0 0 0 1 0 h :b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 00 0 ;? e , 0 0 0 0 0 0 2 0 h :0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 ;一,! 0 0 0 0 0 0 3 0 h :0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 匪匦叵画;, 0 0 0 0 0 0 4 0 h :o e1 fb o e0 0 b 4 0 9 c d 2 1 b 8 0 1 4 c c d 2 l 5 46 8 ;。,? 7 l 7 r hi 0 0 0 0 0 0 5 0 h :6 97 32 0 7 0 7 26 f 6 7 7 2 6 l6 d2 06 3 6 16 e 6 e6 f ;i sp r o g r a mc a n n o 0 0 0 0 0 0 6 0 h :7 42 06 2 6 52 0 7 2 7 5 6 e 2 0 6 9 6 e2 0 哇哇4 f5 32 0 ;cb ee u ni nd o s 0 0 0 0 0 0 7 0 h :6 d6 f6 46 52 e o d o do a2 哇0 00 0 0 0 0 0 0 0 0 00 0 ;m o d e 0 0 0 0 0 0 8 0 h :3 s8 e c b 8 07 1 芝f 5i ) 37 1 e f a 5 d 3 7 1 e r a 5d 3 ;s 慎号q 铳解铣j 毫窜镜, 0 0 0 0 0 0 9 0 h :f 2f 3 a b d 37 fe f 鱼5d 39 9 f o a fd 33 ce f 且5d 3 ;蝮钪乾呜? 锍, 0 0 0 0 0 0 a o h :7 1e fa 辱d 34 5 e f a 5 d 31 3f o b 6 d 37 2e f a 5d 3 ;q 铯览铳? 鸲航镜? 。 0 0 0 0 0 0 b o h :9 9f o a e d 36 3e f a 5 d 3 5 26 9 6 36 8 7 le f 且sd 3 ;橇 c 钪豌i c h q 钪7 0 0 0 0 0 0 c o h :0 00 0 0 00 00 00 00 00 0 翳黼0 。0 04 c 0 1 0 50 0 ;函l ? 0 0 0 0 0 0 d o h :1 dd 9b 辱母 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 e o 0 0 o e0 1 ;侏j ,。 一 图3 - 2el f a n e w 指针指向了p e 头 d o ss t u b 实际上是个m s d o s 程序,在不支持p e 文件格式的操作系统中,它将输 出一个错误提示信息,如”1 l l i si sp r o g r a mc a n n o tb er u ni nd o sm o d e ”p 。 o 0 0 0 0 0 0 0 h : 0 0 0 0 0 0 i o h : 0 0 0 0 0 0 2 0 h : 0 0 0 0 0 0 3 0 h : 0 0 0 0 0 0 4 0 h : 0 0 0 0 0 0 5 0 h : 0 0 0 0 0 0 6 0 h : 0 0 0 0 0 0 7 0 h : 0 0 0 0 0 0 8 0 h : 0 0 0 0 0 0 9 0 h : 哇d5 a 9 0 0 0 0 3 0 0 0 0 0 0 0 4 o o 0 0 0 0 f f f f o o o o b 8 0 0 0 0 0 0 0 0 0 0 0 00 0 耳00 0 o o 0 0 0 0 0 0 0 0 0 0 o o o o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 o o 0 0 0 0 o o 0 0 o o 0 0 0 0 0 0 0 0 0 0 0 0 c 8 0 0 0 0 0 0 0 el fb ao e 0 0 b 4 0 9 c d 2 1 b 8 0 1 q c c d z l5 46 8 6 9 7 3 2 0 7 0 7 2 6 f6 7 7 2 6 l 6 d2 06 36 i 6 e6 e 6 f 7 q 2 06 26 5 2 07 z7 5 6 e 2 06 9 6 e2 0 耳乓q f5 32 0 鲤一垒里曼曼墨圣曼璺旦旦里璺墨墨曼 3 s 8 ec b 8 07 1e fa 5 d 3 7 l f 2f 3 鱼bd 3 7 fe f a 5d 3 9 9 爱z 7 ; ? e ,7 7 l t h 圭曼旦兰呈里兰! 墅曼曼坠! 蝗 乞b er u ni nd o s 0 0 0 0 0 0 0 0 0 0 0 00 0 ;m o d e e f a 5 d 3 7 1 e f a 5d 3 ;s 愤弓q 铳斛铳解铳? r oa fd 3 3 ce r 5i ) 3 ;蝮、钪乾鸣,铳, 图3 3m s d o s 头部与d o ss t u b 在p e 文件中的位置 在d o ss t u b 之后便是p eh e a d e r 了。p e 头中首先是一个i m a g en th e a d e r s 3 2 结构,它由p e 标识、文件头和可选头组成。i m a g en th e a d e r s 3 2 结构的定义如下: t y p e d e fs t r u c t i m a g e n t h e a d e r s d w o r ds i g n a t u r e ;p e 文件标识”p e ” i m a g ef i l eh e a d e rf i l e h e a d e r ;映像文件头 i m a g eo p t i o n a lh e a d e r 3 2f i l e h e a d e r ; 映像可选头 ) i m a g e n t h e a d e r s 3 2 ,幸p i m a g e n t h e a d e r s 3 2 ; f i l e h e a d e r 和f i l e h e a d e r 又是两个结构。 i m a g ef i l eh e a d e r 结构的定义如下: t y p e d e fs t r u c t i m a g e f i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 糖尿病酮症酸中毒护理诊断与措施
- 陈与义《临江仙夜登小阁忆洛中旧游》古诗词鉴赏试题及答案解析
- 2026届中卫市重点中学英语九上期末监测模拟试题含解析
- 2026届北京市部分区化学九年级第一学期期末学业质量监测模拟试题含解析
- 2026届安徽省六安市天堂寨初级中学化学九上期末联考模拟试题含解析
- 现场检修知识培训
- 广东省广州天河区七校联考2026届九年级化学第一学期期中教学质量检测模拟试题含解析
- 作业标准书培训
- 金融贷款公司培训
- 江苏省庙头中学2026届九年级英语第一学期期末联考试题含解析
- 2024人教PEP版三年级英语上册全册教案
- 中国慢性胃炎诊治指南(2022年)解读
- 立体车库应急预案范文
- 体彩专管员专业知识培训课件
- 严重腹部创伤院内救治专家共识(2024)解读
- 房内走廊改造方案(3篇)
- 瓶颈材料管理办法
- 股浅动脉栓塞个案护理
- 新业态新领域安全生产监管
- 河北省医疗卫生机构医疗废物管理规范2023版
- 高中教学常规培训
评论
0/150
提交评论