[滴水逆向三期] 在代码空白区添加代码

思路

把MessageBox()函数的机器码添加到第一个节的空白区,修改程序的入口点,使程序先执行MessageBox()函数在屏幕上显示一个弹窗,然后在jmp回原来的入口点,运行原来程序。
要添加的内容

6A 00 6A 00 6A 00 6A 00 E8 XX XX XX XX E9 XX XX XX XX

6A是push指令,把参数入栈,E8是call指令,调用函数,E9是jmp指令,跳转。
在硬编码中,很多地址是以偏移来计算的,以call指令举例

真正要跳转到的地址=(E8的地址+5)+X(偏移)
X(偏移)=真正要跳转到的地址-(E8的地址+5)

取消基址随机化

有的程序用OD或者xdbg打开,会发现入口点并不是40 0000+OEP,而且每次开机都不一样,这是characteristic里的一个属性导致的,我们把那个属性修改了就可以了。
这里可以借助CFF Explore工具。在CFF Explore中打开要修改的程序
找到Nt Header->Optional Header->DllCharacteristics
在这里插入图片描述

点击右边的Click here,把DLL can move取消即可,然后保存程序。
在这里插入图片描述

添加代码

提示:再修改程序前,先把原来的程序复制一份,我们用复制出来的程序来调试。
首先找到程序入口点和第一个节在文件中的偏移
在这里插入图片描述

在这里插入图片描述
程序入口点0x3846EC,第一个节在文件中的偏移0x3804DC,那么它在文件中的地址就是0x3808DC
用OD或xdbg打开程序,在命令处输入bp MessageBoxA,下一个断点,然后查看这个函数的地址
在这里插入图片描述
函数地址在0x7683AE40
接下来确定shellcode要添加的位置,第一个节的代码在0x3808DC就结束了,这里我把shellcode添加在0x3808F0处
在这里插入图片描述
修改
在这里插入图片描述

加下来开始计算(这里都是十六进制):
E8的地址3808f8
X(偏移)=7683ae40-(3808f8+5 + 40 0000 - 400+1000)=760B 9943
E9的地址3808fd
X(偏移)=7846ec-(40 0000+ 3808fd + 5 - 400+1000)=31ea

在这里插入图片描述

修改OEP: 3808F0-400+1000=38 14F0

在这里插入图片描述

运行程序

双击程序,出现弹窗。
在这里插入图片描述
点击确定,程序正常运行。
在这里插入图片描述

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

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

相关文章

如何基于Spring Boot项目从零开始打造一个基于数据库号段模式去中心化的分布式ID生成方案

一、前言 在当前系统开发过程中,单体架构的应用正在走向消亡,越来越多的应用开始分布式架构,在分布式架构设计过程中,有一个问题往往避免不了,就是分布式ID生成问题。 在常见解决方案中,有使用雪花算法或…

SOLIDWORKS Electrical 3D--精准的三维布线

相信很多工程师在实际生产的时候都会遇到线材长度不准确的问题,从而导致线材浪费甚至整根线材报废的问题,这基本都是由于人工测量长度所导致的,因此本次和大家简单介绍一下SOLIDWORKS Electrical 3D布线的功能,Electrical 3D布线能…

Open-Sora:开源版的Sora

项目简介 本项目希望通过开源社区的力量复现Sora,由北大-兔展AIGC联合实验室共同发起,当前我们资源有限仅搭建了基础架构,无法进行完整训练,希望通过开源社区逐步增加模块并筹集资源进行训练,当前版本离目标差距巨大&…

GNU Radio之Schmidl Cox OFDM synch.底层C++实现

文章目录 前言一、Schmidl & Cox 同步模块二、C 源码分析三、处理流程1、延迟路径(Delay Path)2、能量路径(Energy Path)3、频率估计(Fine Frequency Estimate)4、峰值检测(Peak Detect&…

Git泄露和hg泄露原理理解和题目实操

一.Git泄露 1.简介 Git是一个开源的分布式版本控制系统,它可以实现有效控制应用版本,但是在一旦在代码发布的时候,存在不规范的操作及配置,就很可能将源代码泄露出去。那么,一旦攻击者发现这个问题之后,就…

并并并并·病查坤

P1、什么是并查集 引用自百度百科: 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合…

MATLAB 2024a软件下载安装教程

1-首先下载Matlab,以下迅雷云链接,里面有全版本的matlab,根据自己的需要下载即可,建议下载最新版的,功能会更多,当然内存也会更大。 迅雷云盘迅雷云盘https://pan.xunlei.com/s/VNgH_6VFav8Kas-tRfxAb3XOA…

计算机体系结构:向量体系结构介绍

向量体系结构介绍 什么是向量? 在计算机体系结构,"向量"(vector)是指一个由多个相同类型且逻辑上相关的数据元素组成的有序集合。这些元素可以是整数、浮点数、布尔值或其他数据类型,它们在内存中连续存储…

GPT-3和DALL-E 2在AIGC领域具体有哪些应用?

GPT-3和DALL-E 2 是人工智能领域中两个备受关注的模型,它们分别代表了自然语言处理(NLP)和图像生成领域的最新进展。 1.GPT-3和DALL-E 2的概念与特点 1.1 GPT-3 GPT-3(Generative Pre-trained Transformer 3)&#x…

C语言 switch语句

之前 我们讲了 if 和 嵌套的if分支语句 但其实 多分支语句 我们还可以用 switch 有时 switch 语句可以简化逻辑代码 switch语句也称之为开关语句,其像多路开关一样,使程序控制流程形成多个分支,根据一个表达式的不同取值,选择其…

创建Vue3项目遇到的问题 - TypeError: (0 , import_node_util.parseArgs) is not a function

印象中想要创建vue3项目,需要安装16.0或更高版本的Node.js,于是第一步检查现在所用node版本。 显示 v16.20.0。前置条件符合,开始愉快的创建项目。npm init vuelatest,报错了。 查了一下,发现官网已经改成了需要18.3或…

k8s学习(三十六)centos下离线部署kubernetes1.30(单主节点)

文章目录 服务器准备工作一、升级操作系统内核1 查看操作系统和内核版本2 下载内核离线升级包3 升级内核4 确认内核版本 二、修改主机名/hosts文件1 修改主机名2 修改hosts文件 三、关闭防火墙四、关闭SELINUX配置五、时间同步1 下载NTP2 卸载3 安装4 配置4.1 主节点配置4.2 从…