多态蠕虫产生器毕业设计论文(编辑修改稿)内容摘要:

大小,同时完成更强大的功能,会直接执行系统平台提供的各种可执行文件。 6. 信息数据包括已破解的口令、要攻击的地址列表、网络蠕虫自身的压缩包等等。 基本功能模块蠕虫的基本功能模块共包括以下5部分:1) 搜索模块:寻找下一台要传染的机器。 为提高搜索效率,可以采用一系列的搜索算法。 2) 攻击模块:在被感染的机器上建立传输通道(传染途径)。 为减少第一次传染数据传输量,可以采用引导式结构。 3) 传输模块:主要是用于计算机间的蠕虫体复制。 4) 信息搜集模块:搜集和建立被传染机器上的信息。 5) 繁殖模块:建立自身的多个副本。 在同一台机器上提高传染效率,避免重复传染[3]。 扩展功能模块蠕虫的扩展功能模块由以下4部分组成:1) 隐藏模块:隐藏蠕虫,逃避简单的检测。 2) 破坏模块:摧毁或破坏被感染的计算机,或在被感染的计算机上留下后门程序等等。 3) 通信模块:蠕虫间、蠕虫同黑客之间进行交流,可能是未来蠕虫发展的侧重点。 4) 控制模块:调整蠕虫行为,更新其它功能模块,控制被感染计算机,可能是未来蠕虫发展的侧重点[3]。 蠕虫程序功能模型基本功能模块扩展功能模块攻击模块传输模块信息搜集模块繁殖模块通信模块隐藏模块破坏模块控制模块搜索模块 蠕虫的结构模型,蠕虫模块分为基本模块和扩展模块,基本模块中包含搜索模块、攻击模块、传输模块、信息搜集模块、繁殖模块;扩展模块中包含隐藏模块、破坏模块、通信模块和控制模块。 蠕虫的工作流程蠕虫程序的工作流程可以分为漏洞扫描、攻击、传染、现场处理四个阶段。 蠕虫程序扫描到有漏洞的计算机系统后,将蠕虫主体迁移到目标主机,然后蠕虫程序进入被感染的系统,对目标主机进行现场处理。 现场处理部分的工作包括:隐藏、信息搜集等。 同时蠕虫程序生成多个副本,重复上述流程,直到运行条件不满足[2]。 是否否否是是扫描攻击现场处理复制成功发现目标开始是否满足运行条件结束 蠕虫的工作流程检测特征代码的方法被广泛地应用在病毒或蠕虫检测工具中。 特征代码法是检测已知病毒或蠕虫的最简单、开销最小的方法。 特征代码法的工作原理如下:采集已知病毒或蠕虫样本,在病毒或蠕虫样本中,抽取特征代码。 抽取时依据如下原则,抽取的代码比较特殊,不大可能与普通正常程序代码吻合。 抽取的代码要有适当长度,一方面维持特征代码的唯一性,另一方面又不要有太大的空间与时间开销。 如果病毒或蠕虫的特征代码增长1字节,要检测3000种病毒或蠕虫,增加的空间就是3000字节[8]。 所以要在保持唯一性的前提下,尽量使特征代码长度缩短,以减少空间与时间开销,并将特征代码纳入病毒或蠕虫数据库。 检测病毒或蠕虫时,打开被检测文件,在文件中检查是否含有病毒或蠕虫数据库中的特征代码。 由于特征代码与病毒或蠕虫一一对应,因此如果在搜索中发现了符合病毒或蠕虫特征代码的内容,便可以断定被查文件中包含有该种病毒或蠕虫[7]。 要使蠕虫躲过这种检测方法,就要对蠕虫体进行多态变形,使同一种蠕虫的不同实例具有相异的形态,令特征码检测技术失效。 至于如何进行蠕虫的多态,正是本课题要研究的内容。 多态变形技术的概念多态变形技术的发展和形成,最早在计算机病毒中得到体现。 一般把使用通常的特征码检测法无法检测(或者极难检测)的病毒(蠕虫)称为多态病毒(蠕虫)[8]。 为了使蠕虫代码躲避检测程序的检测,需要不断对自身的执行代码进行变换,尽量隐藏检测程序依据的蠕虫特征代码,从而使检测程序无法正确侦测和清除该病毒。 针对这种多态变形技术,只有对其自动变形机理进行深入的分析,才能找到有效的检测方法。 因此,本文对计算机蠕虫的多态变形机理进行了深入的系统分析,并对相关实例进行了讨论。 什么是多态变形技术1. 什么是多态多态[9]就是使蠕虫能够改变自身的存储形式的技术,使传统的依靠特征值检测的技术失效。 2. 什么是变形变形[9]则在多态的基础上更进一步。 对整个蠕虫体都进行处理,使同一种蠕虫的不同实例的代码完全不同,不但没有固定的特征码,而且也无需还原成没有任何变化的蠕虫体。 如果说对付多态还可以通过虚拟机等技术[7],待蠕虫体被还原之后检测特征值,那么完全的变形则使得这种技术完全失效[10]。 常见的多态变形技术1. 多态变形病毒多态变形病毒日益增多,这种现象可以看作是病毒作者为了反击高级病毒扫描器而做出的反应。 因为设计合理的扫描器可以病毒的特征码发现病毒,因此,挫败扫描器的方法就是设计可以改变自身代码的病毒,从而使搜索字符串的识别技术失去效果。 多态变形病毒面对扫描器时,主要是通过代码变换及加密来隐藏自己。 常见的策略是用变化的key加密病毒体的主要部分,而保持解密执行程序不变。 为了防止搜索字符串的方法检测到,解密代码在每一次的感染过程中都会改变。 然而,设计多态变形病毒要求病毒作者有很扎实的基本功,以及很多技巧。 因此,这在段相对较长的时间里,导致世面上较少出现真正的多态变形病毒。 当然,世界不会一成不变。 因此,在某个阶段,从事病毒贸易的大哥级人物注意到这种现象,决定通过编写并分布多态变形生成器的方式,向那些缺乏技能的小弟们伸出援手。 2.多态变形生成器从根本上说,多态变形生成器是一些例程,可以与已存在的病毒链接。 但生成器本身并不是病毒;它们的目的是使用多态变形的技术来隐藏真正的病毒。 第一个通用的多态变形生成是MutationEngine,也被称为MtE。 在1991年出现,大概有十亿多种不同的排列,可以与任何病毒链接,它的出现宣告了即时多态变形的时代到来了。 时至今日,大约有33种已知的病毒使用了MtE。 其它的多态变形生成在MtE出现后接踵而至。 1992年的晚些时候就出现了两个,其中一个就是TridenTPolymorphicEngine(TPE)。 TPE出生在荷兰。 从根本上说,它处理的排列数比MtE要少一些,但是它为反病毒产品准备了另外的难题,因为它生成的译码器比MtE生成的更普通,更没有代表性(也就更难被检测到)。 另一个是NuKE Encryption Device(NED)。 NuKE的生成器不是很高级,但它的独到之处是它不像大部分其它的多态变形生成器那样发布目标模块,而是发布易读的源码。 其它比较知名的多态变形生成器还有:MultipleEncryptor(DAME)DarwinianGeneticMutationEngine(DGME)DarkSlayerMutationEngine(DSME)MutaGenGuns39。 n39。 RosesPolymorphicEngine(GPE)DarkSlayerConfusionEngine(DSCE)。 这些生成器都是通过地址网络,病毒交换BBS与因特网上的专用区域交换的。 3.操作原理 多态变形生成器的常见形式是一引动代码模块,程序可以把它插入程序。 在这之后,程序就可以调用代码模块中包含的函数了。 这个过程被称为链接。 生成器一旦链接到病毒,将变成病毒的一部分。 自那以后,病毒四处传播时,都会带着生成器。 应该注意,生成器本身并不在意它与哪种程序链接。 虽然说已知的多态变形生成器明显是为病毒而写的,但从根本上说,它们也可以用于其它种类的程序。 当使用多态变形生成器的病毒感染程序文件时(或其它的对象),会要求生成器生成病毒体的加密拷贝和生成器本身。 除此之外,生成器还将生成译码器――一个例程,把已加密的代码还原成真正的病毒代码。 生成器使用的加密技术相对比较简单。 不过,它们在每次执行时都会改变加密key。 这样一来将使检测这样的病毒变得非常困难,但加密的病毒也有一个命门:解密例程,如果想要它可执行,就不能加密它。 因此,多态变形生成器的真正作用是通过它变换解密例程的能力来衡量的。 所有的多态变形生成器为了每次都能创建不同的算法,需要一些随机化例程。 有些生成器允许病毒作者用自己喜欢的随机化例程替换原来的。 多态变形生成可能创建完全不同的加密方法以及与之对应的各不相同的解密例程。 它们一般是通过以下的方式修改解密例程:移动例程周围的指令,在随机的地方增加无用的指令,使用不同的处理器寄存器和操作码。 这样做的主要目的是使解密例程对应的二进制代码在不同的感染体内完全不一样。 这样将使那些用固定搜索字符串来搜索解密例程的方法失效――因为多态变形病毒生成的感染体并不存在相同的搜索目标(字符串)。 使用多态变形生成器的病毒怎样感染文件: 1.在感染之前的干净文件。 我们把它称为受害文件。 2.病毒通过修改受害文件的第一条指令开始它的感染过程。 它用jump文件尾部的指令替换它们。 被替换的字节保存在病毒体内。 3.接下来,病毒调用多态变形生成器,生成病毒代码的加密拷贝和生成器本身。 生成器也将生成解密例程,并把它添加到受害文件的尾部。 4.把加密的代码添加到受害文件的尾部。 这个加密的部分包含三小部分:病毒体的真正拷贝;被替换的受害文件的第一条指令;多态变形生成器的代码。 多态变形病毒实例分析——随着计算机技术的发展,蠕虫和病毒的界限越来越模糊,它们之间的许多技术都是共用的,并且多态变形病毒的发展时间相对较长,变形病毒的实例也比较典型,所以在这里采用了一个典型的变形病毒的实例来分析蠕虫的多态变形技术是合适的,因为他们用到的多态变形技术是相同的。 ,它是由RohitabBatra在1999年设计的,虽然Windows998的时代已经过去,但它的设计思想代表一个时代的病毒设计,其核心思想仍然被广泛采用。 要想有效地识别出多态变形蠕虫(病毒),就必须了解多态变形蠕虫(病毒)的工作原理。 ——EncryptVirus、MutateDecryptor和RadomRegister以及程序入口段——解密器Decryptor来完成[13]。 下面是对每一部分的功能及工作原理的详细分析。 1. 解密函数——Decryptor把程序入口写成机器码而非汇编语言,这纯粹是为了编程的方便,就是对这段程序中的寄存器进行操作,为了编程方便所以采用了机器码的表示方法。 同时必须指出的一点是两段代码的唯一区别在于DB 00字节,在翻译成汇编语言以后,它将和DB80、DB36一起组成xor byte ptr[esi], 00h,但要明确的是尽管它们是一条汇编指令,可标号EncryptionKey仍然起作用,也就是说无论在何种情况下EncryptionKey都标志着DB 00这个字节,而这个字节正是密钥所在,密钥的设置在EncryptVirus函数中完成,00只是一个初始值。 病毒程序入口处的机器码翻译成汇编语言后的结果。 esi中的内容就是被加密程序的入口,ecx中的内容是被加密的程序代码的长度。 Encrypted_SIZE的值是$offset EncryptedVirusCode,操作符“$”所表示的是当前程序计数器的值,所以Encrypted_SIZE才是加密代码的长度。 程序按照Encrypted_SIZE的值对程序进行解密,直到ecx的值为0,然后进入主程序。 在主程序中会对程序代码进行再次加密并置密钥,而病毒重新执行时则用上次生成的新密钥进行解密,以使系统能够识别代码的内容。 解密器程序StartOfVirusCode:Call GetDeltaGetDeltaDB 5EhDB 83hDB 0C6hDB offset EncryptedVirusCode–offset GetDeltaDD ENCRYPTED_SIZEDecryptByte:DB 80hDB 36hEncryptionKey:DB 00hDB 46hDB 49hjnz DecryptByteEncryptedVirusCodejmp WinMainStartOfVirusCode:call GetDeltaGetDelta:pop esiadd esi, EncryptedVirusCodeGetDeltamov ecx, Encrypted_SIZEDecryptByte:xor btye ptr[esi], 00hEncryptionKey:inc esidec ecxjnz DecryptByteEncryptedVirusCodejmp WinMain是获得加密入口和被加密的代码长度解密是否解密结束否开始结束 解密函数流程图2. 加密函数——EncryptVirus。 加密器程序EncryptVirus PROCpush ediin al,40hIF DEBUGxor al alENDIFmov ecx,ENCRYPTED_SIZEadd edi,LOADER_SIZEEncryptByte:xor byte ptr[edi],alinc ediloop EncryptByte:pop edimov byte ptr[edi+EncryptionKeyStartOfVirusCode],alcall MutateDecryptorretEncryptVirusEND。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。