PE知识复习之PE合并节

一丶简介

   根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数.

那么现在我们要合并一个节.以上一讲我们例子讲解.

  以前我们讲过PE扩大一个节怎么做. 合并节跟扩大节类似. 只不过一个是扩大. 一个是合并了.

合并节的步骤.

  1.修改文件头节表个数

  2.修改节表中的属性

    节.sIzeofRawData 节数据对齐后的大小.

  3.修改扩展头中PE镜像大小 SizeofImage

  4.被合并的节以0填充.

二丶实战合并一个节

  1.修改文件头中节表个数

     为什么修改应该不用多说了. 我们既然合并. 那么节就要少一个.那么自然就进行修改了.

原节表有8个.我们修改为7即可.

  2.修改节.SizeofRawData 节数据对齐后的大小.

我们把最后的AAAA节.合并到上一个节.rsrc中.

  .rsrc.SizeofRawData = .文件对齐(rsrc.SizeofRawData + AAA.节数据的大小)

修改这个属性就按照上面的公式修改就行.原来节数据大小.加上要被合并的节的数据大小.按照文件对齐存放即可.

  例如下图:

原来节数据对齐后的大小是0x600. AAAA节数据对齐后的大小是0x1000.那么修改.rsrc.SizeofRawData 为 0x1600即可.

 

  最后一个节表以0填充即可.

  3.修改扩展头的PE镜像大小. SizeofImage

 

我们上一讲新增了一个节.所以映像大小为0x1E000. 所以现在要进行修改.合并了0x1000数据大小.那么改为0x1D000即可.

  4.测试程序

 

程序可以直接运行.那么内存中看看节展开位置有没有我们的合并节的节数据.

 

内存中0x41c000位置.就是节展开位置.我们没有合并之前.并没有我们的FFFF填充的数据.合并之后.出现了数据.说明已经成功合并了这个节了.

也相当于对这个节进行扩大了.

原文地址:https://www.cnblogs.com/gd-luojialin/p/11306257.html