首先先了解一下节表

如下图,打开一个exe文件,我们可以看到有多个节表。
在这里插入图片描述
为什么要有这么多节表呢?每个节表都有自己的任务与功能,所以我们可以手动添加一个节来实现我们自己想实现的功能。


然后我们在了解一下节表的主要成员:

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;

重点了解以下成员

Name[IMAGE_SIZEOF_SHORT_NAME]:我们可以随便起一个自己喜欢的名字 VirtualSize:是在内存中的真实大小
VirtualAddress:是加载到内存中第一个字节的偏移地址 SizeOfRawData:该节在文件对齐后的大小


了解过节表以后,我们再来整理一下操作步骤。

[TOC]

1.判断是否有空间新增一个节。

使用工具打开一个exe文件,我们只需要40个字节,所以空间足够
在这里插入图片描述


2.在节表的最后一个成员后新增一个成员。

添加的新成员我们可以选择直接复制text节表,因为text作为代码段,可读可写可执行,非常完美。如下图,我们已经添加好了数据。
在这里插入图片描述


3.修改节的数量。

标准pe头中有一个字段为 NumberOfSections,该字段控制文件中节的数量
,所以我们讲该字段的值加一,如下图,原来为08,我们修改为09

在这里插入图片描述


4.修改sizeOfImage的大小

修改前:
可选头中:SizeofImage :000AC000
在这里插入图片描述

我们新增了0x1000节数据大小.那么我们的镜像大小也要加0x1000大小进行映射.注意.要按照内存对齐。
我们的原镜像大小以及按照内存对齐的方式存放了. 就是0xAC000. 那么我们加了0x1000的数据就是 0x1E000大小.我们修改为0xAD000。


5.再原有数据的最后,新增一个节的数据(内存对齐的整数倍)

插入了0x1000字节,填充为0


6.添加新增节表的属性

想要添加一个节表,首先我们需要为这个节表指明内存中开始展开的位置,文件中展开的位置,以及节表的大小。
这三个属性的字段分别是VirtualAddress、PointerToRawData、SizeOfRawData。然后我们在pe中把他们找出来并修改。
例如上一个节表对齐后的展开位置为 0xAc000 那么我们就修改为 0xAd000
修改前:
在这里插入图片描述

修改后:

在这里插入图片描述

节.sizeofRawData修改
这个成员就是节数据按照文件对齐后的大小.取决于我们给这个节添加多少数据,这里我们之前添加了0x1000个字节。
  这里修改为1000
  
在这里插入图片描述

节.PointerRawToData 文件偏移修改
最后修改的就是节在文件中哪里展开的. 这个我们需要看上一个节的文件偏移.以及节数据大小. 算出来的.
例如:
新增节的上一个节,偏移位置为1000,节数据在文件中对齐后的尺寸为100,那么1000-1100都是上一个节的数据

.tttt上一个节在文件中的偏移为8200,大小为600;
 那么tttt节的文件偏移就为8800
 在这里插入图片描述

节.VirtualSize修改
申请的新节空间大小,1000

节.PointerRawToData 文件偏移修改
我们新增节一般都是要求可读可写可执行的,所以这里直接修改为60000020。

实验结果:
新增节后的文件正常执行

在这里插入图片描述

部分内容转载于:https://blog.csdn.net/weixin_43742894/article/details/115376779