思路:
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!

相关文章:

  • 2022-12-23
  • 2021-06-10
  • 2022-02-27
  • 2021-12-31
  • 2021-11-16
  • 2022-12-23
  • 2022-12-23
  • 2021-12-20
猜你喜欢
  • 2021-11-16
  • 2022-12-23
  • 2021-09-20
  • 2021-07-28
  • 2022-12-23
  • 2021-05-14
相关资源
相似解决方案