鱼C论坛

 找回密码
 立即注册
查看: 4253|回复: 3

[学习笔记] 《解密系列-系统篇》第三讲:PE结构详解3

[复制链接]
发表于 2018-1-14 15:37:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-1-15 09:46 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、复习复习
(1)对于映射到内存中的PE文件各块之间的间隙:间隙的作用主要是对齐;在磁盘中一般是以200h(十六进制,也可以说是200字节)为一页对齐,而到内存中是要按CPU的方式对齐,CPU的对齐方式一般为1000h(十六进制,也可以说是1000个字节即4kb)

(2)IMAGE_DOS_HEADER结构体。
只要记住下面两个就行了。IMAGE_DOS_HEADER STRUCT
  1. {
  2. +0h        WORD       e_magic     // Magic DOS sigbature MZ(4Dh 5Ah)    DOS可执行文件标记(MZ为两个字节)
  3. +3ch        DWORD    e_lfanew    // Offset to start of PE header       指向PE文件头(里面装着PE文件头的偏移地址)
  4. }
复制代码

(3)为什么会有"DOS可执行文件标记"?因为为了兼容DOS系统(远古时代DOS系统还是很有用的)。
(4)上一讲中圆圈中的广告是什么?在DOS运行这个程序的时候,首先会进行一个DOS的可执行体,会先提示圆圈中内容。(它的修改不会对程序造成影响)

(5)IMAGE_NT_HEADER 结构
  1. IMAGE_NT_HEADERS STRUCT
  2. {
  3. +0h        DWORD                             Signature
  4. +4h        IMAGE_FILE_HEADER                 FileHeader
  5. +18h      IMAGE_OPTIONAL_HEADER32            OptionlHeader //可选择的32位文件头
  6. }IMAGE_NT_HEADERS ENDS
复制代码

1.Signature:如果是一个有效的PE文件里,Signature字段将被设置为00004550h,ASCII码字符是"PE00"。
2.IMAGE_FILE_HEADER也是结构体(所以就变成结构里面得结构了,具体情况看上一讲)
3.下面就讲:IMAGE_OPTIONAL_HEADER32            OptionlHeader //可选择的32位文件头

二、IMAGE_OPTIONAL_HEADER32结构 (在IMAGE_NT_HEADER 结构中(结构中的结构),表示可选择的32位文件头)
(1)PE可执行文件中接下来的224个字节组成了PE可选头部。虽然它的名字是“可选头部”,但是请确信:这个头部并非“可选”,而是“必需”的。
1.PNG 2.PNG

(2)重点摘要:(具体情况:http://bbs.fishc.com/home.php?mo ... ;do=blog&id=514

AddressOfEntryPoint字段,指出文件被执行时的入口地址,这是一个RVA地址(相对虚拟地址)。这个域表示应用程序入口点的位置。并且,对于系统黑客来说,这个位置就是导入地址表(IAT)的末尾。

ImageBase字段:进程映像地址空间中的首选基地址(文件的优先装入地址)。Windows NT的Microsoft Win32 SDK链接器将exe文件这个值默认设为0x00400000(而DLL默认为10000000h),但是你可以使用-BASE:linker开关改变这个值。(如果装入地址被占据,则由Windows装载器改架到其它地方,所以就需要进行重定位操作,影响效率。对于EXE文件因为它总是使用独立的虚拟地址空间,所以装入地址不可能被占用,而DLL文件则必须包含重定位信息了)

SectionAlignment字段:内存中的区块的对齐大小。Windows NT虚拟内存管理器规定,段对齐不能少于页尺寸(当前的x86平台是4096字节),并且必须是成倍的页尺寸。4096字节是x86链接器的默认值,但是它可以通过-ALIGN: linker开关来设置。 (32位位1000h,即4kb;64位为2000h,即8kb。而一般我们的程序兼容或者不兼容,就是因为这个对齐大小不一样)

FileAlignment字段:文件(磁盘)中的区块大小。映像文件首先装载的最小的信息块间隔。例如,链接器将一个段实体(段的原始数据)加零扩展为文件中最接近的FileAlignment边界。早先提及的2.39版链接器将映像文件以0x200字节的边界对齐,这个值可以被强制改为512到65535这么多。 (一般情况下32位为200h,即200个字节)

NumberOfRvaAndSizes字段。这个域标识了接下来的DataDirectory数组。请注意它被用来标识这个数组,而不是数组中的各个入口数字,这一点非常重要。(自Windows NT发布以来一直都是16)

IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]。
即DataDirectory字段
。数据目录表示文件中其它可执行信息重要组成部分的位置。它事实上就是一个由16个相同的IMAGE_DATA_DIRECTORY结构的数组组成(结构里面的结构的结构),位于可选头部结构的末尾。当前的PE文件格式定义了16种可能的数据目录,这之中的11种现在在使用中。
IMAGE_DATA_DIRECTORY结构的定义
  1. IMAGE_DATA_DIRECTORY STRUCT
  2. VirtualAddress DWORD?;        //数据的起始RVA
  3. isize DWORD?;                        //数据块的长度
  4. IMAGE_DATA_DIRECTORY ENDS
复制代码

数据目录列表的含义:
3.PNG 4.PNG 5.PNG


谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-26 12:37:17 | 显示全部楼层
感谢楼主的笔记,每次都看你的复习笔记,从小甲鱼的汇编开始,就一直看你的笔记,借你文章的话:“越努力,越幸运”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-6 08:55:57 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-8 16:56:34 | 显示全部楼层
楼主,数据目录表的含义咋加载不出来呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 11:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表