《计算机病毒原理及防范技术》第5章_windows病毒解析(精)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
页病毒原理及防范。
5.1 Win 32 PE 病毒原理
DOS时代,程序员为了获得程序的高性能或直接控制硬件而用汇编语 言编写程序。在Windows时代,C语言程序员都体验过直接使用C语
言来编写Windows程序的艰难。于是,很多人就会马上想起汇编语言
的好处,试着用汇编语言来编写Windows程序。但Windows操作系 统本身的自我保护机制,让程序员直接控制硬件没有以前那么容易了,
计算机病毒原理及防范技术
Virus
中国水利水电出版社
第5章 Windows病毒解析
5.1 Win 32 PE 病毒原理
5.2 脚本病毒
5.3 宏病毒
5.4 网页病毒
教学Байду номын сангаас求:
理解:Windows环境下病毒的分类和特点,一般的 几种病毒编写方法。
掌握:WIN 32PE病毒,VBS脚本病毒,宏病毒,网
进行了。重定位表项由PE 文件头的DataDirectory数据中 的第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病毒要解决的第二个问题就是如何
• 感染前遍历宿主的函数引入表。函数引入表中记载着一个程序中使用的所有 API函数及其相对应的地址。如果病毒发现自己所需的API已经存在于函数引 入表,则可以顺利使用;如果没有则将所需API添加进函数引入表再使用。 • 解析DLL 的导出表,从DLL 中获取所需要的API地址。这种做法就需要获取 DLL 在内存中的真实加载地址。但是DLL有上千个,如果为了运行顺利,全
5.1 Win 32 PE 病毒原理(续)
如图,插入病毒之后变量R的位置发生了变化,必须加上由于病毒代 码而产生的增量r。所以重定位技术不解决,PE文件的感染就无法实
现。
5.1 Win 32 PE 病毒原理(续)
一般来说,重定位的方法有以下两种。
1.使用Call指令等特殊指令在运行时动态获取指令地址
5.1 Win 32 PE 病毒原理(续)
2.利用PE文件的重定位表项实现
• 这种方法就是在感染目标PE文件时,将引用自身指令所需要
被重定位的地址全部写入目标PE文件的重定位表中,如宿主 无重定位表项(如用MS linker 的/fixed)则创建后再写
入。重定位的工作就完全由系统加载器在加载PE文件时自动
宿主的位置内存是宿主或病毒在编译时无法预知的:病毒要感染 千千万万不同的具体宿主;每个宿主又可以被千千万万个不同的
病毒感染,再加上各台计算机特殊的运行环境,使得病毒在感染
宿主时在宿主中的准确位置千差万别,由于编译后的宿主变量会 直接引用变量名(运行时则是偏移地址)来访问,所以如果横加 插入则在引用数据时肯定会发生错误。
第二种方法——利用PE结构的特殊性来实现API函数地址获取。系统加载 PE 文件时,会解析引入函数所在DLL 的导出函数表,根据名字或序号
搜索相应引出函数的RVA(Related Virtual Address,相对虚拟地
址),最后与模块在内存中的实际地址相加,就可以得到API函数在运行 时的真正地址。这样就又有了两种不同的获取方法:
地址是0x7EE63260,则在病毒代码中需要用到CreateFileA时用call
[7EE63260h]语句来实现调用。这么做有两个缺陷:第一就是不同Windows的 API地址不尽相同,直接写绝对地址的方法使得病毒通用性和兼容性很低;第二就 是需要内置大量API地址,造成病毒长度不可容忍。
5.1 Win 32 PE 病毒原理(续)
这使得喜欢用汇编语言的人又有一定的减少。但实际上,在Windows
环境下使用汇编语言不会比C语言难,有时反而更加简单。在 Windows操作系统中,可执行文件比DOS操作系统下有了极大的改进, 现在全部使用的都是基于Microsoft设计的一种新的文件格式: Portable Executable File Format。 Win32 PE病毒数量巨大,破坏性强,同时伴随着新的、高超的编程 技巧,是每个信息安全人员必须掌握的一种病毒。
5.1 Win 32 PE 病毒原理(续)
重定位问题
重定位是病毒能顺利运行的最基本条件。似乎没有人在编写普通 程序时会考虑程序中代码在以后运行时在内存中的具体地址。那 是因为有编译程序做这些事情。病毒的情况比较特殊,它不是独 立存在的,而是需要寄生在一个宿主中。但病毒也是程序,又有
程序的共同性,同样也要引用一些数据来帮助运行。但病毒植入
• Call指令是汇编跳转指令,用于调用子程序。这个指令的特点是先 将返回地址压栈(即将Call后的第一条指令地址压栈,这就是保护 现场),再将EIP置为需要调用的地址。如果子程序中有ret指令就 会弹栈,且弹出目标就是EIP。这样,程序就会正常运行下去。如果 有一个变量地址和编译时预定义地址之间有一个偏差,一般将这个差 称为delta offset,则运行时只需要将该差值加到原编译时预定的 地址上,得到的就是运行时数据的正确地址。这样一来,可以通过将 delta offset 放在某个寄存器中,然后变址寻址引用变量就可以 解决引用数据重定位的难题。
获取所需API函数在动态链接库中的真正地址。
Windows操作系统的成功在很大程度上要归功于不论是Windows 2000还是 Windows XP都有一套自己Win32 API,且在不同Windows上的兼容性极高。最 早的Win32 PE病毒的思路是预编码,比如Windows 2000 中CreateFileA 的
相关文档
最新文档