思路:
1) 添加一个新的节(可以copy一份)
2) 在新增节后面 填充一个节大小的000
3) 修改PE头中节的数量
4) 修改sizeOfImage的大小
5) 再原有数据的最后,新增一个节的数据(内存对齐的整数倍).
6)修正新增节表的属性
重点关注的几个结构:
1.PE标准头的NumberOfSections
2.节区头的VirtualAddress、SizeOfRawData、VirtualSize、PointerToRawData(这些是用来确定在新增节区在文件和内存中的位置,需要考虑偏移量)
3.可选头的SizeOfImage
操作过程(随便找一个程序为例):
现在有5个节区,我们目的是向其中添加一个同样的.data2节区
首先修改FileHeader->NumberOfSections结构为6
最后一个节区头的后面拷贝一个和.data相同的结构,执行一下,发现添加上了
先看一下节表的结构
VirtualAddress = 上一个节表的VirtualAddress+上一个节表的VirtualSize = 2333H对齐为3000H+47000H = 4A000H
PointerToRawData = 上一个节表的PointerToRawData + 上一个节表的SizeOfRawData = 43400H + 2400H = 45800H
上一节表:
最后拷贝.data的数据构建新的节:再次执行一下
最后一步,修改OptionHeader->SizeOfImage。原来为4A000H,现在的Image = 最后节区的VirtualAddress + 最后节区的VirtualSIze = 4A000H + 1BE0对齐为2000H = 4C000H,修改后保存。载入OD观察是否成功添加。
OK!
相关文章: