PE 扩大节

适用条件:有的时候空白区不够需要进行扩大节

以对最后一个节扩大0x1000为例子:

为什么要扩大最后一个节呢?如果扩大最后的一个节之前的话,那么相对于当前扩大的节后面也会相应的变化,节表中每个节数据的信息都要相对应的纠正,相对比较繁琐!

typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME]; //8个字节名字.自己可以起.编译器也可以给定.不重要.
    union {
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;           //节数据没有对齐后的大小.也就是没有对齐.节数据有多大.
    } Misc;
    DWORD   VirtualAddress;          //加载到内存中的第一个字节的地址.也就是虚拟地址.节在内存中哪里开始.内存中的VA + ImageBase 才是真正的节开始位置
    DWORD   SizeOfRawData;           //修改这个属性的值,即可扩大节.并且在PE文件中添加相应的0数据进行填充.
    DWORD   PointerToRawData;          //在文件中的偏移.是文件对齐成员倍数.
    DWORD   PointerToRelocations;           //一下都是调试相关.
    DWORD   PointerToLinenumbers;           //
    WORD    NumberOfRelocations;
    WORD    NumberOfLinenumbers;
    DWORD   Characteristics;          //节的属性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

扩大节其实很简单,修改节数据对齐后的大小就可以了,并且在PE文件中添加任意数据进行填充

步骤如下:

1、分配一块新的空间,大小为S

2、将最后一个节的SizeOfRawData和VirtualSize都改成N

N = (SizeOfRawData 或者 VirtualSize内存对齐后的值) + S

3、最后修改PE扩展头中的SizeofImage(内存PE镜像大小)



实现过程:

1、最后面插入0x1000字节大小,数据用0来填充

2、来到最后个节的节表部分,在该节中的virtualSize(内存中当前节没有对齐的实际大小)和 .SizeOfRawData(文件中当前节对齐的大小)二者中选最大的值,然后再最大的值上添加0x1000,两个都改为最大的值

3、最后来到PE扩展头中的SizeofImage(内存PE镜像大小)成员进行修改,先按照内存对齐进行存放 然后再加上0x1000大小

参考文章:https://www.cnblogs.com/iBinary/p/9735276.html

c++代码实现:https://www.cnblogs.com/wumac/p/5274559.html

有时间再看!

原文地址:https://www.cnblogs.com/zpchcbd/p/12319386.html

时间: 2024-07-29 20:03:44

PE 扩大节的相关文章

PE知识复习之PE扩大节

PE知识复习之PE扩大节 一丶为什么扩大节 上面我们讲了,空白区添加我们的代码.但是有的时候.我们的空白区不够了怎么办.所以需要进行扩大节. 扩大节其实很简单.修改节数据对齐后的大小即可. 并且在PE文件中添加0数据进行填充即可. 首先看一下我们的节表 typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //8个字节名字.自己可以起.编译器也可以给定.不重要. union { DWORD Physi

[DLL注入的方法]静态修改PE输入表法

1.三种DLL加载时机: 进程创建加载输入表中的DLL(静态输入) 通过调用LoadLibrary主动加载(动态加载) 系统预设加载 通过干预输入表处理过程加载目标dll 1.静态修改PE输入表法(测试程序 Notepad.exe) 准备工作:自行编写一个MsgDLL,到处一个函数Msg(); #include "stdafx.h" BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpRe

vmware vSphere 虚拟机扩容

环境: 虚拟机OS是Windows 2008 vSphere 版本信息: 原系统C盘太小,快撑满了,需要扩容. 步骤: 安全起见先将虚拟机关机再clone一份以防万一. 原大小: 再加100G 启动系统,进入系统后查看文件系统状态: 可以看到新加的100G空间在未分配栏: 系统分区后面还接着个分区,扩容迎按钮是灰的扩不了.看来只能进PE扩了. 用Linux系统盘重新引导,进入Linux环境使用工具dd将C盘clone到新创建的100G的新分区中,再使用windows 2008引导盘进到系统修复界

变形PE头添加节形式感染学习笔记

原文:http://www.pediy.com/kssd/index.html -- 病毒技术 -- 病毒知识 -- Anti Virus专题 1> 变形PE头的原理: 这里的变形PE头的思路是用的比较方便的方法,就是将IMAGE_DOS_HEADER 和 IMAGE_NT_HEADER 结构融合到一起.因为我们都知IMAGE_DOS_HEADER和IMAGE_NT_HEADER的结构成员很多我们是用不到的,所以我们可以按照相应的结构排列,把这些无用的结构成员,融合到一起后,替换成一些有用的成员

HDU 4612 Warm up(手动扩栈,求树上哪两个点的距离最远)

题目大意: 给你一个无向图,问加一条边之后最少还剩下几座桥. (注意重边处理) 分析:其实当我们把边双连通分量给求出来之后我们就能将连通块求出来,这样我们就可以重新构图.重新构造出来的图肯定是一颗树了, 那么问题就转化为求树的哪两个节点的距离最长.我们可以随便找一个点S开始BFS, BFS到这个点最远的那个点P,然后再从这个最远点P开始BFS,BFS到P最远的点E,  PE之间的距离就是这个图上最大的距离. 注:此题需要手动扩栈 #pragma comment(linker, "/STACK:1

Linux LVM学习总结——扩展卷组VG

Linux服务器由于应用变更或需求的缘故,有可能出现分区空间不足的情况,此时往往需要进行扩容(要增加分区的空间),而采用LVM的好处就是可以在不需停机的情况下可以方便地调整各个分区大小.如下所示,分区/u05由于备份集保留的时间调整,RMAN备份时出现空间不足的情况,如下所示, [[email protected] ~]# df -h Filesystem            Size  Used Avail Use% Mounted on /dev/mapper/VolGroup00-Log

[Linux]LVM扩展卷

LVM LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性.LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统.物理卷(physical volume)物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区

Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结

1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 5. 组合(Composition),而不是继承(inheritance) 2 6. Ocp原则开闭原则2 7. Plugin系统2 8. 流程扩展工作流系统,流程自定义2 9. Ui扩展 html53 10. 数据独立性3 11. 脚本与hotdeploy3 12. 表处理扩展if else (数据与数据处理相互分离)3 13. 系统被扩展的几种形式(方法级别,模块级别)3 1

CFT 1.3 PE IBM 服务器系统专用的PE工具

分享一个IBM 服务器专用的PE工具,此工具方便简洁,可用于IBM 企业级服务器系统备份还原. 有了CFT 1.3 PE  再也不愁服务器系统崩溃了..哈哈 简介: 1.CFT 是一个基于win7内核的WinPE : 2.CFT 已经添加了很多IBM的阵列卡驱动,所以直接启动就能认到很多服务器的硬盘: 3.如果木有认到你的服务器的硬盘,你可以: a.准备服务器阵列卡的win2008 32位驱动. b.在设备管理器里手工更新阵列卡驱动,或者试试桌面的工具:给PE加驱动1和给PE加驱动2. 4.忘了