计算机病毒与防范技术

安徽师范大学——计算机与信息学院————作者(授课老师):周文


第2章 Windows文件型病毒

一、文件型病毒的特点及危害

1.1 文件型病毒的衍生和发展

二、PE文件格式

2.1 基本概念

2.2 PE文件的总体层次结构

2.3 节

三、Win32 PE病毒的基本原理

3.1 PE病毒基本功能

3.2 为什么需要重定位

3.3 病毒如何重定位

3.4 为什么要获取API函数地址

3.5 如何获取API函数地址

3.6 获取API函数地址

3.7 文件搜索算法

3.8 内存映射文件

3.9 几个内存映射函数

3.10 病毒感染PE文件的基本步骤

  1. 判断目标文件开始的两个字节是否为“MZ”;

  2. 判断PE文件标记“PE”;

  3. 判断感染标记,如果已被感染过则跳出继续执行HOST程序,否则继续;

  4. 获得Directory(数据目录)的个数,每个数据目录信息占8个字节;

  5. 得到节表起始位置:Directory的偏移地址+数据目录占用的字节数=节表起始位置;

  6. 得到目前最后节表的末尾偏移(紧接其后用于写入一个新的病毒节):

    • 节表起始位置+节的个数×(每个节表占用的字节数28H)=目前最后节表的末尾偏移
  7. 开始写入节表

    ①写入节名(8字节);

    ②写入节的实际字节数(4字节);

    ③写入新节在内存中的开始偏移地址(4字节),同时可以计算出病毒入口位置

    • 上节在内存中的开始偏移地址+(上节大小/节对齐+1)×节对齐=本节在内存中的开始偏移地址;
  8. 开始写入节表

    • 写入本节(即病毒节)在文件中对齐后的大小;

    • 写入本节在文件中的开始位置:

      • 上节在文件中的开始位置+上节对齐后的大小=本节(即病毒)在文件中的开始位置;
  9. 修改映像文件头中的节表数目

  10. 修改AddressOfEntryPoint(即程序入口点指向病毒入口位置),同时保存旧的AddressOfEntryPoint,以便返回HOST继续执行。

  11. 更新SizeOfImage(内存中整个PE映像尺寸=原SizeOfImage+病毒节经过内存节对齐后的大小);

  12. 写入感染标记(后面例子中是放在PE头中);

  13. 写入病毒代码到新添加的节中:

    ECX=病毒长度

    ESI=病毒代码位置(并不一定等于病毒执行代码开始位置)

    EDI=病毒节写入位置(后面例子是在内存映射文件中的相应位置)

  14. 将当前文件位置设为文件末尾。

3.11 文件操作相关API函数

3.12 病毒返回到HOST程序的方法


本节结束 2019-10-03

返回目录