PE文件格式(内容详细)课件.ppt

上传人(卖家):晟晟文业 文档编号:5101627 上传时间:2023-02-11 格式:PPT 页数:49 大小:519.50KB
下载 相关 举报
PE文件格式(内容详细)课件.ppt_第1页
第1页 / 共49页
PE文件格式(内容详细)课件.ppt_第2页
第2页 / 共49页
PE文件格式(内容详细)课件.ppt_第3页
第3页 / 共49页
PE文件格式(内容详细)课件.ppt_第4页
第4页 / 共49页
PE文件格式(内容详细)课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

1、简介简介u在在DOS环境下有四种基本的可执行文件格式环境下有四种基本的可执行文件格式8批处理文件,以批处理文件,以.BAT结尾的文件结尾的文件8设备驱动文件,是以设备驱动文件,是以.SYS结尾的文件,如结尾的文件,如CONFIG.SYS8COM文件,是以文件,是以.COM结尾的纯代码文件结尾的纯代码文件没有文件头部分,缺省情况下总是从没有文件头部分,缺省情况下总是从0 x100H处开始执行,处开始执行,没有重定位项,所有代码和数据必须控制在没有重定位项,所有代码和数据必须控制在64K以内以内8EXE文件,是以文件,是以.EXE结尾的文件结尾的文件文件以英文字母文件以英文字母“MZ”开头,通常称

2、之为开头,通常称之为MZ文件文件MZ文件有一个文件头,用来指出每个段的定义,以及重定文件有一个文件头,用来指出每个段的定义,以及重定位表。位表。.EXE文件摆脱了代码大小最多不能超过文件摆脱了代码大小最多不能超过64K的限制的限制,是,是DOS下最主要的文件格式下最主要的文件格式u在在Windows 3.0/3.1的可执行文件,在的可执行文件,在MZ文件头之后又有文件头之后又有一个以一个以“NE”开始的文件头,称之为开始的文件头,称之为NE文件文件u在在Win32位平台可执行文件格式:可移植的可执行文件位平台可执行文件格式:可移植的可执行文件(Portable Executable File)

3、格式,即格式,即PE格式。格式。MZ文件头文件头之后是一个以之后是一个以“PE”开始的文件头开始的文件头u 安装在硬盘上的程序没运行安装在硬盘上的程序没运行-静态静态u 加载到内存加载到内存-动态动态MZ文件格式文件格式-Mark Zbikowski u.EXE文件由三部分构成:文件头、重定位表和二进制代码文件由三部分构成:文件头、重定位表和二进制代码u允许代码、数据、堆栈分别处于不同的段,每一段都可以是允许代码、数据、堆栈分别处于不同的段,每一段都可以是64KB.偏移偏移大小大小(字节字节)描述描述002EXE文件类型标记:文件类型标记:4D5Ah(ASCII字符字符MZ)022文件最后一个

4、扇区的字节数文件最后一个扇区的字节数042文件的总扇区文件的总扇区(页页)数数文件的大小文件的大小=(总扇区数总扇区数-1)512+最后一个扇区的字节数最后一个扇区的字节数062重定位项的个数重定位项的个数082EXE文件头的大小文件头的大小(16字节的倍数字节的倍数)0A2最小分配数最小分配数(16字节的倍数字节的倍数)0C2最大分配数最大分配数(16字节的倍数字节的倍数)0E2初始化堆栈段初始化堆栈段(SS初值初值)102初始化堆栈指针初始化堆栈指针(SP初值初值)122补码校验和补码校验和142初始代码段指针初始代码段指针(IP初值初值)162初始代码段段地址初始代码段段地址(CS初值初

5、值)182定位表的偏移地址定位表的偏移地址(第一个重定位项的偏移量第一个重定位项的偏移量)1A2连接程序产生的覆盖号连接程序产生的覆盖号确定确定MZ文件的大小文件的大小以大小为以大小为512B的页为存储单位的页为存储单位确定代码的开始处确定代码的开始处执行代码的入口地址执行代码的入口地址重定位表的指针链表重定位表的指针链表比如调用比如调用C的库函数的库函数加载加载EXE文件文件调用调用C的库函数的库函数程序编译后:程序编译后:0000:0000 9A78563412 call far 1234:5678 程序加载器的重定位工作,就是将程序中需要重定位程序加载器的重定位工作,就是将程序中需要重定

6、位的地方,都加上程序的加载地址。的地方,都加上程序的加载地址。这个程序被加载到了内存中的这个程序被加载到了内存中的1111段处。那么完成重段处。那么完成重定位后,代码应该是这样:定位后,代码应该是这样:1111:0000 9A78564523 call far 2345:5678 NE文件格式文件格式u NE是是New Excutable的缩写,是的缩写,是16位位Windows可可执行文件的标准格式,这种格式基本上没用了执行文件的标准格式,这种格式基本上没用了u NE在在MZ文件头之后添加了一个以文件头之后添加了一个以“NE”开始的文开始的文件头件头PE文件格式文件格式u Win32可执行文

7、件,如可执行文件,如*.EXE、*.DLL、*.OCX等,等,都是都是PE格式格式u PE的意思就是的意思就是Portable Executable(可移植、可执可移植、可执行行),它是,它是Win32可执行文件的标准格式可执行文件的标准格式u 由于大量的由于大量的EXE文件被执行,且传播的可能性最大文件被执行,且传播的可能性最大,因此,因此,Win32病毒感染文件时,基本上都会将病毒感染文件时,基本上都会将EXE文件作为目标文件作为目标计算机病毒也是程序或者程序代码,而且也是可执行的,否则无法感染、破坏、隐藏等,其病毒文件也是遵循PE的格式结构。PE文件格式文件格式u一般来说,病毒往往先于一

8、般来说,病毒往往先于HOST程序获得控制权。运行程序获得控制权。运行Win32病毒的一般流程示意如下:病毒的一般流程示意如下:u用户点击或系统自动运行用户点击或系统自动运行HOST程序;程序;u装载装载HOST程序到内存;程序到内存;u通过通过PE文件中的文件中的AddressOfEntryPoint+ImageBase,定位第一条语句的位置定位第一条语句的位置(程序入口程序入口);u从第一条语句开始执行从第一条语句开始执行(这时执行的其实是病毒代码这时执行的其实是病毒代码);u病毒主体代码执行完毕,将控制权交给病毒主体代码执行完毕,将控制权交给HOST程序原来的程序原来的入口代码;入口代码;

9、uHOST程序继续执行。程序继续执行。u问题在于:计算机病毒怎会在问题在于:计算机病毒怎会在HOST程序之前执行?程序之前执行?PE文件格式文件格式MZ文件头:DOS MZ HEADERDOS插桩程序:DOS StubIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADERIMAGE_SECTION_HEADER.text.data.edata.reloc.COFF行号COFF符号表Code View调试信息PE文件标志:“PE00”映像文件头:IMAGE_FILE_HEADER可选映像头:IMAGE_OPTIONAL_HEADE

10、R32数据目录表:IMAGE_DATA_DIRECTORYDOS头PE文件头节表(Section Table)节(Section)调试信息文件头文件尾PE文件格式文件格式可看作为逻可看作为逻辑磁盘辑磁盘Boot扇区各种文件文件目录有了有了DOS头,程序在头,程序在DOS下执行,下执行,DOS就能识别这是个有效的执行体。就能识别这是个有效的执行体。DOS Stub是有效的是有效的DOS的可执行的代码,的可执行的代码,因而在不支持因而在不支持PE文件格式文件格式DOS下运行,下运行,它调用中断它调用中断21H的功能的功能9显示显示This program cannot be run in DOS

11、mode 每种文件有不同属每种文件有不同属性,如只读、系统、性,如只读、系统、隐藏、文档等。节隐藏、文档等。节的划分是基于各种的划分是基于各种数据的共同属性,数据的共同属性,而不是逻辑概念。而不是逻辑概念。PE文件中的数文件中的数/代代码拥有相同的属性,码拥有相同的属性,就能被列入同一节。就能被列入同一节。因而节名仅仅是个因而节名仅仅是个名称而已,为了识名称而已,为了识别。真正理解节,别。真正理解节,要靠节的属性设置要靠节的属性设置PE文件结构文件结构PE文件格式文件格式u 相对虚拟地址相对虚拟地址(Relative Virtual Addresses,RVA)8 相对虚拟地址是一个相对于相对

12、虚拟地址是一个相对于PE文件映射到内存的文件映射到内存的基地址的偏移量基地址的偏移量 不能映射的数据.reloc.data.textDOS头节表PE头.reloc.data.textDOS头节表PE头文件头文件尾磁盘中的PE文件映射到内存中文件偏移地址基地址(ImageBase)某一虚拟地址(VA)相对虚拟地址(RVA)0X004000000X15600X00401560PE文件格式文件格式MS-DOS头(头(64字节)字节)USHORT(双字节无符号数)typedef structtypedef struct _IMAGE_DOS_HEADER /DOS _IMAGE_DOS_HEADER

13、/DOS的的.EXE.EXE头部头部 USHORT e_magic;/USHORT e_magic;/魔术数字魔术数字 USHORT e_cblpUSHORT e_cblp;/;/文件最后页的字节数文件最后页的字节数 USHORT e_cp;/USHORT e_cp;/文件页数文件页数 USHORT e_crlcUSHORT e_crlc;/;/重定向元素个数重定向元素个数 USHORT e_cparhdrUSHORT e_cparhdr;/;/头部尺寸,以段落为单位头部尺寸,以段落为单位 USHORT e_minallocUSHORT e_minalloc;/;/所需的最小附加段所需的最小附

14、加段 USHORT e_maxallocUSHORT e_maxalloc;/;/所需的最大附加段所需的最大附加段 USHORT e_ssUSHORT e_ss;/;/初始的初始的SSSS值值(相对偏移量相对偏移量)USHORT e_sp;/USHORT e_sp;/初始的初始的SPSP值值 USHORT e_csumUSHORT e_csum;/;/校验和校验和 USHORT e_ipUSHORT e_ip;/;/初始的初始的IPIP值值 USHORT e_csUSHORT e_cs;/;/初始的初始的CSCS值值(相对偏移量相对偏移量)USHORT e_lfarlcUSHORT e_lfa

15、rlc;/;/重分配表文件地址重分配表文件地址 USHORT e_ovnoUSHORT e_ovno;/;/覆盖号覆盖号 USHORT e_resUSHORT e_res4;/4;/保留字保留字 USHORT e_oemidUSHORT e_oemid;/OEM;/OEM标识符标识符(相对相对e_oeminfoe_oeminfo)USHORT e_oeminfo USHORT e_oeminfo;/OEM;/OEM信息信息 USHORT e_res210;/USHORT e_res210;/保留字保留字 LONG e_lfanewLONG e_lfanew;/新新EXEEXE头部的文件地址头部

16、的文件地址 IMAGE_DOS_HEADER,IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;PIMAGE_DOS_HEADER;MZPE头位置头位置PE装载器装载器跳过跳过DOS Stub定位到定位到PE文件头文件头PE文件格式文件格式uDOS头与头与DOS插桩程序插桩程序8PE结构中紧随结构中紧随MZ文件头之后的文件头之后的DOS插桩程序插桩程序(DOS Stub)8可以通过可以通过IMAGE_DOS_HEADER结构来识别一个合法的结构来识别一个合法的DOS头头8可以通过该结构的可以通过该结构的e_lfanew(偏移偏移60,32bits)成员来找到成员来找到PE

17、开始的标志开始的标志0 x00004550(“PE00”)8病毒通过病毒通过“MZ”、“PE”这两个标志,初步判断当前程序这两个标志,初步判断当前程序是否是目标文件是否是目标文件PE文件。如果要精确校验指定文件是文件。如果要精确校验指定文件是否为一有效否为一有效PE文件,则可以检验文件,则可以检验PE文件格式里的各个数文件格式里的各个数据结构,或者仅校验一些关键数据结构。大多数情况下,据结构,或者仅校验一些关键数据结构。大多数情况下,没有必要校验文件里的每一个数据结构,只要一些关键数没有必要校验文件里的每一个数据结构,只要一些关键数据结构有效,就可以认为是有效的据结构有效,就可以认为是有效的P

18、E文件文件PE文件格式文件格式u PE文件头文件头8 紧接着紧接着DOS Stub的是的是PE header8 PE header是是IMAGE_NT_HEADERS的简称,即的简称,即NT映像头映像头(PE文件头文件头),存放,存放PE整个文件信息分整个文件信息分布的重要字段,包含了许多布的重要字段,包含了许多PE装载器用到的重要装载器用到的重要域。执行体在支持域。执行体在支持PE文件结构的操作系统中执行文件结构的操作系统中执行时时8 PE装载器将从装载器将从DOS MZ header中找到中找到PE header的起始偏移量,从而跳过的起始偏移量,从而跳过DOS Stub直接直接定位到真正

19、的文件头定位到真正的文件头PE headerPE文件格式文件格式uPEPE文件头的结构文件头的结构8 字符串字符串“PE00”(Signature)(4H字节字节)IMAGE_NT_HEADERS STRUCT IMAGE_NT_HEADERS STRUCT Signature dd?Signature dd?FileHeaderFileHeader IMAGE_FILE_HEADER IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32OptionalHeader IMAGE_OPTIONAL_HEADER32IMAGE_NT_HE

20、ADERS ENDSIMAGE_NT_HEADERS ENDS检验检验PE文件文件的有效性?的有效性?首先检验文件头部第一个字的值是否等于首先检验文件头部第一个字的值是否等于 IMAGE_DOS_SIGNATURE,是则,是则 DOS MZ header 有效。有效。一旦证明文件的一旦证明文件的 DOS header 有效后,就可用有效后,就可用e_lfanew来定位来定位 PE header 了。了。比较比较 PE header 的第一个字的值是否等于的第一个字的值是否等于 IMAGE_NT_HEADER。如果前后两个值都匹。如果前后两个值都匹配,那我们就认为该文件是一个有效的配,那我们就认

21、为该文件是一个有效的PE文件。文件。typedef structtypedef struct _IMAGE_FILE_HEADER _IMAGE_FILE_HEADER WORD WORD MachineMachine;/0 x04;/0 x04,该程序要执行的环境及平台,该程序要执行的环境及平台 WORD WORD NumberOfSectionsNumberOfSections;/0 x06;/0 x06,文件中节的个数,文件中节的个数 DWORD TimeDateStampDWORD TimeDateStamp;/0 x08;/0 x08,文件建立的时间,文件建立的时间 DWORD Po

22、interToSymbolTableDWORD PointerToSymbolTable;/0 x0c;/0 x0c,COFFCOFF符号表的偏移符号表的偏移 DWORD NumberOfSymbolsDWORD NumberOfSymbols;/0 x10;/0 x10,符号数目,符号数目 WORD WORD SizeOfOptionalHeaderSizeOfOptionalHeader;/0 x14;/0 x14,可选头的长度,可选头的长度 WORD WORD CharacteristicsCharacteristics;/0 x16;/0 x16,标志集合,标志集合 IMAGE_FIL

23、E_HEADER,IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;PIMAGE_FILE_HEADER;每个节表每个节表28H字节字节病毒感兴趣病毒感兴趣的地方,的地方,添加一个新节添加一个新节IMAGE_NT_HEADERS STRUCT IMAGE_NT_HEADERS STRUCT Signature dd?Signature dd?FileHeaderFileHeader IMAGE_FILE_HEADER IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32OptionalHeader IMAGE

24、_OPTIONAL_HEADER32IMAGE_NT_HEADERS ENDSIMAGE_NT_HEADERS ENDSPE文件头的结构文件头的结构-映像文件头映像文件头-NT映像头的映像头的主要部分,主要部分,包含有包含有PE文文件的基本信息件的基本信息关于关于PE文件物理分布的基本信息文件物理分布的基本信息关于文件信息的标记,比如文件是关于文件信息的标记,比如文件是 exe还是还是 dllPE文件逻辑分布的信息文件逻辑分布的信息PE文件格式文件格式8 紧跟映像文件头后面的是可选映像头紧跟映像文件头后面的是可选映像头-是必须的!是必须的!typedef structtypedef struc

25、t _IMAGE_OPTIONAL_HEADER _IMAGE_OPTIONAL_HEADER /标准域标准域:/WORD Magic;/0 x18 WORD Magic;/0 x18,一般是,一般是0 0 x010Bx010B BYTE MajorLinkerVersion BYTE MajorLinkerVersion;/0 x1a;/0 x1a,链接器的主,链接器的主/次版本号,次版本号,BYTE MinorLinkerVersionBYTE MinorLinkerVersion;/0 x1b;/0 x1b,这两个值都不可靠,这两个值都不可靠 DWORD DWORD SizeOfCode

26、SizeOfCode;/0 x1c;/0 x1c,可执行代码的长度,可执行代码的长度 DWORD SizeOfInitializedDataDWORD SizeOfInitializedData;/0 x20;/0 x20,初始化数据的长度,初始化数据的长度(数据节数据节)DWORD SizeOfUninitializedDataDWORD SizeOfUninitializedData;/0 x24;/0 x24,未初始化数据的长度,未初始化数据的长度(bssbss节节)DWORD DWORD AddressOfEntryPointAddressOfEntryPoint;/0 x28;/0

27、x28,代码的入口,代码的入口RVARVA地址,程序从这开始执行地址,程序从这开始执行 DWORD BaseOfCodeDWORD BaseOfCode;/0 x2c;/0 x2c,可执行代码起始位置,意义不大,可执行代码起始位置,意义不大 DWORD BaseOfDataDWORD BaseOfData;/0 x30;/0 x30,初始化数据起始位置,意义不大,初始化数据起始位置,意义不大 /NT/NT 附加域附加域:/DWORD DWORD ImageBaseImageBase;/0 x34;/0 x34,载入程序首选的,载入程序首选的VAVA地址地址 DWORD DWORD Sectio

28、nAlignmentSectionAlignment;/0 x38;/0 x38,加载后节在内存中的对齐方式,加载后节在内存中的对齐方式-节的大小节的大小 DWORD DWORD FileAlignmentFileAlignment;/0 x3c;/0 x3c,节在文件中的对齐方式,节在文件中的对齐方式-节的大小节的大小(待续待续)首选不是必须,如果该值为400000H,但是被其他模块占用,PE装载器会选择其他空闲地址。内存中节对齐的粒度。该值为4096-1000H,那么每节的起始地址必须是4096倍数。若第一节从401000H开始,大小为10字节,那么下一节从什么地方开始?文件中节对齐的粒度

29、。该值为512-200H,那么每节的起始地址必须是512倍数。若第一节从200H开始,大小为10字节,那么下一节从什么地方开始?运行PE文件的第一条指令的RVA。进程从虚址VA401000H开始执行,那么该值为多少?病毒感兴趣!-指向病毒体代码PE文件逻辑分布的信息文件逻辑分布的信息PE文件格式文件格式(续前)(续前)WORD MajorOperatingSystemVersionWORD MajorOperatingSystemVersion;/0 x3e;/0 x3e,操作系统主,操作系统主/次版本,次版本,WORD MinorOperatingSystemVersionWORD Mino

30、rOperatingSystemVersion;/0 x40;/0 x40,LoaderLoader并没有用这两个值并没有用这两个值 WORD MajorImageVersionWORD MajorImageVersion;/0 x42;/0 x42,可执行文件主,可执行文件主/次版本次版本 WORD MinorImageVersionWORD MinorImageVersion;/0 x44;/0 x44 WORD MajorSubsystemVersion WORD MajorSubsystemVersion;/0 x46;/0 x46,子系统版本号,子系统版本号 WORD MinorSu

31、bsystemVersionWORD MinorSubsystemVersion;/0 x48;/0 x48 DWORD Win32VersionValue;/0 x4c DWORD Win32VersionValue;/0 x4c,Win32Win32版本,一般是版本,一般是0 0 DWORD DWORD SizeOfImageSizeOfImage;/0 x50;/0 x50,程序调入后占用内存大小,程序调入后占用内存大小(字节字节)DWORD DWORD SizeOfHeadersSizeOfHeaders;/0 x54;/0 x54,文件头的长度之和,文件头的长度之和 DWORD DW

32、ORD CheckSumCheckSum;/0 x58;/0 x58,校验和,校验和 WORD WORD SubsystemSubsystem;/0 x5c;/0 x5c,可执行文件的子系统,可执行文件的子系统GUIGUI或或CUICUI WORD DllCharacteristicsWORD DllCharacteristics;/0 x5e;/0 x5e,何时,何时DllMainDllMain被调用,一般为被调用,一般为0 0 DWORD SizeOfStackReserveDWORD SizeOfStackReserve;/0 x60;/0 x60,初始化线程时保留的堆栈大小,初始化线程

33、时保留的堆栈大小 DWORD SizeOfStackCommitDWORD SizeOfStackCommit;/0 x64;/0 x64,初始化线程时提交的堆栈大小,初始化线程时提交的堆栈大小 DWORD SizeOfHeapReserveDWORD SizeOfHeapReserve;/0 x68;/0 x68,进程初始化时保留的堆大小,进程初始化时保留的堆大小 DWORD SizeOfHeapCommitDWORD SizeOfHeapCommit;/0 x6c;/0 x6c,进程初始化时提交的堆大小,进程初始化时提交的堆大小 DWORD LoaderFlagsDWORD LoaderF

34、lags;/0 x70;/0 x70,装载标志,与调试相关,装载标志,与调试相关 DWORD NumberOfRvaAndSizesDWORD NumberOfRvaAndSizes;/0 x74;/0 x74,数据目录的项数,一般是,数据目录的项数,一般是1616 IMAGE_DATA_DIRECTORY DataDirectoryIMAGE_DATA_DIRECTORY DataDirectoryIMAGE_NUMBEROF_DIRECTORY_ENTRIES;IMAGE_NUMBEROF_DIRECTORY_ENTRIES;IMAGE_OPTIONAL_HEADER,IMAGE_OPTI

35、ONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;PIMAGE_OPTIONAL_HEADER;DataDirectory:数据目录表:数据目录表 typedef struct _IMAGE_DATA_DIRECTORY DWORD VirtualAddress;DWORD Size;IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;u是一个是一个IMAGE_DATA_DIRECTORY结结构数组,有构数组,有16个这样的元素。个这样的元素。u数据目录表数据目录表-每个结构给出一个重每个结构给出一个重要数据结构的起始要数据结构的起始R

36、VA和大小信和大小信息。息。u节表可以看作是节表可以看作是PE文件各节的根文件各节的根目录的话,也可以认为目录的话,也可以认为 data directory 是存储在这些节里的逻是存储在这些节里的逻辑元素的根目录。辑元素的根目录。u 什么重要数据结构?什么重要数据结构?如:导入目录如:导入目录-导入函数导入函数(引入函数引入函数 import)一个引入函数是被某模一个引入函数是被某模块调用但又不在调用模块块调用但又不在调用模块中的函数,位于一个或者中的函数,位于一个或者更多的更多的DLL里,因而要保里,因而要保留一些函数信息,包括函留一些函数信息,包括函数名及其驻留的数名及其驻留的DLL名。名

37、。u 怎么样获得怎么样获得PE文件中重文件中重要数据结构?要数据结构?怎么样获得怎么样获得PE文件中重要数据结构?文件中重要数据结构?从从 DOS header 定位到定位到 PE header从从 optional header 读取读取 data directory 的地址。的地址。IMAGE_DATA_DIRECTORY 结构尺寸乘结构尺寸乘上找寻结构的索引号上找寻结构的索引号:寻寻import symbols的位置信息,必须用的位置信息,必须用IMAGE_DATA_DIRECTORY 结构尺结构尺寸寸(8 bytes)乘上乘上1(import symbols在在data directo

38、ry中的索引号)。中的索引号)。将上面的结果加上将上面的结果加上data directory地址,就地址,就得到包含所查询数据结构信息的得到包含所查询数据结构信息的 IMAGE_DATA_DIRECTORY 结构项结构项。PE文件格式文件格式u 节表是紧挨着节表是紧挨着NT映像头的一结构数组,其成员的映像头的一结构数组,其成员的数目由映像文件头中数目由映像文件头中NumberOfSections决定决定#define IMAGE_SIZEOF_SHORT_NAME 8#define IMAGE_SIZEOF_SHORT_NAME 8typedef structtypedef struct _I

39、MAGE_SECTION_HEADER _IMAGE_SECTION_HEADER UCHAR NameIMAGE_SIZEOF_SHORT_NAME;/UCHAR NameIMAGE_SIZEOF_SHORT_NAME;/节名节名 union union ULONG PhysicalAddress ULONG PhysicalAddress;/OBJ;/OBJ文件中表示本节物理地址文件中表示本节物理地址 ULONG ULONG VirtualSizeVirtualSize;/EXE;/EXE文件中表示节的实际字节数文件中表示节的实际字节数 MiscMisc;ULONG ULONG Virtu

40、alAddressVirtualAddress;/;/本节的本节的RVARVA ULONG SizeOfRawData ULONG SizeOfRawData;/;/本节经过文件对齐后的尺寸本节经过文件对齐后的尺寸 ULONG PointerToRawDataULONG PointerToRawData;/;/本节原始数据在文件中的位置本节原始数据在文件中的位置 ULONG PointerToRelocationsULONG PointerToRelocations;/OBJ;/OBJ文件中表示本节重定位信文件中表示本节重定位信 /息的偏移,息的偏移,EXEEXE文件中无意义文件中无意义 UL

41、ONG PointerToLinenumbersULONG PointerToLinenumbers;/;/行号偏移行号偏移 USHORT NumberOfRelocations;/USHORT NumberOfRelocations;/本节需重定位的数目本节需重定位的数目 USHORT NumberOfLinenumbers;/USHORT NumberOfLinenumbers;/本节在行号表中的行号数目本节在行号表中的行号数目 ULONG Characteristics;/ULONG Characteristics;/节属性节属性 IMAGE_SECTION_HEADER,IMAGE_S

42、ECTION_HEADER,*PIMAGE_SECTION_HEADER;PIMAGE_SECTION_HEADER;本节的实际字节数 如388H字节本节的相对虚拟地址 如为1000H,而PE文件装载地址400000H,?经过文件对齐后的节尺寸;若对齐粒度为200H,那么该值为?病毒喜欢这里PE装载器通过本域找到节的位置PE文件格式文件格式8 代码节的属性一般是代码节的属性一般是60000020H,即,即“可执行可执行”、“可读可读”和和“节中包含代码节中包含代码”8 数据节的属性一般是数据节的属性一般是C0000040H,即,即“可读可读”、“可写可写”和和“包含已初始化数据包含已初始化数据

43、”8 病毒在添加新节时,都会将新添加的节的属性设病毒在添加新节时,都会将新添加的节的属性设置为可读、可写、可执行置为可读、可写、可执行NumberOfSections知道有几个节知道有几个节SizeOfHeaders知道节表在什么地方开始知道节表在什么地方开始遍历节表,遍历节表,PointerToRawData知道节在文件中偏移量知道节在文件中偏移量SizeOfRawData来决定映射内存的字节数来决定映射内存的字节数VirtualAddress加上加上ImageBase知道节的起始虚拟地址知道节的起始虚拟地址PE文件格式文件格式u节节8PE文件的真正内容划分成块,称之为文件的真正内容划分成块

44、,称之为Section(节节),紧跟,紧跟在节表之后在节表之后8每个节是一块拥有共同属性的数据,比如代码每个节是一块拥有共同属性的数据,比如代码/数据、读数据、读/写等写等8可以把可以把PE文件想象成一逻辑磁盘,文件想象成一逻辑磁盘,PE header是磁盘的是磁盘的Boot扇区,节表就是根目录,而扇区,节表就是根目录,而Section就是各种文件,就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等每种文件自然就有不同属性如只读、系统、隐藏、文档等等等8节的划分是基于各组数据的共同属性而不是逻辑概念节的划分是基于各组数据的共同属性而不是逻辑概念如果如果PE文件中的数据文件中的数据

45、/代码拥有相同属性,它们就能被归代码拥有相同属性,它们就能被归入同一节中入同一节中8节名称仅仅是个区别不同节的符号而已,类似节名称仅仅是个区别不同节的符号而已,类似“data”、“code”的命名只为了便于识别,惟有节的属性设置决定的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能了节的特性和功能 PE文件格式文件格式8 代码节代码节.text Windows NT默认的做法是将所有的可执行代码默认的做法是将所有的可执行代码组成了一个单独的节,名为组成了一个单独的节,名为“.text”或或“.code”8 引入函数节引入函数节.idata 包含有从其它包含有从其它DLL中引入的函数中引

46、入的函数 该节开始是一个成员为该节开始是一个成员为IMAGE_IMPORT_DESCRIPTOR结构的结构数结构的结构数组,也叫引入表,数据目录表表项结构成员组,也叫引入表,数据目录表表项结构成员VirtualAddress包含引入表地址包含引入表地址 引入函数节可能被病毒用来直接获取引入函数节可能被病毒用来直接获取API函数地函数地址址Windows NT进程的地址空间进程的地址空间操作系统使用不可读写(2GB)用于防止跨用户/系统边界传输数据不可读写(64KB)进程私有空间128KB2GB用户捕捉NULL指针用不可读写(64KB)FFFFFFFFH80000000H7FFFFFFFH7FF

47、F0000H7FFFEFFFH00010000H0000FFFFH00000000H进程需要用到的进程需要用到的DLL都会载入自己的私用地址空间都会载入自己的私用地址空间那么如何找到那么如何找到DLL中的函数呢?中的函数呢?对对WIN32API函数函数GetMessage的调用的调用USER32.DLL一个程序调用外部一个程序调用外部DLL中的函数时并不直接调用那个中的函数时并不直接调用那个DLL中的函数。相反,中的函数。相反,CALL指令转到了同一个指令转到了同一个.text节中的节中的JMP DWORD PTR XXXXXXXX类型的指类型的指令。令。这种这种JMP指令查找并且将控制权转移

48、到的地址是实际的目标地址。指令查找并且将控制权转移到的地址是实际的目标地址。PE文件的文件的.idata节包含了加载器用以确定目标函数的地址并且在可执行映像中修节包含了加载器用以确定目标函数的地址并且在可执行映像中修正它们所需的信息。正它们所需的信息。引入表引入表 import tableu Data Directory数组第二项的数组第二项的VirtualAddress包含引入表地包含引入表地址。址。u 引入表实际上是一个引入表实际上是一个 IMAGE_IMPORT_DESCRIPTOR 结构数组。结构数组。u 每个结构包含每个结构包含PE文件引入函数文件引入函数的一个相关的一个相关DLL的

49、信息。的信息。u 比如,如果该比如,如果该PE文件从文件从10个不个不同的同的DLL中引入函数,那么这中引入函数,那么这个数组就有个数组就有10个成员。该数组个成员。该数组以一个全以一个全0的成员结尾。的成员结尾。引入表引入表 import tabletypedef struct _IMAGE_IMPORT_DESCRIPTOR union DWORD Characteristics;/0 for terminating null import descriptor 别名别名DWORD OriginalFirstThunk;/RVA to original unbound IAT(指向指向IM

50、AGE_THUNK_DATA结构数组的结构数组的RVA);DWORD TimeDateStamp;/0 if not bound,/-1 if bound,and real datetime stamp/in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT(new BIND)/O.W.date/time stamp of DLL bound to(Old BIND)DWORD ForwarderChain;/-1 if no forwardersDWORD Name;/RVA,指向字符串,是这个可执行文件的名字。指向名字的指针,指向字符串,是这个可执行文件的名字。指向名字

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(PE文件格式(内容详细)课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|