PE知识复习之PE的两种状态

一丶熟悉PE的整体结构

从下面依次网上看.可以得出PE结构

其中DOS头有DOS头结构 也就是 IMAGE_DOS_HEADER

关于结构体的各项属性.前边已经写过了.本系列博客就是加深PE印象.理解复杂的原理.

IMAGE_DOS_HEADER 大小 64个字节    十六进制 0x40字节

IMAGE_FILE_HEADER 大小 20个字节     十六进制 0x14字节

IAMGE_OPTIONAL_HEADER 224个字节 十六进制  0xE0

IMAGE_SECTION_HEADER  40个字节     十六进制  0x28

二丶学习DOS头

根据上面得到DOS头所占用大小是0x40. 也就是说一个按照16进制为一行的PE文件.4行正好就是一个DOS头大小.

例如:  使用Winhex查看.

DOS结构体重要的成员就两个.

1.MZ头

2.指向PE偏移.

MZ头就是标出来的 4D 5A 大小是两个字节. 操作系统会以检查这个标识.判断是否是PE文件.

PE偏移 0x00000138  大小是4个字节.指向PE头. NT头中的PE标识.操作系统不光检查MZ 也检查PE.

三丶DOS stub

Dos stub 大小是不确定的,他的大小是 PE头减掉 DOS头大小.其中成员都是Dos stub.

四丶确定文件头

根据我们文件头大小. 0x14 大小.那么PE后面就是文件头

五丶确定扩展头

我们的扩展头很大.32位64不一样.我们文件头下面就是这个扩展头.

注意,我们这个头的大小也在文件头中存储着. 我们可以更改的.如果更改.那么我们的扩展头就要更改.

例如文件头中存储着扩展头大小

而文件头下面的这些成员都是扩展头

六丶节表

节表是很重要的.我们真正的数据就是存在节表里面.

节表大小 十进制 40个字节,十六进制 0x28

可以看出节表大小. 里面第一个是text节.第二个是rdata节...

在我们的扩展头中.有一个成员是记录着 DOS头 + NT头(文件+扩展 在一起称为NT)  + 节表的大小. 按照文件对齐存放着.

sizeofHeaders 按照文件对齐.存储着 头+ 节表的大小.

fileAlignment 是扩展头中的文件对齐值.

具体属性后面会详解.

七丶节数据

我们的节表存放着节数据的信息.比如节在哪里开始.数据在哪里存放. 而我们的 头+ 节表 按照文件对齐过后.下面就是节数据了.

例如:

填写AAAA的地方是对其后没有使用的.所以我们如果熟悉PE可以添加任何成员进去.

八丶PE中的两种状态

根据上面简单了介绍了一下PE的存储结构.也知道了节数据跟节数据之间.都是根据文件对齐存放的.

但是我们的PE是可以运行的.(exe. dll也是.sys也是...这里指EXE) 所以在内存中状态也会改变.也就是偏移会改变.

例如下图:

在文件中我们的对齐是按照 0x200存放的. 而在内存中就是按照0x1000.假设是1000. 多余的地方补0

我们 的DOS头 + NT头 + 节表.按照文件对齐之后存放着. 节的数据是从400开始.也就是上图.

但是在内存中就不一样了. 如果按照0x1000对齐.那么在内存中就是1000位置开始是节数据了.

首先内存中的位置不一样

PE中 DOS头 + NT头 + 节表. 不管内存中还是文件中成员都是一样的.而因为对齐值不同.节数据开始位置也不同.

因为一个在文件中存放.一个在内存中展开.

比如我们在文件中 偏移 0x400位置.是节数据.在内存中就不会有了.

如下图所示:

因为内存是按照0x1000进行对齐的 对齐方式0x1000也会有成员存储着.下面几讲复习的时候会讲到.

所以在内存中1000偏移位置才是节数据.如下图

九丶总结PE中的两种状态.

PE分为文件状态.跟内存状态.

文件状态下. 根据扩展头下面的文件对齐值. 以及记录对其头的大小进行存放的.

内存状态下.根据扩展头中内存对齐值.以及对其头大小进行存放的.

比如:

  文件对齐值为0x200  DOS头 + NT头 + 节表 = 0x301大小. 但是文件对齐值是200.比如要整除200. 所以 对齐头打下不是0x301. 而是 0x400. 也就是0x400位置存放的是节数据.

内存同上.只不过对齐值不同.

PE知识复习之PE的两种状态的更多相关文章

  1. PE知识复习之PE的导入表

    PE知识复习之PE的导入表 一丶简介 上一讲讲解了导出表. 也就是一个PE文件给别人使用的时候.导出的函数  函数的地址 函数名称 序号 等等. 一个进程是一组PE文件构成的.  PE文件需要依赖那些 ...

  2. PE知识复习之PE的RVA与FOA的转换

    PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...

  3. PE知识复习之PE的节表

    PE知识复习之PE的节表 一丶节表信息,PE两种状态.以及重要两个成员解析. 确定节表位置: DOS + NT头下面就是节表. 确定节表数量: 节表数量在文件头中存放着.可以准确知道节表有多少个. 节 ...

  4. PE知识复习之PE的绑定导入表

    PE知识复习之PE的绑定导入表 一丶简介 根据前几讲,我们已经熟悉了导入表结构.但是如果大家尝试过打印导入表的结构. INT IAT的时候. 会出现问题. PE在加载前 INT IAT表都指向一个名称 ...

  5. PE知识复习之PE的重定位表

    PE知识复习之PE的重定位表 一丶何为重定位 重定位的意思就是修正偏移的意思.  如一个地址位 0x401234 ,Imagebase = 0x400000 . 那么RVA就是 1234.  如果Im ...

  6. PE知识复习之PE的导出表

    PE知识复习之PE的导出表 一丶简介 在说明PE导出表之前.我们要理解.一个PE可执行程序.是由一个文件组成的吗. 答案: 不是.是由很多PE文件组成.DLL也是PE文件.如果我们PE文件运行.那么就 ...

  7. PE知识复习之PE文件空白区添加代码

    PE知识复习之PE文件空白区添加代码 一丶简介 根据上面所讲PE知识.我们已经可以实现我们的一点手段了.比如PE的入口点位置.改为我们的入口位置.并且填写我们的代码.这个就是空白区添加代码. 我们也可 ...

  8. PE知识复习之PE的各种头属性解析

    PE知识复习之PE的各种头属性解析 一丶DOS头结构体 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // M ...

  9. PE知识复习之PE合并节

    PE知识复习之PE合并节 一丶简介 根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数. 那么现在我们要合并一个节.以上一讲我们例 ...

随机推荐

  1. apache设置跨域请求

    <VirtualHost *:8888> DocumentRoot D:/xampp/htdocs/bss/ ServerName ims.drcloud.cn ErrorLog &quo ...

  2. Exp4 恶意代码分析 20164302 王一帆

    1.实践目标 1.1监控自己系统的运行状态,看有没有可疑的程序在运行. 1.2分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systra ...

  3. IOS8,IOS8.1等系统出现锁屏状态下WIFI断开问题的解决办法!

    网络设备:TP-Link 300M无线路由器.DLINK 300M无线路由器.HP 300M无线路由器.APPLE AirPort无线路由器 终端:iphone5S+IOS8.1 故障现象:除appl ...

  4. WebBrowser加载一个URL被多次调用DocumentCompleted 的问题解决方案<转>

    关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况. 1.Web ...

  5. 学习如何设置ssh安全只允许用户从指定的IP登陆

    参考原文链接:https://www.cnblogs.com/wuling129/p/5076081.html 因为在公司做项目时,员工的登录可能受到外界人的窃取,为了防止被攻击,设置系统只能允许用户 ...

  6. 《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)

    上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对 ...

  7. 真正的ddos防御之道,简单干脆有效!

    话说,30G 就各种发博客 BB,唉,坦白说 ,博客园团队真心没见过世面 来 各位 先看图 啥意思呢? 就是哥的 最高防御是 600G.  没错,基本对当时的游戏没啥大的影响,10秒内恢复. 因为时间 ...

  8. JUnit介绍(转)

    测试的重要性毋庸再说,但如何使测试更加准确和全面,并且独立于项目之外并且避免硬编码,JUnit给了我们一个很好的解决方案.一.引子    首先假设有一个项目类SimpleObject如下:    pu ...

  9. ES6的Module 的用法

    在vue-cli中遇到的模糊参考 https://www.cnblogs.com/ppJuan/p/7151000.html 解决问题: 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 Co ...

  10. Java和js操作json

    Js中 Json字符串转json对象 //将json格式的字符串转为json对象 var t = JSON.parse('{"name":123}'); alert(t.name) ...