当前位置: 首页 > news >正文

Windows PE文件内未用空间学习

    未用空间,是指编译好的PE文件,整个可执行文件内,有一些空间是本exe没有用到的。有几种情况;
一种是未用的字段,PE格式定义了各种结构体,其中一些结构体的一些字段,是保留的,或者是赋什么值都不影响;
一种是大小不固定的数据块;还不太理解这种;
一种是操作系统对PE文件的强制对齐,为对齐而补足的0;
在未用空间插入一些构造好的代码,可以实现对程序打补丁的功能,或者制作病毒。对于打补丁来说,这就是可利用空间。

1 未用的字段

    根据资料,PE文件的DOS头,除了e_magic和e_lfanew字段,有54字节的未用空间。
看一下为什么会有这54字节;
DOS头定义如下,

//大小为: 0x40(64)字节#define IMAGE_DOS_SIGNATURE                 0x5A4D      // MZtypedef struct _IMAGE_DOS_HEADER {      // DOS .EXE headerWORD   e_magic;                     // MZ标记 0x5a4dWORD   e_cblp;                      // 最后(部分)页中的字节数WORD   e_cp;                        // 文件中的全部和部分页数WORD   e_crlc;                      // 重定位表中的指针数WORD   e_cparhdr;                   // 头部尺寸以段落为单位WORD   e_minalloc;                  // 所需的最小附加段WORD   e_maxalloc;                  // 所需的最大附加段WORD   e_ss;                        // 初始的SS值(相对偏移量)WORD   e_sp;                        // 初始的SP值WORD   e_csum;                      // 补码校验值WORD   e_ip;                        // 初始的IP值WORD   e_cs;                        // 初始的SS值WORD   e_lfarlc;                    // 重定位表的字节偏移量WORD   e_ovno;                      // 覆盖号WORD   e_res[4];                    // 保留字WORD   e_oemid;                     // OEM标识符(相对m_oeminfo)WORD   e_oeminfo;                   // OEM信息WORD   e_res2[10];                  // 保留字LONG   e_lfanew;                    // NT头(PE标记)相对于文件的偏移地址} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

e_magic是可执行文件标记,e_lfanew字段是用来找NT头的,这两个必须有,其他都是没用到的。

拿工具观察一下,

只有Signature和Offset to Nex EXE Header是有用的;有54个字节不在意放什么; 

其他还有,
标准PE头有12个字节的未用空间;
扩展PE头有 14+8+8+2+4+4 字节的未用空间;

有时间继续;

http://www.lryc.cn/news/595781.html

相关文章:

  • 17-VRRP
  • 基于 Vue,SPringBoot开发的新能源充电桩的系统
  • ospf技术
  • 【机器学习】第四章 回归算法
  • 高层功能架构详解 - openExo
  • Flutter基础(前端教程①⑧-Text文本-Icon图标-Image图片)
  • C语言符号可见性控制与工程实践——深入理解 __attribute__((visibility)) 和 -fvisibility=hidden
  • 跨服务调用中,直接使用 MDC的上下文无法自动传递
  • Oracle 12c 创建数据库初级教程
  • 从FDTD仿真到光学神经网络:机器学习在光子器件设计中的前沿应用工坊
  • 从RAG到Agentic RAG
  • 无人机吊舱与遥控器匹配技术解析
  • 一文读懂深度模型优化器,掌握炼丹工具
  • MySQL 学习二 MVCC
  • IBGP互联(ensp)
  • 【nginx】隐藏服务器指纹:Nginx隐藏版本号配置修改与重启全攻略
  • Unity中,Panel和 Canvas的区别
  • 数字签名(Digital Signature)
  • VR技术在元宇宙游戏中的作用及发展前景深度分析
  • A316-V71-Game-V1:虚拟7.1游戏声卡评估板技术解析
  • Leetcode—692. 前K个高频单词【中等】(桶排序)
  • PyTorch武侠演义 第一卷:初入江湖 第4章:损失玉佩的评分风波
  • 【AI学习从零至壹】Transformer
  • 02-netty基础-java四种IO模型
  • Java设计模式揭秘:深入理解模板方法模式
  • 详解FreeRTOS开发过程(二)-- 列表和列表项
  • 【前端】ikun-pptx编辑器前瞻问题二: pptx的压缩包结构,以及xml正文树及对应元素介绍
  • 机器学习模型视角下的市场联动机制:美元美债与黄金3400价格的VAR向量自回归分析
  • 面向对象高级:static
  • linux c语言进阶 - 进程,通信方式