查看: 192|回复: 0

[原创图文] 手写PE第六课 完善节区头并在区段中写入数据

[复制链接]
发表于 2020-5-7 21:30:08 | 显示全部楼层 |阅读模式

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  写入.rdata段节表:
  成员1,8个字节,表识该段的名称,我们这里是.rdata。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员2,4个字节,表示有效代码所占的字节数。我们不知道有多少个有效字节,这里有两种方法来填写这个值,第一就是填写整个段在内存中对齐后的大小10000h,第二就是打开1.exe做参考,我们用第二种方法写入52 00 00 00。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员3,4个字节,表示在.rdata段映射到内存中的起始地址,我们知道.rdata是紧跟.text段后的,.text段的起始地址为1000h大小为1000h,那么紧接着text段的.rdata端应该是1000h+1000h=2000h 也就是00 20 00 00”。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员4,4个字节,表示.rdata段在文件中所占的大小。依然按照对齐后的大小200h来填写,所以此值为“00 02 00 00”。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

   成员5,4个字节,表示.rdata段在文件中的起始地址,上面已经知道.text段的起始地
  址为400h大小为200h,那么他的值实际上也就是.text段的起始偏移地址+.text段的大小,此值为400h+200h=600h“00 06 00 00”。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员6,7,8,9,共占12个字节,都仅用于目标文件,我们这里统统填为零。
      

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  成员10,4个字节。包含标记以指示节属性,我们这里写入40 00 00 40

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  写入.data段节表:
  成员1,8个字节,表识该段的名称,我们这里是.data。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员2,4个字节,表示有效代码所占的字节数。我们放入的数据就是Hello Word共11
  个字节我们换为16进制为0B写入0B 00 00 00。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员3,4个字节,表示在.data段映射到内存中的起始地址,我们知道.data是紧跟.rdata段后的,.rdata段的起始地址为2000h大小为1000h,那么紧接着.rdata段的.data端应该是2000h+1000h=3000h 也就是00 30 00 00”。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

       成员4,4个字节,表示.data段在文件中所占的大小。依然按照对齐后的大小200h来填写,所以此值为“00 02 00 00”。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  成员5,4个字节,表示.data段在文件中的起始地址,上面已经知道.rdata段的起始地
  址为600h大小为200h,那么他的值实际上也就是.rdata段的起始偏移地址+.rdata段的大小,
  此值为600h+200h=800h“00 08 00 00”。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
成员6,7,8,9,均占12个字节,都仅用于目标文件,我们这里统统填为零。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
       成员10,4个字节。包含标记以指示节属性,我们这里写入C0 00 00 40

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  这样整个PE头就完成了,我们知道Pe头在文件中也是按照文件对齐粒度来对齐的,
  我们用c32看一下我们写入了多少个字节,一共写入了552个字节,换做16进制为228h
  照对齐粒度这样是不行的我们必须让他的大小为200h的整数倍即400h,那么我们要填充
  400h-228h=1D8个字节也就是472个字节。

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  现在整个PE头的大小为1024字节,正好是400H的倍数
  现在用0填充段内的数据
  PE头填充完毕后紧接着的就是各个段里的实际内容了,我们一一填充,大家是否记
  得刚才我们写入节表时每一个段在文件里的大小都为200h,那么我们填充.text段200h,
  .rdata段200h,.data段200h共200h+200h+200h=600h
  插入512字节(200H)的节数据

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据

  这就是text段

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  rdata和data段方法都是一样滴,这里不做演示
  由此整个PE文件部分就完成了,大家是不是有点等不及要去双击他了。哈哈,还早,还早。每一个段里面的数据我们还没有写入呢。
  先看一下data的文件起始偏移地址

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  在C32里面Ctrl+G,选择16进制,输入800,到达800H地址这个地方

手写PE第六课 完善节区头并在区段中写入数据

手写PE第六课 完善节区头并在区段中写入数据
  写入Hello Word 注意00结尾

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表