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

简介: 新增节添加代码【滴水逆向三期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中发出源代码供大家参考。

本篇文章为本人听课后写的随笔,完全展示我个人理解,如果有理解错误之处,希望大家指出,我会非常虚心地学习,希望我们能共同进步!

相关文章
|
存储 编译器 数据安全/隐私保护
移动导出表,移动重定位表【滴水逆向三期51笔记+作业源码】(上)
移动导出表,移动重定位表【滴水逆向三期51笔记+作业源码】
|
存储 安全 JavaScript
【XSS】XSS漏洞详细指南
【XSS】XSS漏洞详细指南
646 3
ly~
|
并行计算 算法 API
SDL 图形库优化对硬件要求有何变化
SDL(Simple DirectMedia Layer)图形库是一个跨平台的多媒体库,适用于多种操作系统和设备。优化后的SDL 2.0对硬件的要求有所提升,特别是显卡性能。优化包括提高渲染效率、利用硬件加速功能、支持高效解码算法等,以增强图形处理能力和流畅度。同时,优化后的SDL对输入设备的交互体验要求更高,需确保键盘、鼠标、触摸屏等设备的顺畅操作。尽管如此,SDL仍保持良好的兼容性,能在较低配置的硬件上运行,只是性能表现会有所差异。
ly~
840 4
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
127506 0
|
算法 Linux 调度
【进程调度】Linux内核的进程调度队列--runqueue
【进程调度】Linux内核的进程调度队列--runqueue
|
Windows
Windows在线安装QT5.15.2
最近在重新整理自己电脑的环境,所以需要重新安装一下QT,看自己没有发过相关的文章,又觉得这个可以水一篇文章,所以决定写一篇简单的安装教程
2177 0
EVE-NG的Windows客户端安装
EVE-NG提供Windows的客户端,集成了Wireshark、VNC、putty等软件,主要为完成配套EVE-NG的WEB浏览中的数据抓包等功能。 我的EVE-NG的Windows客户端安装包为EVE-NG-Win-Client-Pack.exe。
|
存储 机器学习/深度学习 缓存
【C++】deque的实现原理简单介绍
【C++】deque的实现原理简单介绍
|
Android开发
android通过代码判断手机是否root
只要/system/bin/su、/system/xbin/su这两个文件中有一个存在,就表明已经具有ROOT权限,如果两个都不存在,则不具有ROOT权限。   // 判断是否具有ROOT权限 public static boolean is_root(){ boo...
4820 0