《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析

上传人:E**** 文档编号:89444792 上传时间:2019-05-25 格式:PPT 页数:56 大小:688.51KB
返回 下载 相关 举报
《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析_第1页
第1页 / 共56页
《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析_第2页
第2页 / 共56页
《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析_第3页
第3页 / 共56页
《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析_第4页
第4页 / 共56页
《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析》由会员分享,可在线阅读,更多相关《《计算机病毒原理及防范技术》-王路群-电子教案 第5章 windows病毒解析(56页珍藏版)》请在金锄头文库上搜索。

1、计算机病毒原理及防范技术,中国水利水电出版社,第5章 Windows病毒解析,5.4 网页病毒,5.3 宏病毒,5.2 脚本病毒,5.1 Win 32 PE 病毒原理,教学要求:,理解:Windows环境下病毒的分类和特点,一般的几种病毒编写方法。 掌握:WIN 32PE病毒,VBS脚本病毒,宏病毒,网页病毒原理及防范。,5.1 Win 32 PE 病毒原理,DOS时代,程序员为了获得程序的高性能或直接控制硬件而用汇编语言编写程序。在Windows时代,C语言程序员都体验过直接使用C语言来编写Windows程序的艰难。于是,很多人就会马上想起汇编语言的好处,试着用汇编语言来编写Windows程

2、序。但Windows操作系统本身的自我保护机制,让程序员直接控制硬件没有以前那么容易了,这使得喜欢用汇编语言的人又有一定的减少。但实际上,在Windows环境下使用汇编语言不会比C语言难,有时反而更加简单。在Windows操作系统中,可执行文件比DOS操作系统下有了极大的改进,现在全部使用的都是基于Microsoft设计的一种新的文件格式:Portable Executable File Format。 Win32 PE病毒数量巨大,破坏性强,同时伴随着新的、高超的编程技巧,是每个信息安全人员必须掌握的一种病毒。,5.1 Win 32 PE 病毒原理(续),重定位问题 重定位是病毒能顺利运行的

3、最基本条件。似乎没有人在编写普通程序时会考虑程序中代码在以后运行时在内存中的具体地址。那是因为有编译程序做这些事情。病毒的情况比较特殊,它不是独立存在的,而是需要寄生在一个宿主中。但病毒也是程序,又有程序的共同性,同样也要引用一些数据来帮助运行。但病毒植入宿主的位置内存是宿主或病毒在编译时无法预知的:病毒要感染千千万万不同的具体宿主;每个宿主又可以被千千万万个不同的病毒感染,再加上各台计算机特殊的运行环境,使得病毒在感染宿主时在宿主中的准确位置千差万别,由于编译后的宿主变量会直接引用变量名(运行时则是偏移地址)来访问,所以如果横加插入则在引用数据时肯定会发生错误。,5.1 Win 32 PE

4、病毒原理(续),如图,插入病毒之后变量R的位置发生了变化,必须加上由于病毒代码而产生的增量r。所以重定位技术不解决,PE文件的感染就无法实现。,5.1 Win 32 PE 病毒原理(续),一般来说,重定位的方法有以下两种。 1使用Call指令等特殊指令在运行时动态获取指令地址 Call指令是汇编跳转指令,用于调用子程序。这个指令的特点是先将返回地址压栈(即将Call后的第一条指令地址压栈,这就是保护现场),再将EIP置为需要调用的地址。如果子程序中有ret指令就会弹栈,且弹出目标就是EIP。这样,程序就会正常运行下去。如果有一个变量地址和编译时预定义地址之间有一个偏差,一般将这个差称为delt

5、a offset,则运行时只需要将该差值加到原编译时预定的地址上,得到的就是运行时数据的正确地址。这样一来,可以通过将delta offset 放在某个寄存器中,然后变址寻址引用变量就可以解决引用数据重定位的难题。,5.1 Win 32 PE 病毒原理(续),2利用PE文件的重定位表项实现 这种方法就是在感染目标PE文件时,将引用自身指令所需要被重定位的地址全部写入目标PE文件的重定位表中,如宿主无重定位表项(如用MS linker 的/fixed)则创建后再写入。重定位的工作就完全由系统加载器在加载PE文件时自动进行了。重定位表项由PE 文件头的DataDirectory数据中的第6 个成员

6、IMAGE_DIRECTORY_ENTRY_BASERELOC 指向。该方法比较复杂,尤其是如果目标宿主没有重定位表项,则需要创建添加,手续较多。,5.1 Win 32 PE 病毒原理(续),获取API地址问题 Win32 PE程序需要调用API函数才能实现很多在DOS下所不能想象的功能,Win32 PE病毒也是一样,它们都需要通过引用程序一开始的引用函数节来得到API函数在动态链接库中的真正地址。可是由于Win32 PE病毒程序是非法的,它只有一个代码节,不可能像合法Win32 PE程序那样拥有引入函数节,所以直接调用API函数的想法就落空了。因此,Win32 PE病毒要解决的第二个问题就是

7、如何获取所需API函数在动态链接库中的真正地址。 Windows操作系统的成功在很大程度上要归功于不论是Windows 2000还是Windows XP都有一套自己Win32 API,且在不同Windows上的兼容性极高。最早的Win32 PE病毒的思路是预编码,比如Windows 2000 中CreateFileA 的地址是0x7EE63260,则在病毒代码中需要用到CreateFileA时用call 7EE63260h语句来实现调用。这么做有两个缺陷:第一就是不同Windows的API地址不尽相同,直接写绝对地址的方法使得病毒通用性和兼容性很低;第二就是需要内置大量API地址,造成病毒长度

8、不可容忍。,5.1 Win 32 PE 病毒原理(续),第二种方法利用PE结构的特殊性来实现API函数地址获取。系统加载PE 文件时,会解析引入函数所在DLL 的导出函数表,根据名字或序号搜索相应引出函数的RVA(Related Virtual Address,相对虚拟地址),最后与模块在内存中的实际地址相加,就可以得到API函数在运行时的真正地址。这样就又有了两种不同的获取方法: 感染前遍历宿主的函数引入表。函数引入表中记载着一个程序中使用的所有API函数及其相对应的地址。如果病毒发现自己所需的API已经存在于函数引入表,则可以顺利使用;如果没有则将所需API添加进函数引入表再使用。 解析D

9、LL 的导出表,从DLL 中获取所需要的API地址。这种做法就需要获取DLL 在内存中的真实加载地址。但是DLL有上千个,如果为了运行顺利,全部解析显然是不合适的。所以需要一定的策略,首先解析那些最常用的DLL。Kernel32.DLL是优先要考虑的,因为它在几乎所有Win32进程中都要被加载,而且其中包含大部分的最常用的API。尤其是其中有两个APILoadLibrary 和GetProcAddress,通过调用它们两个可以获取任何DLL 中解析出的任何函数,而且所有Windows操作系统通用。,5.1 Win 32 PE 病毒原理(续),文件搜索问题 搜索文件并按需求加以统计是病毒必须具有

10、的一项基本功能。涉及文件搜索的不外乎3个API函数: FindFirstFile FindNextFile FindClose。,5.1 Win 32 PE 病毒原理(续),FindFirstFile 声明: Declare Function FindFirstFile Lib “kernel32“ Alias “FindFirstFileA“ (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long 功能:根据文件名查找文件。 返回值:Long。如执行成功,返回一个搜索句柄;如果出错,返回一个INVALID

11、_HANDLE_VALUE常数。一旦不再需要,应该用FindClose函数关闭这个句柄。 参数表、参数类型及说明。 lpFileName:String,欲搜索的文件名。可包含通配符,并可包含一个路径或相对路径名。 lpFindFileData:WIN32_FIND_DATA,这个结构用于装载与找到的文件有关的信息。该结构可用于后续的搜索。 特别说明:由这个函数返回的句柄可以作为一个参数用于FindNextFile函数。这样就可以方便地枚举出与lpFileName参数指定的文件名相符的所有文件;,5.1 Win 32 PE 病毒原理(续),FindNextFile 声明: Declare Fun

12、ction FindNextFile Lib “kernel32“ Alias “FindNextFileA“ (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long 功能:根据调用FindFirstFile函数时指定的一个文件名查找下一个文件。 返回值:Long。非零表示成功;零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES。 参数表、参数类型及说明。 hFindFile:Long,由FindFirstFile函数返回的搜索句柄。 lpFindF

13、ileData:WIN32_FIND_DATA,这个结构用于装载与找到的文件有关的信息。,5.1 Win 32 PE 病毒原理(续),FindClose 声明: Declare Function FindClose Lib “kernel32“ Alias “FindClose“ (ByVal hFindFile As Long) As Long 功能:关闭由FindFirstFile函数创建的一个搜索句柄。 返回值:Long非零表示成功;零表示失败。会设置GetLastError。 参数表、参数类型及说明。 HFindFile:Long,由FindFirstFile函数提供的搜索句柄。,5.

14、1 Win 32 PE 病毒原理(续),病毒常用API函数: 内存映射函数CreateFileMapping 声明: Declare Function CreateFileMapping Lib “kernel32“ Alias “CreateFileMappingA“ (ByValh File As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal

15、 lpName As String) As Long 功能:创建一个新的文件映射对象。 返回值:Long。新建文件映射对象的句柄;零意味着出错。会设置GetLastError。即使函数成功,但倘若返回的句柄属于一个现成的文件映射对象,GetLastError也会设置成ERROR_ALREADY_EXISTS。在这种情况下,文件映射的长度就是现有对象的长度,而不是这个函数指定的尺寸。,5.1 Win 32 PE 病毒原理(续),创建文件CreateFile 声明: Declare Function CreateFile Lib “kernel32“ Alias “CreateFileA“ (By

16、Val lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long 功能:这是一个全功能的例程,可打开和创建文件、管道、邮槽、通信服务、设备及控制台。 返回值Long。如执行成功,则返回文件句柄。INVALID_HANDLE_VALUE表示出错,会设置GetLastError;即使函数成功,但若文件存在,且指定了CREATE_ALWAYS 或 OPEN_ALWAYS,GetLastError也会设为ERROR_ALREADY_EXISTS; 特殊说明:打开一个通信端口时(如COM1),无论如何都要设置成 OPEN_EXISTING。这个函数代替了lOpen 和

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号