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

2024-04-27 22:44

本文主要是介绍[滴水逆向三期] 在代码空白区添加代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路

把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

在这里插入图片描述

运行程序

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

地址信息记录

EntryPoint:3846ec   转到内存中7846ecmessagebox:0x7683ae40定位插入的位置,第一个节的空白区:3808F0push 6a 00 6a 00 6a 00 6a 00E8下一行:3808fd  转到内存中:40 0000+3808fd-400+1000=78 14fD7683ae40-78 14fD=760B 9943E9下一行:380902 转到内存中:40 0000+380902-400+1000=78 15027846ec-78 1502=31ea修改OEP:3808F0-400+1000=38 14F0

这篇关于[滴水逆向三期] 在代码空白区添加代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

MyBatisX逆向工程的实现示例

《MyBatisX逆向工程的实现示例》本文主要介绍了MyBatisX逆向工程的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录逆向工程准备好数据库、表安装MyBATisX插件项目连接数据库引入依赖pom.XML生成实体类、

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模