DOS病毒编制的关键技术-EXE文件

发表于:2015-08-15 14:50 阅读:

  EXE 文件比较复杂,每个EXE文件都有一个文件头,包含MS-DOS用于加载程序的信息,例如,程序的大小和寄存器的初始值等,其具体结构如表4-3所示。

4-3 EXE文件头结构

偏移量

表示意义

00h-01h

4DH5AH EXE文件标记

02h-03h

文件长度除512的余数

04h-05h

文件长度除512的商

06h-07h

重定位项的个数

08h-09h

文件头除16的商

0ah-0bh

程序运行所需最小段数

0ch-0dh

程序运行所需最大段数

oeh-0fh

堆栈段的段值(SS

10h-11h

堆栈段的段值(SP

12h-13h

文件校验和

14h-15h

装入模块入口时的IP

16h-17h

装入模块代码段相对段值

18h-19h

重定位表,开始位置,以位移地址指示

1ah-1bh

覆盖号(程序驻留为0

1ch-

重定位表,起点由偏移18h-19h给出,项数由06h-07h标明

  文件头还指向一个重定位表,该表包含指向程序映象中可重定位段地址的指针链表。文件头的形式与EXEHEADER结构对应:
  
  EXEHEADER STRUC  
  exSignature dw 5A4Dh  ;EXE标志
  
  exExraBytes dw ?       ;最后(部分)页中的字节数
  
  exPages dw ?           ;文件中的全部和部分页数
  
  exRelocItems dw ?      ;重定位表中的指针数
  
  exHeaderSize dw ?      ;以字节为单位的文件头大小
  
  exMinAlloc dw ?        ;最小分配大小
  
  exMaxAlloc dw ?        ;最大分配大小
  
  exInitSS dw ?           ;初始SS
  
  exInitSP dw ?           ;初始SP
  
  exChechSum dw ?       ;补码校验值
  
  exInitIP dw ?           ;初始IP
  
  exInitCS dw ?           ;初始CS
  
  exRelocTable dw ?       ;定位表的字节偏移量
  
  exOverlay dw ?          ;覆盖号
  
  EXEHEADER ENDS

  程序映象包含处理器代码和程序的初始数据,紧接在文件头之后。它的大小以字节为单位,等于EXE文件的大小减去文件头的大小,也等于exHeaderSize域的值乘以16MS-DOS通过把该映象直接从文件拷贝到内存加载EXE程序,然后调整定位表中说明的可重定位段地址。  

  定位表是一个重定位指针数组,每个指针指向程序映象中的可重定位段地址。文件头中的exRelocItems域说明了数组中指针的个数,exRelocTable域说明了分配表的起始文件偏移量。每个重定位指针由两个16位值组成,它们分别是偏移量和段值。为了加载EXE程序,MS-DOS首先读文件头以确定EXE标志,并计算程序映象的大小。然后就试图申请内存。首先,MS-DOS计算程序映象文件的大小加上PSP的大小,再加上EXEHEADER结构中的exMinAlloc域说明的内存大小这三者之和,如果总和超过最大可用内存块的大小,则MS-DOS停止加载程序并返回一个出错值。否则,MS-DOS 分配计算得到的内存量。

  分配完内存后,MS-DOS确定段地址,也称为起始段地址,MS-DOS从此处加载程序映象。如果exMinAlloc域和exMaxAlloc域中的值都为零,则MS-DOS把映象尽可能地加载到内存最高端。否则,它把映象加载到紧挨着PSP域之上。

  接下来,MS-DOS读取重定位表中的项目调整所有由可重定位指针说明的段地址。对于重定位表中的每个指针,MS-DOS寻找程序映象中相应的可重定位段地址,并把起始段地址加到它之上。一旦调整完毕,段地址便指向了内存中被加载程序的代码和数据段。MS-DOS在所分配内存的最低端建立256字节的PSP,使用文件头中的值设置SPSS,调整SS初始值,把起始地址加到它之上。同时,还把ESDS设置为PSP的段地址。最后,MS-DOS从程序文件头读取CSIP的初始值,把起始段地址加到CS之上,把控制转移到位于调整后地址处的程序。

此文章节选自《计算机病毒与木马程序剖析》

 

 


(非特殊说明,本文版权归原作者所有,转载请注明出处 )
鸣人致力于为企业提供数据恢复、机房建设、数据库运行、运营及安全等全方位服务。




想在手机上、随时获取互联网前沿、设计资讯以及各种意想不到的"福利"吗?通过微信扫描二维码快速添加