PE文件格式(内容详细).ppt
- 文档编号:18899242
- 上传时间:2024-02-10
- 格式:PPT
- 页数:49
- 大小:519.50KB
PE文件格式(内容详细).ppt
《PE文件格式(内容详细).ppt》由会员分享,可在线阅读,更多相关《PE文件格式(内容详细).ppt(49页珍藏版)》请在冰点文库上搜索。
简介简介u在在DOS环境下有四种基本的可执行文件格式环境下有四种基本的可执行文件格式8批处理文件,以批处理文件,以.BAT结尾的文件结尾的文件8设备驱动文件,是以设备驱动文件,是以.SYS结尾的文件,如结尾的文件,如CONFIG.SYS8COM文件,是以文件,是以.COM结尾的纯代码文件结尾的纯代码文件没有文件头部分,缺省情况下总是从没有文件头部分,缺省情况下总是从0x100H处开始执行,处开始执行,没有重定位项,所有代码和数据必须控制在没有重定位项,所有代码和数据必须控制在64K以内以内8EXE文件,是以文件,是以.EXE结尾的文件结尾的文件文件以英文字母文件以英文字母“MZ”开头,通常称之为开头,通常称之为MZ文件文件MZ文件有一个文件头,用来指出每个段的定义,以及重定文件有一个文件头,用来指出每个段的定义,以及重定位表。
位表。
.EXE文件摆脱了代码大小最多不能超过文件摆脱了代码大小最多不能超过64K的限制,的限制,是是DOS下最主要的文件格式下最主要的文件格式u在在Windows3.0/3.1的可执行文件,在的可执行文件,在MZ文件头之后又有文件头之后又有一个以一个以“NE”开始的文件头,称之为开始的文件头,称之为NE文件文件u在在Win32位平台可执行文件格式:
可移植的可执行文件位平台可执行文件格式:
可移植的可执行文件(PortableExecutableFile)格式,即格式,即PE格式。
格式。
MZ文件头之文件头之后是一个以后是一个以“PE”开始的文件头开始的文件头EXEEXE文件的格式文件的格式u安装在硬盘上的程序没运行安装在硬盘上的程序没运行-静态静态u加载到内存加载到内存-动态动态MZ文件格式文件格式-MarkZbikowskiu.EXE文件由三部分构成:
文件头、重定位表和二进制代码文件由三部分构成:
文件头、重定位表和二进制代码u允许代码、数据、堆栈分别处于不同的段,每一段都可以是允许代码、数据、堆栈分别处于不同的段,每一段都可以是64KB.EXEEXE文件的格式文件的格式偏移偏移大小大小(字节字节)描述描述002EXE文件类型标记:
文件类型标记:
4D5Ah(ASCII字符字符MZ)022文件最后一个扇区的字节数文件最后一个扇区的字节数042文件的总扇区文件的总扇区(页页)数数文件的大小文件的大小=(总扇区数总扇区数-1)512+最后一个扇区的字节数最后一个扇区的字节数062重定位项的个数重定位项的个数082EXE文件头的大小文件头的大小(16字节的倍数字节的倍数)0A2最小分配数最小分配数(16字节的倍数字节的倍数)0C2最大分配数最大分配数(16字节的倍数字节的倍数)0E2初始化堆栈段初始化堆栈段(SS初值初值)102初始化堆栈指针初始化堆栈指针(SP初值初值)122补码校验和补码校验和142初始代码段指针初始代码段指针(IP初值初值)162初始代码段段地址初始代码段段地址(CS初值初值)182定位表的偏移地址定位表的偏移地址(第一个重定位项的偏移量第一个重定位项的偏移量)1A2连接程序产生的覆盖号连接程序产生的覆盖号确定确定MZ文件的大小文件的大小以大小为以大小为512B的页为存储单位的页为存储单位确定代码的开始处确定代码的开始处执行代码的入口地址执行代码的入口地址重定位表的指针链表重定位表的指针链表比如调用比如调用C的库函数的库函数加载加载EXE文件文件调用调用C的库函数的库函数程序编译后:
程序编译后:
0000:
00009A78563412callfar1234:
5678程序加载器的重定位工作,就是将程序中需要重定位程序加载器的重定位工作,就是将程序中需要重定位的地方,都加上程序的加载地址。
的地方,都加上程序的加载地址。
这个程序被加载到了内存中的这个程序被加载到了内存中的1111段处。
那么完成重段处。
那么完成重定位后,代码应该是这样:
定位后,代码应该是这样:
1111:
00009A78564523callfar2345:
5678NE文件格式文件格式uNE是是NewExcutable的缩写,是的缩写,是16位位Windows可可执行文件的标准格式,这种格式基本上没用了执行文件的标准格式,这种格式基本上没用了uNE在在MZ文件头之后添加了一个以文件头之后添加了一个以“NE”开始的文件开始的文件头头EXEEXE文件的格式文件的格式PE文件格式文件格式uWin32可执行文件,如可执行文件,如*.EXE、*.DLL、*.OCX等,等,都是都是PE格式格式uPE的意思就是的意思就是PortableExecutable(可移植、可执可移植、可执行行),它是,它是Win32可执行文件的标准格式可执行文件的标准格式u由于大量的由于大量的EXE文件被执行,且传播的可能性最大,文件被执行,且传播的可能性最大,因此,因此,Win32病毒感染文件时,基本上都会将病毒感染文件时,基本上都会将EXE文件作为目标文件作为目标EXEEXE文件的格式文件的格式计算机病毒也是程序或者程序代码,而且也是可执行的,否则无法感染、破坏、隐藏等,其病毒文件也是遵循PE的格式结构。
PE文件格式文件格式u一般来说,病毒往往先于一般来说,病毒往往先于HOST程序获得控制权。
运行程序获得控制权。
运行Win32病毒的一般流程示意如下:
病毒的一般流程示意如下:
u用户点击或系统自动运行用户点击或系统自动运行HOST程序;程序;u装载装载HOST程序到内存;程序到内存;u通过通过PE文件中的文件中的AddressOfEntryPoint+ImageBase,定位第一条语句的位置定位第一条语句的位置(程序入口程序入口);u从第一条语句开始执行从第一条语句开始执行(这时执行的其实是病毒代码这时执行的其实是病毒代码);u病毒主体代码执行完毕,将控制权交给病毒主体代码执行完毕,将控制权交给HOST程序原来的程序原来的入口代码;入口代码;uHOST程序继续执行。
程序继续执行。
u问题在于:
计算机病毒怎会在问题在于:
计算机病毒怎会在HOST程序之前执行?
程序之前执行?
EXEEXE文件的格式文件的格式PE文件格式文件格式EXEEXE文件的格式文件的格式PE文件格式文件格式可看作为逻可看作为逻辑磁盘辑磁盘Boot扇区各种文件文件目录有了有了DOS头,程序在头,程序在DOS下执行,下执行,DOS就能识别这是个有效的执行体。
就能识别这是个有效的执行体。
DOSStub是有效的是有效的DOS的可执行的代码,的可执行的代码,因而在不支持因而在不支持PE文件格式文件格式DOS下运行,下运行,它调用中断它调用中断21H的功能的功能9显示显示ThisprogramcannotberuninDOSmode每种文件有不同属每种文件有不同属性,如只读、系统、性,如只读、系统、隐藏、文档等。
节隐藏、文档等。
节的划分是基于各种的划分是基于各种数据的共同属性,数据的共同属性,而不是逻辑概念。
而不是逻辑概念。
PE文件中的数文件中的数/代代码拥有相同的属性,码拥有相同的属性,就能被列入同一节。
就能被列入同一节。
因而节名仅仅是个因而节名仅仅是个名称而已,为了识名称而已,为了识别。
真正理解节,别。
真正理解节,要靠节的属性设置要靠节的属性设置PE文件结构文件结构PE文件格式文件格式u相对虚拟地址相对虚拟地址(RelativeVirtualAddresses,RVA)8相对虚拟地址是一个相对于相对虚拟地址是一个相对于PE文件映射到内存的文件映射到内存的基地址的偏移量基地址的偏移量EXEEXE文件的格式文件的格式0X004000000X15600X00401560PE文件格式文件格式MS-DOS头(头(64字节)字节)USHORT(双字节无符号数)EXEEXE文件的格式文件的格式typedefstructtypedefstruct_IMAGE_DOS_HEADER/DOS_IMAGE_DOS_HEADER/DOS的的.EXEEXE头部头部USHORTe_magic;/USHORTe_magic;/魔术数字魔术数字USHORTe_USHORTe_cblpcblp;/;/文件最后页的字节数文件最后页的字节数USHORTe_cp;/USHORTe_cp;/文件页数文件页数USHORTe_USHORTe_crlccrlc;/;/重定向元素个数重定向元素个数USHORTe_USHORTe_cparhdrcparhdr;/;/头部尺寸,以段落为单位头部尺寸,以段落为单位USHORTe_USHORTe_minallocminalloc;/;/所需的最小附加段所需的最小附加段USHORTe_USHORTe_maxallocmaxalloc;/;/所需的最大附加段所需的最大附加段USHORTe_USHORTe_ssss;/;/初始的初始的SSSS值值(相对偏移量相对偏移量)USHORTe_sp;/USHORTe_sp;/初始的初始的SPSP值值USHORTe_USHORTe_csumcsum;/;/校验和校验和USHORTe_USHORTe_ipip;/;/初始的初始的IPIP值值USHORTe_USHORTe_cscs;/;/初始的初始的CSCS值值(相对偏移量相对偏移量)USHORTe_USHORTe_lfarlclfarlc;/;/重分配表文件地址重分配表文件地址USHORTe_USHORTe_ovnoovno;/;/覆盖号覆盖号USHORTe_USHORTe_resres4;/4;/保留字保留字USHORTe_USHORTe_oemidoemid;/OEM;/OEM标识符标识符(相对相对e_e_oeminfooeminfo)USHORTe_USHORTe_oeminfooeminfo;/OEM;/OEM信息信息USHORTe_res210;/USHORTe_res210;/保留字保留字LONGe_LONGe_lfanewlfanew;/新新EXEEXE头部的文件地址头部的文件地址IMAGE_DOS_HEADER,*IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;PIMAGE_DOS_HEADER;MZPE头位置头位置PE装载器装载器跳过跳过DOSStub定位到定位到PE文件头文件头PE文件格式文件格式uDOS头与头与DOS插桩程序插桩程序8PE结构中紧随结构中紧随MZ文件头之后的文件头之后的DOS插桩程序插桩程序(DOSStub)8可以通过可以通过IMAGE_DOS_HEADER结构来识别一个合法的结构来识别一个合法的DOS头头8可以通过该结构的可以通过该结构的e_lfanew(偏移偏移60,32bits)成员来找到成员来找到PE开始的标志开始的标志0x00004550(“PE00”)8病毒通过病毒通过“MZ”、“PE”这两个标志,初步判断当前程序是这两个标志,初步判断当前程序是否是目标文件否是目标文件PE文件。
如果要精确校验指定文件是否文件。
如果要精确校验指定文件是否为一有效为一有效PE文件,则可以检验文件,则可以检验PE文件格式里的各个数据结文件格式里的各个数据结构,或者仅校验一些关键数据结构。
大多数情况下,没有构,或者仅校验一些关键数据结构。
大多数情况下,没有必要校验文件里的每一个数据结构,只要一些关键数据结必要校验文件里的每一个数据结构,只要一些关键数据结构有效,就可以认为是有效的构有效,就可以认为是有效的PE文件文件EXEEXE文件的格式文件的格式PE文件格式文件格式uPE文件头文件头8紧接着紧接着DOSStub的是的是PEheader8PEheader是是IMAGE_NT_HEADERS的简称,即的简称,即NT映像头映像头(PE文件头文件头),存放,存放PE整个文件信息分布整个文件信息分布的重要字段,包含了许多的重要字段,包含了许多PE装载器用到的重要域。
装载器用到的重要域。
执行体在支持执行体在支持PE文件结构的操作系统中执行时文件结构的操作系统中执行时8PE装载器将从装载器将从DOSMZheader中找到中找到PEheader的起始偏移量,从而跳过的起始偏移量,从而跳过DOSStub直接定位到真直接定位到真正的文件头正的文件头PEheaderEXEEXE文件的格式文件的格式PE文件格式文件格式uPEPE文件头的结构文件头的结构8字符串字符串“PE00”(Signature)(4H字节字节)EXEEXE文件的格式文件的格式IMAGE_NT_HEADERSSTRUCTIMAGE_NT_HEADERSSTRUCTSignatureSignaturedddd?
FileHeaderFileHeaderIMAGE_FILE_HEADERIMAGE_FILE_HEADEROptionalHeaderOptionalHeaderIMAGE_OPTIONAL_HEADER32IMAGE_OPTIONAL_HEADER32IMAGE_NT_HEADERSENDSIMAGE_NT_HEADERSENDS检验检验PE文件文件的有效性?
的有效性?
首先检验文件头部第一个字的值是否等于首先检验文件头部第一个字的值是否等于IMAGE_DOS_SIGNATURE,是则,是则DOSMZheader有效。
有效。
一旦证明文件的一旦证明文件的DOSheader有效后,就可用有效后,就可用e_lfanew来定位来定位PEheader了。
了。
比较比较PEheader的第一个字的值是否等于的第一个字的值是否等于IMAGE_NT_HEADER。
如果前后两个值都匹。
如果前后两个值都匹配,那我们就认为该文件是一个有效的配,那我们就认为该文件是一个有效的PE文件。
文件。
typedefstructtypedefstruct_IMAGE_FILE_HEADER_IMAGE_FILE_HEADERWORDWORDMachineMachine;/0x04;/0x04,该程序要执行的环境及平台该程序要执行的环境及平台WORDWORDNumberOfSectionsNumberOfSections;/0x06;/0x06,文件中节的个数文件中节的个数DWORDDWORDTimeDateStampTimeDateStamp;/0x08;/0x08,文件建立的时间文件建立的时间DWORDDWORDPointerToSymbolTablePointerToSymbolTable;/0x0c;/0x0c,COFFCOFF符号表的偏移符号表的偏移DWORDDWORDNumberOfSymbolsNumberOfSymbols;/0x10;/0x10,符号数目符号数目WORDWORDSizeOfOptionalHeaderSizeOfOptionalHeader;/0x14;/0x14,可选头的长度可选头的长度WORDWORDCharacteristicsCharacteristics;/0x16;/0x16,标志集合标志集合IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;每个节表每个节表28H字节字节病毒感兴趣病毒感兴趣的地方,的地方,添加一个新节添加一个新节IMAGE_NT_HEADERSSTRUCTIMAGE_NT_HEADERSSTRUCTSignatureSignaturedddd?
FileHeaderFileHeaderIMAGE_FILE_HEADERIMAGE_FILE_HEADEROptionalHeaderOptionalHeaderIMAGE_OPTIONAL_HEADER32IMAGE_OPTIONAL_HEADER32IMAGE_NT_HEADERSENDSIMAGE_NT_HEADERSENDSPE文件头的结构文件头的结构-映像文件头映像文件头-NT映像头的映像头的主要部分,主要部分,包含有包含有PE文文件的基本信息件的基本信息关于关于PE文件物理分布的基本信息文件物理分布的基本信息关于文件信息的标记,比如文件是关于文件信息的标记,比如文件是exe还是还是dllPE文件逻辑分布的信息文件逻辑分布的信息PE文件格式文件格式8紧跟映像文件头后面的是可选映像头紧跟映像文件头后面的是可选映像头-是必须的!
是必须的!
EXEEXE文件的格式文件的格式typedefstructtypedefstruct_IMAGE_OPTIONAL_HEADER_IMAGE_OPTIONAL_HEADER/标准域标准域:
/WORDMagic;/0x18WORDMagic;/0x18,一般是一般是00x010Bx010BBYTEBYTEMajorLinkerVersionMajorLinkerVersion;/0x1a;/0x1a,链接器的主链接器的主/次版本号,次版本号,BYTEBYTEMinorLinkerVersionMinorLinkerVersion;/0x1b;/0x1b,这两个值都不可靠这两个值都不可靠DWORDDWORDSizeOfCodeSizeOfCode;/0x1c;/0x1c,可执行代码的长度可执行代码的长度DWORDDWORDSizeOfInitializedDataSizeOfInitializedData;/0x20;/0x20,初始化数据的长度初始化数据的长度(数据节数据节)DWORDDWORDSizeOfUninitializedDataSizeOfUninitializedData;/0x24;/0x24,未初始化数据的长度未初始化数据的长度(bssbss节节)DWORDDWORDAddressOfEntryPointAddressOfEntryPoint;/0x28;/0x28,代码的入口代码的入口RVARVA地址,程序从这开始执行地址,程序从这开始执行DWORDDWORDBaseOfCodeBaseOfCode;/0x2c;/0x2c,可执行代码起始位置,意义不大可执行代码起始位置,意义不大DWORDDWORDBaseOfDataBaseOfData;/0x30;/0x30,初始化数据起始位置,意义不大初始化数据起始位置,意义不大/NTNT附加域附加域:
/DWORDDWORDImageBaseImageBase;/0x34;/0x34,载入程序首选的载入程序首选的VAVA地址地址DWORDDWORDSectionAlignmentSectionAlignment;/0x380x38,加载后节在内存中的对齐方式加载后节在内存中的对齐方式-节的大小节的大小DWORDDWORDFileAlignmentFileAlignment;/0x3c;/0x3c,节在文件中的对齐方式节在文件中的对齐方式-节的大小节的大小(待续待续)首选不是必须,如果该值为400000H,但是被其他模块占用,PE装载器会选择其他空闲地址。
内存中节对齐的粒度。
该值为4096-1000H,那么每节的起始地址必须是4096倍数。
若第一节从401000H开始,大小为10字节,那么下一节从什么地方开始?
文件中节对齐的粒度。
该值为512-200H,那么每节的起始地址必须是512倍数。
若第一节从200H开始,大小为10字节,那么下一节从什么地方开始?
运行PE文件的第一条指令的RVA。
进程从虚址VA401000H开始执行,那么该值为多少?
病毒感兴趣!
-指向病毒体代码PE文件逻辑分布的信息文件逻辑分布的信息PE文件格式文件格式EXEEXE文件的格式文件的格式(续前)(续前)WORDWORDMajorOperatingSystemVersionMajorOperatingSystemVersion;/0x3e;/0x3e,操作系统主操作系统主/次版本,次版本,WORDWORDMinorOperatingSystemVersionMinorOperatingSystemVersion;/0x40;/0x40,LoaderLoader并没有用这两个值并没有用这两个值WORDWORDMajorImageVersionMajorImageVersion;/0x42;/0x42,可执行文件主可执行文件主/次版本次版本WORDWORDMinorImageVersionMinorImageVersion;/0x44;/0x44WORDWORDMajorSubsystemVersionMajorSubsystemVersion;/0x46;/0x46,子系统版本号子系统版本号WORDWORDMinorSubsystemVersionMinorSubsystemVersion;/0x48;/0x48DWORDWin32VersionValue;/0x4cDWORDWin32VersionValue;/0x4c,Win32Win32版本,一般是版本,一般是00DWORDDWORDSizeOfImageSizeOfImage;/0x50;/0x50,程序调入后占用内存大小程序调入后占用内存大小(字节字节)DWORDDWORDSizeOfHeadersSizeOfHeaders;/0x54;/0x54,文件头的长度之和文件头的长度之和DWORDDWORDCheckSumCheckSum;/0x58;/0x58,校验和校验和WORDWORDSubsystemSubsystem;/0x5c;/0x5c,可执行文件的子系统可执行文件的子系统GUIGUI或或CUICUIWORDWORDDllCharacteristicsDllCharacteristics;/0x5e;/0x5e,何时何时DllMainDllMain被调用,一般为被调用,一般为00DWORDDWORDSizeOfStackReserveSizeOfStackReserve;/0x60;/0x60,初始化线程时保留的堆栈大小初始化线程时保留的堆栈大小DWORDDWORDSizeOfStackCommitSizeOfStackCommit;/0x64;/0x64,初始化线程时提交的堆栈大小初始化线程时提交的堆栈大小DWORDDWORDSizeOfHeapReserveSizeOfHeapReserve;/0x68;/0x68,进程初始化时保留的堆大小进程初始化时保留的堆大小DWORDDWORDSizeOfHeapCommitSizeOfHeapCommit;/0x6c;/0x6c,进程初始化时提交的堆大小进程初始化时提交的堆大小DWORDDWORDLoaderFlagsLoaderFlags;/0x70;/0x70,装载标志,与调试相关装载标志,与调试相关DWORDDWORDNumberOfRvaAndSizesNumberOfRvaAndSizes;/0x74;/0x74,数据目录的项数,一般是数据目录的项数,一般是1616IMAGE_DATA_DIRECTORYIMAGE_DATA_DIRECTORYDataDirectoryDataDirectoryIMAGE_NUMBEROF_DIRECTORY_ENTRIES;IMAGE_NUMBEROF_DIRECTORY_ENTRIES;IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER;DataDirector
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PE 文件格式 内容 详细