新增节添加代码【滴水逆向三期46笔记】

在之前的学习中,我们已经了解了在节空白区添加代码,但是有些情况节是没有空白区的,那么我们要怎么来添加我们的shellcode呢?我们可以通过新增节来添加shellcode:

一.新增节思路:

那么我们要怎么新增节呢?在这里给出基本思路:
我们要新增节,那么必须新增一个节表,我们该怎么新增一个节表?
首先,我们需要判断是否有足够的空间来新增节:
SizeOfHeaders-(DOS头大小+DOSstub大小+PE标记+标准PE头大小+可选PE头大小+所有节表大小)>=两个节表大小(80)
这里为什么要留出两个节大小呢?因为机器会做判断,在所有节结束后机器会判断后面40个字节数据是否为零,为零的话机器才会认为所有节结束。
那么如果这里剩余的大小不足两个节表大小怎么办呢?
如果不足两个节表大小,那么我们还能够通过以下的方法来让所有节表后空闲的大小够80个字节:
我们知道DOSstub中的数据都是垃圾数据,那么我们可以将DOSstub中的数据全部删除然后将PE标记,标准PE头,可选PE头全部前移(其他数据不要前移),移动到DOSstub的位置,然后修改DOS头中的e_lfanew字段,让他指向新的PE标记位置,这样在原有节表后就会空闲出大片区域供我们新增节。注意我们新增节后的40个数据应全为0.

二.新增节具体实现:

1.判断是否有足够的空闲区供我们新增节
2.新增节表
3.将新怎解表后的40个数据全改为0
4.修改NumberOfSection的大小(如果新增一个节的话就是+1)
5.修改SizeOfImage的大小
6.修改节表信息(name等)
7.最后记得修改节属性,如果是可以执行的shellcode,那么需要修改为可执行。
本篇文章介绍的是手动新增节,以后在写出新增节的程序时,我会在csdn中发出源代码供大家参考。
本篇文章为本人听课后写的随笔,完全展示我个人理解,如果有理解错误之处,希望大家指出,我会非常虚心地学习,希望我们能共同进步!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shad0w-2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值