插入代码---四

文章目录

    • 在空白节插入代码
      • 构造恶意代码
      • 计算函数相对地址
      • 修改入口地址
      • 返回原地址
    • 扩大节
    • 新增节

对与一个程序我们需要在里面添加自己的功能,让程序增加一些我们的函数,那么我们就需要了解PE文件结构,然后对其进行修改,这里我们将基于程序包含的函数进行调用。

在空白节插入代码

在一个PE程序中,我们需要找到那里是我们可以修改的,对于文件头,节表,节数据等我们进行修改就会影响程序正常的功能,我们首先要找到一个空白区域。由于文件对齐的原因,开白节是最好的选择。
在这里插入图片描述

构造恶意代码

这里我们需要先构造我们要执行的语句,可以是好的语句,也可以是恶意的。

好的代码就是起壳的作用
恶意的代码就是shellcode

在刚开始时我们可以尝试调用程序已经存在的函数就可以,对于一个函数我们可以通过工具或其它方法查询其地址,然后我们构造命令:

E8 + 执行函数地址

E8对应汇编指令call,即调用函数

计算函数相对地址

这里我们假设该程序中存在一个messagebox的函数,我们先去确定其在内存的地址,然后:

地址 = messagebox的内存地址 - E8指令的地址 - 指令长度(5)

  1. messagebox的内存地址就是我们要调用的函数地址,
  2. call是相对地址,并且执行一条语句时,cs:ip指向的是下一条语句,所以还要减5的指令长度。

修改入口地址

这里我们要修改的入口地址是内存中的地址,让程序从我们的代码处开始执行。

imageBase + AddressOfEntryPoint = 我们的代码内存地址

imageBase + AddressOfEntryPoint指向内存中的程序入口地址,我们需要将其改为我们的代码地址

返回原地址

我们的目的不是破环程序的运行,因此我们还需要在执行完我们的程序后返回它原本的地址。

E9 原入口地址

E9是jump的机器码。

扩大节

如果我们需要插入的代码非常多,这个时候我们有两个方法,一个是扩大节,一个是增加节。
扩大节就是将原本的节空间变大,这里一般是扩大最后一个节
因为在扩大中间的时候,会改变后面节的起始地址,需要修改大量数据,而只扩大最后一个,涉及的修改较少

typedef struct _IMAGE_SECTION_HEADER
{BYTE    Name[IMAGE_SIZEOF_SHORT_NAME]; //节的名字,只取8个字节union {DWORD   PhysicalAddress;DWORD   VirtualSize;           } Misc;                               //双字 是该节在没有对齐前的真实尺寸,该值可以不准确。DWORD   VirtualAddress;                // 节区在内存中的偏移地址DWORD   SizeOfRawData;                 // 在文件中对齐后的尺寸DWORD   PointerToRawData;              // 在文件中的偏移DWORD   PointerToRelocations;          // 在OBJ文件中使用DWORD   PointerToLinenumbers;WORD    NumberOfRelocations;WORD    NumberOfLinenumbers;DWORD   Characteristics;               // 节区属性字段
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

这里我们看到节表数据,里面涉及的成员只修改最后一个时是否涉及:

成员名称表示意义最后一个节是否涉及
Misc对齐前的大小涉及
VirtualAddress节区内存的偏移地址
SizeOfRawData在文件中对齐后的大小涉及
PointerToRawData在文件中的偏移
SizeOfImage文件大小涉及

最后一个成员是在扩展PE头中,后面是否涉及指的是只修改最后一个成员时是否需要修改。

新增节

新增加一个节来写我们的数据,这个操作需要首先对PE头里的成员有所了解。

  1. 在标准PE头中有一个节表数量的成员NumberOfSections
  2. 我们需要增加一个节表成员
  3. 计算节的偏移,内存大小,文件大小
  4. 修改 sizeofImage大小

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

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

相关文章

位运算-191. 位1的个数- 136. 只出现一次的数字

位1的个数 已解答 简单 相关标签 相关企业 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。 示例 1: 输入:n 11 输…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的:makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb,数据库中创建表t_location_count表,表中设置两个…

能耗监测管理系统与技术方案

能耗监测管理系统是目前能源管理中重要的技术手段,它通过集成现代监测技术和信息技术,实现对能源消耗的实时监控、数据分析和决策支持,帮助企业或机构实现能源的高效管理和节能降耗。本篇文章将从能耗监测管理系统的组成、关键技术、应用领域…

ubuntu-server部署hive-part1-安装jdk

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本:ubuntu-server-22.04.3 虚拟机:virtualbox7.0 安装jdk 上传解压 以root用户,将jdk上传至/opt目录下 tar zxvf jdk-8u271-linux-x64.tar.gz 配置环境变量…

嵌入式Qt QGridLayout网格布局管理器

一.QGridLayout网格布局管理器 //以行为单位 设置比例系数 void QGridLayout::setRowStretch ( int row, int stretch ) //以列为单位 设置比例系数 void QGridLayout::setColumnStretch ( int column, int stretch ) 实验: Widget.h: #ifndef _WIDGE…

Redis安装说明

Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:https://redis.io/ 1.单机安装Redis 1.1.…

2024.4.3-[作业记录]-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…

【css】使用display:inline-block后,元素间存在4px的间隔

问题:在本地项目中使用【display: inline-block】,元素间存在4px间隔。打包后发布到外网又不存在这个问题了。 归根结底这是一个西文排版的问题,英文有空格作为词分界,而中文则没有。 此时的元素具有文本属性,只要标签…

电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术

文章目录 引言一、关键词策略1.1 关键词研究与选择1. 确定目标受众2. 使用关键词研究工具3. 分析搜索量和竞争程度4. 考虑长尾关键词5. 关键词的商业意图6. 创建关键词列表7. 持续监控和调整 1.2 关键词布局与密度1. 关键词自然分布2. 标题标签的使用3. 首次段落的重要性4. 关键…

Linux第4课 Linux的基本操作

文章目录 Linux第4课 Linux的基本操作一、图形界面介绍二、终端界面介绍 Linux第4课 Linux的基本操作 一、图形界面介绍 本节以Ubuntu系统的GUI为例进行说明,Linux其他版本可自行网搜。 图形系统进入后,左侧黄框内为菜单栏,右侧为桌面&…

C++进阶--C++11(2)

C11第一篇 C11是C编程语言的一个版本,于2011年发布。C11引入了许多新特性,为C语言提供了更强大和更现代化的编程能力。 可变参数模板 在C11中,可变参数模板可以定义接受任意数量和类型参数的函数模板或类模板。它可以表示0到任意个数&…

C++之类和对象(上)

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1访问限定符 4.2 类的两种定义方式 第一种: 第二种: 4.3封装 5.类的实例化 6.类对象模型 1.面向过程和面向对象初步认识 C语言是面向过程的,…

【Claude 3】This organization has been disabled.此组织已被禁用。(Claude无法对话的原因和解决办法)

Claude对话提示 This organization has been disabled.此组织已被禁用。 This organization has been disabled.此组织已被禁用。 This organization has been disabled.此组织已被禁用。 问题截图 问题原因 出现该页面,表示您的账户已经无法使用,可能…

SQL语言

一、DDL数据库定义语言 1、登录mySQL mysql -u"用户名" -p"密码" -h"登录地址 -h:默认为本机 示例: 2、查看当前存在的数据库 show databases; 示例: 3、创建数据库database create…

约数与倍数-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第45讲。 约数与倍数&#…

非关系型数据库——Redis基本操作

目录 一、Redis数据库常用命令 1.Set——存放数据 2.Get——获取数据 3.Keys——获取符合条件的键值 4.Exists——判断键值是否存在 5.Del——删除指定键值 6.Type——获取键值对应的类型 7.Rename——对已有键值重命名(覆盖) 8.Renamenx——对…

更高效、更简洁的 SQL 语句编写丨DolphinDB 基于宏变量的元编程模式详解

元编程(Metaprogramming)指在程序运行时操作或者创建程序的一种编程技术,简而言之就是使用代码编写代码。通过元编程将原本静态的代码通过动态的脚本生成,使程序员可以创建更加灵活的代码以提升编程效率。 在 DolphinDB 中&#…

【智能算法】随机分形搜索算法(SFS)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2015年,Salimi等人受到分形的扩散性质启发,提出了随机分形搜索算法(Stochastic Fractal Search ,SFS)。 2.算法原理 2.1算法思想 SFS通…

《QT实用小工具·十一》Echart图表JS交互之仪表盘

1、概述 源码放在文章末尾 该项目为Echart图表JS交互之炫酷的仪表盘,可以用鼠标实时改变仪表盘的读数。 下面为demo演示: 该项目部分代码如下: #include "widget.h" #include "ui_widget.h" #include "qurl.h&q…

鸿蒙实战开发-如何使用Stage模型卡片

介绍 本示例展示了Stage模型卡片提供方的创建与使用。 用到了卡片扩展模块接口,ohos.app.form.FormExtensionAbility 。 卡片信息和状态等相关类型和枚举接口,ohos.app.form.formInfo 。 卡片提供方相关接口的能力接口,ohos.app.form.for…