PE文件(六)新增节-添加代码作业

一.手动新增节添加代码

1.当预备条件都满足,节表结尾没有相关数据时:

现在我们将ipmsg.exe用winhex打开,在节的最后新增一个节用于存放我们要增加的数据

注意:飞鸽的文件对齐和内存对齐是一致的

先判断节表末尾到第一个节之间是否够80字节:可选PE头中SizeOfHeaders值为0x1000,标准PE头中SizeOfOptionalHeader获取可选pe头的大小值为0xE0,NumberOfSections获取节的数量为0x4,DOS头中e_lfanew获取NT的地址为0xE0,PE签名大小0x04,标准PE头大小0x14,通过0x1000 - (0xE0 + 0x4 + 0x14 + 0xE0 + 0x4 * 0x28)= 0xD88获取节表到节之间的空白区大小,因为0xD88 > 0x50,所以可以存下新增节表。在实际操作中,我们肉眼便可判断空间是否足够

我们将.text节表(注意是第一个节表)的40字节复制一份到节表末尾地址0x278:选中.text40字节复制,再选中0x278到后面40字节数据粘贴,这样我们就把.text节表内容复制一份添加到节表末尾作为新节表的40字节

注:winhex中write是覆盖选中数据,paste是插入

接着为了满足Windows格式要求将新增节后面的40字节数据改为0

修改PE标准头中的NumberOfSections值为4 + 1 = 5

先看一下文件对齐和内存对齐都是0x1000,所以我们新增的节大小为了方便后面修改可以设定为0x1000字节大小,这已经足够存放我们想要添加的代码了。(如果文件对齐和内存对齐不一样,那可以选择两个的最小公倍数,方便后面的修改)

接着修改可选PE头中SizeOfImage值:由于我们想要新增节的大小为0x1000(考虑了内存对齐),所以将SizeOfImage + 0x1000即可,0x3D000 + 0x1000 = 0x3E000

然后修改节表中的字段:

Name:名字改为.tttt 2E 74 74 74 74

Misc.VirtualSize:直接写0x1000,即内存中对齐前的长度

VirtualAddress:0x30000 + 0x4000 + 0x4000 + 0x4000 + 0x4000 = 0x3D000 第一个节的VirtualAddress时0x300000,一共四个节,每个节对齐后是0x4000大小,加起来就是0xD0000

SizeOfRawData:0x1000

PointerToRawData:0x2C000 + 0xD000 = 0x39000

属性值不用变,因为复制的.text节表已经满足了可执行的属性

现在我们要在文件第四个节末添加新节,选中节末最后一个数据,右键–edit–paste zero bytes–输入新节的大小十进制大小4096,将其初始化为0

新增节后我们将要添加的代码加到新节中,这里就使用前两节应用的shellcode,就是运行飞鸽后先弹一个框,再正常运行,但是此时还要计算一下E8和E9后面的值:

E8后面的值:X = 0x77D36476 - (0x400000 + 0x3D000 + 0x8 + 0x5) = 0x778F9469 注意0x77D36476为MessageBoxA API地址

E9后面的值:X = 0x400000 + 0x1D26F - (0x400000 + 0x3D000 + 0xD + 0x5) = 0xFFFE025D

所以将完整的代码(硬编码)添加到新节中:

最后将OEP的值改为0x3D000

保存,运行后发现先弹框再正常打开程序,成功

2.节表结尾有数据整体上移的情况

我们打开记事本复件notepad_test.exe,找到节表末,发现这里有一些我们不认识的数据,而且是紧挨着节表的,所以这种情况下我们没法在节表末新增节表

此时我们发现DOS头结尾到PE签名之间是垃圾数据,如果将PE签名一直到节表末之间的所有数据整体上紧挨着DOS头后面,接着将e_lfanew字段值改为0x40,此时节表末便空出来了0xE8 - 0x40 = 0xA8字节内存,足够存放80字节,即两个节表大小了

选中0xE8到0x258的全部数据复制,从0x40开始write覆盖0x258 - 0xE8 = 0x170字节数据,接着将此时节表末尾多空出来的数据改为0,再修改e_lfanew的值为0x40即可。此时0x1B0到0x258之间就空出来了0xA8字节,在这里新增节即可

后面新增节的过程与条件都满足时一模一样,不再演示

二.代码实现新增一个节,并添加代码

三.编程实现扩大最后一个节,并添加代码

 3.整体上移后空间还不够,扩大最后一个节

如果整体上移覆盖DOS Stub后空间还不够两节表宽度,那么就要采用扩大最后一个节的方式。注意不要扩大其他的节,因为如果不是最后一个节扩大的话,其他的节扩大会造成其下面的全部节的数据偏等等诸多问题

需要修改SizeOfImage,比如我想扩大500字节,那么要满足内存对齐,所以SizeOfImage应该 + 0x1000,这里为了方便后面的修改,直接就按照内存对齐来扩大,所以扩大0x1000字节即可

接着就是修改最后一个节表的属性:

VirtualAddress和PointerToRawData的值都不用改变

VirtualSize:SizeOfImage - VirtualAddress + Ex,再内存对齐(这里为了方便,Ex可以直接选文件对齐粒度和内存对齐粒度的最小公倍数,这样就不用再考虑内存对齐了),就是最后注入shellcode时不好判断Ex+原来空白区大小是否足够存下shellcode了,不过可以直接在Ex区域注入shellcode即可,不用考虑原来此节的空白区

SizeOfRawData:因为文件对齐一般都为0x200或0x1000,这里直接等于VirtualSize即可(因为VirtualSize此时肯定即是0x200的整数倍,也是0x1000的整数倍)

因为扩大节的目的是为了添加shellcode,所以还要看最后一个节的属性是否可执行

此时就可以在最后一个节的末尾到结束这之间添加代码了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奥德彪的幸福VS码农的幸福

奥德彪的幸福 非洲国家布隆迪是一个全球最不发达国家之一,大部分居民以农业为生,其中包括香蕉,人们拿香蕉用来做饭也用来酿酒。 香蕉产地距离布隆迪首都布琼布拉很远,而这个国家又缺乏规模化的物流企业,于是就诞生了…

Linux进程--函数 system 和 popen 的区别

system() 和 popen() 是 C 语言中用于执行外部命令的两个函数,它们的功能类似,但在使用方式和特性上有一些区别。 system() system() 函数允许您在程序中执行外部命令,并等待该命令执行完成后继续执行程序。其基本语法如下: in…

如何使用脚本执行SQL Server 数据库压缩备份?

SQL Server 数据库压缩备份是否可以实现? 使用时,SQL Server 数据库会变得非常大,备份也是如此。它们占用大量磁盘空间,并且每次备份数据库或四处移动都非常耗时。因此,您可能想知道是否有任何方法可以创建压缩备份。…

pikachu靶场(SQL注入基于布尔的盲注)python实现

import requests from bs4 import BeautifulSoupurl "http://localhost:8086/pikachu-master/vul/sqli/sqli_blind_b.php"def get_database_name(url):dataname # 初始化一个空字符串用于存储数据库名dict abcdefghijklmnopqrstuvwxyz # 数据库名可能存在这些…

docker实战之搭建MYSQL8.0主从同步

目录 环境配置容器创建主服务器创建MYSQL容器新增my.cnf文件创建用户并授权 从服务器创建MYSQL容器新增my.cnf文件重启MYSQL容器配置主从同步 验证主从同步彩蛋 MySQL 主从同步(Master-Slave Replication)是一种常用的解决方案,它允许一个主服…

LabVIEW与串口通讯在运行一段时间后出现数据接收中断的问题

这些问题可能与硬件、软件或通信协议有关。以下是详细的原因分析和可能的解决方案: 一、硬件原因 串口线缆或接口问题: 由于长时间使用,串口线缆可能出现接触不良或损坏。接口松动也可能导致通讯中断。 解决方案:检查并更换串口…

【Text2SQL 经典模型】X-SQL

论文:X-SQL: reinforce schema representation with context ⭐⭐⭐⭐ Microsoft, arXiv:1908.08113 X-SQL 与 SQLova 类似,使用 BERT style 的 PLM 来获得 representation,只是融合 NL question 和 table schema 的信息的方式不太一样&#…

Linux c开发线程锁和条件变量使用

#include <pthread.h> #include <stdio.h> #include <unistd.h>pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {printf("线程等待唤醒,锁定互斥量...\n");…

windows平台vcpkg安装

1. 克隆vcpkg仓库 git clone https://github.com/microsoft/vcpkg 2.运行bootstrap-vcpkg.bat下载vcpkg.exe 3.运行验证 4.使用VCPKG安装OPENSSL 5.安装成功

VC++学习(1)——环境准备,参考文档等,初步入门VC++

目录 引出环境准备&#xff0c;参考文档第一讲 初步入门键盘按下的消息鼠标左键按下报错源码新建一个工程 总结 引出 VC学习&#xff08;1&#xff09;——环境准备&#xff0c;参考文档等&#xff0c;初步入门VC C是一门编程语言,他的语法标准和语言特性是全球统一的 VC是微…

计算机系统概述习题

选择题 电子计算机问世至今&#xff0c;新型计算机不断推陈出新&#xff0c;不管怎么更新&#xff0c;依然具有“存储程序”的特点&#xff0c;最早提出这种概念的是(B) A. 巴贝奇 B. 冯*诺伊曼 C. 帕斯卡 D. 贝尔 B下列描述中___是正确的。 A. 控制器能理解&#xff0c;解释…

中国主要城市房价指数数据集(2011-2024)

数据来源&#xff1a;东方财富网 时间跨度&#xff1a;2011年1月 - 2024年4月 数据范围&#xff1a;中国主要城市 包含指标&#xff1a; 日期、城市 新建商品住宅价格指数-同比 新建商品住宅价格指数-环比 新建商品住宅价格指数-定基 二手住宅价格指数-环比 二手住宅价格指…

Visual Studio 调试及快捷键

文章目录 原文连接环境一、调试器的基本使用1、更改执行流2、快速执行某一条代码断点设置条件断点查看内存信息查看调用堆栈查看寄存器信息设置监视断点调试二、快捷键一、窗口快捷键二、查找相关快捷键三、代码快捷键原文连接 【教程】visual studio debug 技巧总结 环境 一…

OpenCASCADE Draw模块TKDraw项目问题修改

1.问题 在调试Draw模块代码时&#xff0c;出现一个小问题&#xff0c;导致无法正常运行 如下&#xff1a; 2.代码跟踪 通过代码跟踪发现时一个数组越界问题&#xff0c;在此处添加了判断处理&#xff0c;程序可以正常调试

数据结构顺序表实现通讯录

目录 1. 前言&#xff1a; 2.通讯录项目的创建 3. 通讯录的实现 3.1 通讯录的初始化 3.2 通讯录的销毁 3.3 通讯录添加数据 3.4 通讯录查找数据 3.5 通讯录展示数据 3.6 通讯录删除数据 3.7 通讯录修改数据 4. 通讯录完整代码 4.1 test.c 4.2 SeqList.h 4.3 SeqLis…

数据结构(Java实现):ArrayList

目录 1.ArrayList简介2.ArrayList构造方法分析3.ArrayList的add方法以及扩容机制4.ArrayList常用方法5.ArrayList遍历6.ArrayList的缺陷 1.ArrayList简介 在集合框架中&#xff0c;ArrayList是一个普通的类&#xff0c;实现了List接口&#xff0c;具体框架图如下&#xff1a; …

编写一个llvm编译器插件,完成在store汇编指令前对内存合法性的check。

dds(iceoryx、fastdds等)中间件采用了共享内存&#xff0c;如果app内存越界将共享内存踩踏坏了&#xff0c;将会形成灾难。本插件可以检测到app是否在写共享内存&#xff0c;如果是&#xff0c;我们可以让app assert。从而提高dds的稳定性 插件效果&#xff1a; 插件源码&…

话题:如何让大模型变得更聪明?

随着人工智能&#xff08;AI&#xff09;技术的迅速发展&#xff0c;大模型&#xff08;如GPT-4、BERT、Transformer等&#xff09;在自然语言处理、图像识别和语音识别等领域取得了显著成果。然而&#xff0c;如何让大模型变得更聪明&#xff0c;进一步提升其性能和应用效果&a…

Jetbrain | IDEA的启动logo替换成可爱的vtuber-logo

看了这个&#xff0c;好可爱 【上Github热榜了&#xff01;当编程语言的Logo变得可爱起来~】 又看了这个 光速整活&#xff0c;强啊 看到很多人整IDEA的logo包括我自己&#xff0c;都不是特别方便的搞&#xff0c;我就直接把文件放在绑定资源里直接下吧 然后直接找到本体的安…

【深度学习】与【PyTorch实战】

目录 一、深度学习基础 1.1 神经网络简介 1.2 激活函数 1.3 损失函数 1.4 优化算法 二、PyTorch基础 2.1 PyTorch简介 2.2 张量操作 2.3 构建神经网络 2.4训练模型 2.5 模型评估 三、PyTorch实战 3.1 数据加载与预处理 3.2 模型定义与训练 3.3 模型评估与调优 3…