PE文件结构解析PPT教学课件

上传人:日度 文档编号:133587416 上传时间:2020-05-28 格式:PPTX 页数:75 大小:2.61MB
返回 下载 相关 举报
PE文件结构解析PPT教学课件_第1页
第1页 / 共75页
PE文件结构解析PPT教学课件_第2页
第2页 / 共75页
PE文件结构解析PPT教学课件_第3页
第3页 / 共75页
PE文件结构解析PPT教学课件_第4页
第4页 / 共75页
PE文件结构解析PPT教学课件_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《PE文件结构解析PPT教学课件》由会员分享,可在线阅读,更多相关《PE文件结构解析PPT教学课件(75页珍藏版)》请在金锄头文库上搜索。

1、病毒原理及防范 PE型病毒 1 通过一个实例改变程序的执行流程 从而加深大家对PE文件格式的理解 深度解析PE文件格式 Winhex LordPE OllyICE 工具 2 PE文件结构 portableexecutable可移植可执行 跨Win32平台的文件格式 所有Win32执行体 exe dll kernelmodedrivers 3 本讲的内容提纲 1 PE文件格式总体结构2 MS DOSMZ文件头 DOSStub3 PE文件头4 节表5 节 4 5 hello 2 5 exe 6 PE文件格式总体结构 PE00 7 2020年5月28日 第8页 MSDOSHeader 所有MS DO

2、S兼容的可执行文件都将这个值设为0 x5A4D MZ 4字节文件偏移地址定位PE头部 MS DOSMZheader MS DOS头部占据了PE文件的头64个字节 4 16 64 USHORTe magic 魔数 MZMZ文件格式创始人 微软资深工程师MarkZbikowski的缩写LONGe lfanew e lfanew成员用于定位PE头 该字段位于3CH处 该位置给出了PE文件头部的开始位置 在本例中 PE文件头部开始位置为0B0H 9 10 字串 PE 0 0 Signature一dword类型 值为50h 45h 00h 00h PE 0 0 本域为PE标记 我们可以此识别给定文件是否

3、为有效PE文件 这个字串在文件中的位置 e lfanew 可以在DOS程序头中找到它的指针 它占用四个字节 位于文件开始偏移3CH字节中 11 魔术数字 定位PE头部 PE文件标志 PE 0 0 PE00 魔术数字 魔术数字 魔术数字 12 映像文件头 0 x14 该结构域包含了关于PE文件物理分布的信息 比如节数目 文件执行机器等 它实际上是结构IMAGE FILE HEADER的简称 13 2020年5月28日 第14页 PE头部1 映像文件头 可选映像头 P80 15 可选映像头中的一些关键字段1 16 可选映像头中的一些关键字段2 17 RVA RelativeVirtualAddre

4、ss 表示相对虚拟地址 它是相对内存中ImageBase的偏移位置 VA VirtualAddress 表示虚拟地址 即装载到内存中之后的位置 VA ImageBase RVA 举例说明 如果PE文件装入内存空间的400000h处 且进程从虚拟地址401000h开始执行 我们可以说进程执行起始地址在RVA1000h 每个RVA都是相对于模块的起始VA的 几个常用术语 18 几个常用术语 对齐内存中节对齐的粒度文件中节对齐的粒度问题1 桶的容量为100升 现有367升水 请问需要使用多少个桶 问题2 代码节的代码实际长度为0 x46字节 文件中节对齐粒度为0 x200 内存中节对齐粒度为0 x1

5、000字节 请问代码节在文件和内存中分别占用多少字节 为什么PE文件中有很多 00 字节 19 20 DataDirectory数据目录 一个IMAGE DATA DIRECTORY数组 里面放的是这个可执行文件的一些重要部分的RVA和尺寸 目的是使可执行文件的装入更快 数组的项数由上一个域给出 IMAGE DATA DIRECTORY包含有两个域 如下 IMAGE DATA DIRECTORYVitualAddressDD SizeDD IMAGE DATA DIRECTORYENDS 21 22 3 4hello 2 5 exe的IAT与引入表 23 节表 节表其实就是紧挨着PEheade

6、r的一结构数组 该数组成员的数目由Fileheader IMAGE FILE HEADER 结构中NumberOfSections域的域值来决定 节表结构又命名为IMAGE SECTION HEADER 每个结构占用28H 结构中放的是一个节的信息 如名字 地址 长度 属性等 24 2020年5月28日 第25页 节表 SectionAlignment FileAlignment 26 2020年5月28日 第27页 如 80000000H就表示这段内存是可写的 40000000H就表示这段内存是可读的一个节可包含多个属性 对应位为1表示有此属性如果期望一个节的数据可读可写 则它的属性代码应该

7、是 节的属性 节的属性代表了该节所在内存区块的权限 其中每一位都代表了一种权限或属性的启开和关闭 属性为 60000020H 请问是什么节 属性为 C0000040H 请问是什么节 请问病毒代码会为自己设置什么样的属性值 Question 28 2020年5月28日 第29页 PE装载器的工作流程 装载器如何把一个节映射到内存中 获取文件节的数目 NumberOfSections 定位节表 SizeOfHeaders 获得该节在磁盘上的存储位置及大小 PointerToRawData SizeOfRawData 把该节映射进内存 VirtualAddress ImageBase 设置该节的属性

8、 Characteristics 节 节 Section 跟在节表之后 一般PE文件都有几个 节 比较常见的有 代码节已初始化的数据节未初始化的数据节引入函数节引出函数节资源节 30 代码节 31 代码节 代码节一般名为 text或CODE 该节含有程序的可执行代码 每个PE文件应该都有代码节 32 33 已初始化的数据节 这个节一般取名为 data或DATA已初始化的数据节中放的是在编译时刻就已确定的数据 如HelloWorld中的字符串 HelloWorld 34 data节 35 未初始化的数据节 这个节的名称一般叫 bbs 这个节里放有未初始化的全局变量和静态变量 例如 statici

9、ntk 该节的 PointerToRawData 为0 表明其内容不在文件内 特征位 IMAGE SCN CNT UNINITIALIZED DATA 指明所有内容必须在加载时间置0 这意味着有节头 但没有节在文件内 该节被加载器创建 并且包含全0字节 其长度是 SizeOfUninitializedData 典型名字如 bss BSS 36 引入函数节 这个节一般名为 rdata 也叫引入函数节 一个引入函数是被某模块调用的但又不在调用者模块中的函数它可以用来从其它 系统或第三方写的 DLL中引入函数 例如user32 dll gdi32 dll等 37 38 39 IAT IMPORTAd

10、dressTable 一系列DWORD的数组在文件中时 每个双字中存放着对应引入函数的函数名字符串的RVA在内存中时 每个双字中存放着对应引入函数的地址 请问 ExitProcess函数的地址可能在不同的操作系统中各不相同 但为什么我们写的程序可以在不同的系统中正常运行 40 IAT IMPORTAddressTable 41 IMPORTDirectoryTable 核心 输入目录是一个IMAGE IMPORT DESCRIPTORs数组 每个DLL都使用一个元素 该列表中止于一个全0的数组元素 一个IMAGE IMPORT DESCRIPTOR是一个具有如下元素的结构 IMAGE IMPO

11、RT DESCRIPTORSTRUCTunionCharacteristicsdd OriginalFirstThunkdd 指向引入函数名列表或序号列表EndsTimeDateStampdd ForwarderChaindd Name1dd 指向dll函数名FirstThunkdd 指向IAT表IMAGE IMPORT DESCRIPTORENDS 42 IMPORTDirectoryTable 43 IMPORTNameTable Data最高位 为1时 表示通过序号引入函数为0时 表示通过函数名引入 44 IMPORTHints Names DLLnames 45 IMPORTHints

12、 Names DLLnames分解说明 kernel32 dll为dll文件名8000为Hints ExitProcess为引入函数名user32 dll为dll文件名6202为Hints wsprintfA为引入函数名9D01为Hints MessageBoxA为引入函数名 46 在文件中的引入表 47 在内存中的引入表 48 2020年5月28日 第49页 2020年5月28日 第50页 什么是引入函数 这些函数一般从哪里引入 为什么要设计引入函数节 目的何在 复习 51 引出函数节 引出函数节一般名为 edata 这是本文件向其他程序提供调用函数的列表所在的 索引 及具体代码实现 这个节

13、一般用在DLL中 EXE也可以有这个节 但通常很少使用 我们主要分析其 索引 部分 通过该 索引 可以找到对应函数的具体地址 52 引出函数节 53 Kernel32 dll的引出函数节 54 55 寻找ExitProcess地址 首先从AddressOfNames指向的指针数组中找到 ExitProcess 字符串 并记下该数组序号x然后从AddressofNameOrinals指向的数组中 定位第x项成员 得到一个序号yy为ExitProcess函数地址在AddressOfFunction中的索引号 从AddressOfFunction指向的数组中定位第y项 获得ExitProcess的R

14、VA函数地址 56 1 寻找ExitProcess地址 首先搜索NameTable x x 00B7 57 2 然后从AddressofNameOrinals指向的数组中 定位第x项成员 获得y 00B6 58 3 从AddressTable获取ExitProcess的函数地址 RVA 001CDDA y 00B6 为何这里是00B7项 PEView定位数组成员从1开始 而不是0 59 获取的ExitProcess地址是否正确 60 2020年5月28日 第61页 构建PE中的引入信息 PE加载器是如何正确的填充了FirstThunk指向的函数地址 2020年5月28日 第62页 对于每个DL

15、L的IMAGE IMPORT DESCRIPTOR 1 通过OriginalFirstThunk指向的INT得到函数名列表 2 对每个函数名 从DLLEXPORT匹配名称 查得地址3 把函数地址填到FirstThunk对应的字段 2020年5月28日 第63页 首先打开一个名为example exe的程序 PE文件 实验后的效果test exe 实例 如何改变程序 exe 的执行流程 64 Winhex是一款以16进制编辑器为核心 主要用于各种文件操作的高级工具 LordPE 是一款功能强大的PE文件分析 修改 脱壳软件 OllyICE反汇编工具 主要用于动态追踪 调试 逆向等领域 Winhe

16、x 需要的工具 LordPE OllyICE 65 最后用LordPE修改AddressOfEntryPoint 使其指向新加入的节 用OllyICE对新加入的节添加弹出对话框的代码 通过Winhex修改文件大小 通过LordPE加入一个新节 并修改NumberOfSection 1 用LordPE查看example exe相关信息 设计思路 66 用LordPE打开example exe 67 SectionAlignment FileAlignment 68 添加一个新节 69 节的数目 70 为什么报错 71 添加的节超出的文件的范围 必须用Winhex加大节 增加节的字节数 具体操作 Winhex应用 72 到00404000h处添加代码push0 逆序压栈push00404030 标题push00404044 提示信息push0callMessageBoxA 调用Messagebox函数jmp00401000 跳转到修改前程序的入口地址 用OllyICE对新加的节添加代码 73 通过本次课学习 希望大家加深对PE文件格式的理解 Winhex LordPE OllyICE实用性

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号