C2-2 PE文件格式之二_第1页
C2-2 PE文件格式之二_第2页
C2-2 PE文件格式之二_第3页
C2-2 PE文件格式之二_第4页
C2-2 PE文件格式之二_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件安全软件安全 C2-2 PE文件格式1本讲的内容提纲本讲的内容提纲1PE文件及其表现形式文件及其表现形式2PE文件格式与恶意软件的关系文件格式与恶意软件的关系3PE文件格式总体结构文件格式总体结构4代码节与数据节代码节与数据节5引入函数节:引入函数节:PE文件的引入函数机制文件的引入函数机制6引出函数节:引出函数节:DLL文件的函数引出机制文件的函数引出机制25引入函数节引入函数节o 这个节一般名为这个节一般名为.rdata。n引入函数:是被程序调用但其执行代码又不在程序中的函数。引入函数:是被程序调用但其执行代码又不在程序中的函数。o这些函数位于一个或者多个这些函数位于一个或者多个DLL

2、中,中,在调用者程序中只保留了函数在调用者程序中只保留了函数信息,包括函数名及其驻留的信息,包括函数名及其驻留的DLL名等名等。o动态链接库:例如动态链接库:例如kernel32.dll、user32.dll、gdi32.dll等。等。3引入函数节原始数据引入函数节原始数据4引入函数节的属性引入函数节的属性55.1IMPORTDirectoryTableo 如何从如何从PE文件定位到引入目录表(文件定位到引入目录表(IDT)的起始位置?的起始位置?n PE可选文件头的可选文件头的DataDirectory。65.1 IMPORT Directory Tableo 引入目录表由一系列的引入目录表

3、由一系列的IMAGE_IMPORT_DESCRIPTOR结构组结构组成。成。n结构的数量取决于程序要使用的结构的数量取决于程序要使用的DLL文件的数量,每一个结文件的数量,每一个结构对应一个构对应一个DLL文件。文件。n在所有这些结构的最后,由一个内容全为在所有这些结构的最后,由一个内容全为0的的IMAGE_IMPORT_DESCRIPTOR结构作为结束。结构作为结束。7IMPORT Directory TableIMAGE_IMPORT_DESCRIPTOR结构IMAGE_IMPORT_DESCRIPTOR结构IMAGE_IMPORT_DESCRIPTOR结构8IMAGE_IMPORT_DE

4、SCRIPTOR结构IMAGE_IMPORT_DESCRIPTOR STRUCT union Characteristics dd ? OriginalFirstThunk dd ?/指向指向ImportNameTable(该该DLL中所有被引入函数的名字或序号信息中所有被引入函数的名字或序号信息)EndsTimeDateStamp dd ?ForwarderChain dd ?Name1 dd ?/dll文件名字符串的文件名字符串的RVAFirstThunk dd ?/指向指向ImportAddressTable表表IMAGE_IMPORT_DESCRIPTOR ENDS9OriginalF

5、irstThunk和FirstThunko 都指向一个包含一系列都指向一个包含一系列IMAGE_THUNK_DATA结结构的数组。构的数组。n每个每个IMAGE_THUNK_DATA结构定义了一个导入函数的结构定义了一个导入函数的信息信息,实际为一个双字实际为一个双字,不同时刻可能代表不同含义,不同时刻可能代表不同含义。n以一个内容为以一个内容为0的的IMAGE_THUNK_DATA结构作为结束。结构作为结束。OriginalFirstThunk指向的数据FirstThunk指向的数据10引入目录表(引入目录表(IDT)在文件中的指向)在文件中的指向IMAGE_IMPORT_DESCRIPTO

6、R IMAGE_IMPORT_BY_NAME Original First Thunk TimeDatestamp ForwardChain Name FirstThunk IMAGE_THUNK_DATA IMAGE_THUNK_DATA 01 函数 1 23 函数 2 IMAGE_THUNK_DATA IMAGE_THUNK_DATA KERNEL32.DLL 11IMAGE_THUNK_DATA结构o一个一个IMAGE_THUNK_DATA结构结构实际上就是一个双字,它在不同时刻有实际上就是一个双字,它在不同时刻有不同的含义。不同的含义。IMAGE_THUNK_DATASTRUCunio

7、nu1ForwarderStringDWORD?/指向一个转向者字符串的指向一个转向者字符串的RVAFunctionDWORD?/被被引入引入的函数的内存地址的函数的内存地址OrdinalDWORD?/被被引引入的入的API的的函数序号函数序号AddressOfDataDWORD?/被引入的被引入的API的的Hint和函数名字符串信息和函数名字符串信息(IMAGE_IMPORT_BY_NAME结构)结构)endsIMAGE_THUNK_DATAENDS12IMPORT Directory Table135.2 IMPORT Name TableData最高位:最高位:为为0时,表示通过函数名引

8、入时,表示通过函数名引入,指向指向IMPORT Hints/Names为为1时,表示通过序号引入函数时,表示通过序号引入函数145.3 IMPORT Hints/Names &DLL names15IMPORT Hints/Names &DLL names分解说明oIMAGE_IMPORT_BY_NAME结构结构n8000为为Hints,ExitProcess为引入函数名为引入函数名n6202为为Hints,wsprintfA为引入函数名为引入函数名n9D01为为Hints,MessageBoxA为引入函数名为引入函数名oDLLnames字符串字符串nkernel32.dll为为dll文件名文

9、件名nuser32.dll为为dll文件名文件名165.4 IAT( IMPORT Address Table)o 引入地址表:引入地址表:DWORD数组数组可通过可选文件头中的可通过可选文件头中的DataDirectory的第的第13项定位项定位n在文件中时,其内容与在文件中时,其内容与ImportNameTable完全一样。完全一样。n在内存中时,每个双字中存放着对应引入函数的地址。在内存中时,每个双字中存放着对应引入函数的地址。17IAT( IMPORT Address Table)18在文件中的在文件中的IAT表表IMAGE_IMPORT_DESCRIPTOR IMAGE_IMPORT

10、_BY_NAME Original First Thunk TimeDatestamp ForwardChain Name FirstThunk IMAGE_THUNK_DATA IMAGE_THUNK_DATA 01 函数 1 23 函数 2 IMAGE_THUNK_DATA IMAGE_THUNK_DATA KERNEL32.DLL IAT表19在内存中的在内存中的IAT表表IMAGE_IMPORT_DESCRIPTOR IMAGE_IMPORT_BY_NAME Original First Thunk TimeDatestamp ForwardChain Name FirstThunk

11、IMAGE_THUNK_DATA IMAGE_THUNK_DATA 01 函数 1 23 函数 2 IMAGE_THUNK_DATA IMAGE_THUNK_DATA KERNEL32.DLL 函数 1 地址 函数 2 地址 IAT表20本讲的内容提纲1PE文件及其表现形式文件及其表现形式2PE文件格式与恶意软件的关系文件格式与恶意软件的关系3PE文件格式总体结构文件格式总体结构4代码节与数据节代码节与数据节5引入函数节:引入函数节:PE文件的引入函数机制文件的引入函数机制6引出函数节:引出函数节:DLL文件的函数引出机制文件的函数引出机制216 引出函数节o 引出函数节一般名为.edata,

12、这是本文件向其他程序提供调用函数的列表、函数所在的地址及具体代码实现。n 关键结构:引出目录表(导出表、输出表)22Kernel32.dll的引出函数节Image_EXPORT_DIRECTORY23如何定位Export Directory Table引出目录表?o DataDirectory第一项246.1 引出目录表Image_EXPORT_DIRECTORY25引出目录表结构解析1 (00H) Characteristics 4 一般为 0 2 (04H) TimeDateStamp 4 文件生成时间 3 (08H) MajorVersion 2 主版本号 4 (0AH) MinorVe

13、rsion 2 次版本号 5 (0CH) Name 4 指向指向DLL的名字的名字 6 (10H) Base 4 开始的序列号开始的序列号 7 (14H) NumberOfFunctions 4 AddressOfFunctions数组的项数数组的项数 8 (18H) NumberOfNames 4 AddressOfNames数组的项数数组的项数 9 (1CH) AddressOfFunctions 4 指向指向“函数地址函数地址”数组导出地址表数组导出地址表 10 (20H) AddressOfNames 4 指向指向“函数名所在地址函数名所在地址”数组函数名地址表数组函数名地址表 11

14、(24H) AddressOfNameOrdinals 4 指向指向“函数索引序列号函数索引序列号”数组函数序号表数组函数序号表 266.2导出地址表导出地址表EXPORT ADDRESS Table27Dword的两种可能含义o dwExportRVAn 指向导出地址o dwForwarderRVAn 指向另外一个DLL中的某个API函数名。n举例:Kernel32.AddVectoredExceptionHandleroNTDLL.RtlAddVectoredExceptionHandler286.3导出名字表导出名字表-EXPORT Name Table296.4 导出序号表EXPORT Oridinal Table

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论