源程序是这个样子:

思路:

1、通过LordPE工具拿到所需数据

2、OllyDebug通过BP MessageBoxA拿到MessageBoxA地址

3、UE十六进制编辑器定位代码节基址

4、在代码节找到一处空白区

5、写入代码对应的十六进制数据

6、Call到MessageBoxA,Call:E8

7、Jmp到原OEP,Jmp:E9

8、修改原OEP为写入数据地址

准备工作:

测试程序

LordPE工具

OllyDebug

UE十六进制编辑器

通过LordPE工具拿到所需数据:

AddressOfEntryPointer(OEP) :0005CDD1

ImageBase :      

.text(VOffset) :      

.text(Vsize) :      0007A4F2

通过OllyDebug的指令拿到MessageBoxA地址:

MessageBoxA :      767674C0

实战开始

定位代码节尾部:VOffset + VSize = 00001000 + 0007A4F2 = 7B4F2

我在这行的下一行找到空白区:0007b500

MessageBoxA参数压栈,假设参数都为0,那么有(push 0)*4,

对应十六进制:6A 00 6A 00 6A 00 6A 00,OKey,填进去。

压栈后可以Call MessageBoxA了。

Call的实际地址需要转换,转换公式:

要Call的地址 - (Call所在内存地址+5) = MessageBoxA地址 - (47B508+5) = 767674C0 - (47B508+5) = 762EBFB3

所以Call MessageBoxA对应十六进制:E8 B3 BF 2E 76

假设程序执行到这了,写入的代码执行完毕后就要Jmp原OEP干它应该干的活了。

Jmp到原地址,同样按照上面的地址转换对应十六进制:E9 BF 18 FE FF

修改原OEP为写入代码的地址,也就是刚才找的空白区:0007b500

通过PE结构的方式定位到原OEP根据地,OEP在IMAGE_OPTIONAL_HEADER的AddressOfEntryPointer,具体偏移相对可选头0x10位置

改为刚才的写入代码的地址

Ok,测试一下改过后的程序效果

它会先执行写入的代码,弹出一个弹框

然后再做它应该做的

只是记录一下操作流程,这个是最简单的,文件对齐和内存对齐一样,不用RVA什么的转化地址,将代码写入代码节,不用改节属性。

【PE】手动给PE文件添加一段代码MessageBoxA的更多相关文章

  1. PE格式第五讲,手工添加节表

    PE格式第五讲,手工添加节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 首先我们要用汇编编写一段汇编代码,用来生成 ...

  2. (免量产,免格式化)手动将PE安装到移动硬盘/U盘或无系统硬盘!

    在一台没有装系统的电脑上,只要把XP系统启动文件,及引导菜单文件(ntldr,boot.ini,”bootfont.bin这个可有可无,主要作用是显示中文菜单”)和GRUB引导文件和PE系统文件复制到 ...

  3. [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)

    [系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...

  4. 手动编译Jsp文件

    手动模拟Tomcat编译jsp文件 Tomcat编译jsp文件的配置路径是在%tomcat_home%/conf/web.xml中,有这样一段代码 <servlet> <servle ...

  5. Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交

    今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点 ...

  6. 如何在hosts文件添加自己想要解析的网站?及修改hosts的作用

    http://union.zhuna.cn/help/144.asp 在Windows2003/XP系统中位于C:\Winnt\System32\Drivers\Etc 目录中,找到host文件. 首 ...

  7. Chromium添加一段新字符串

    参考:https://groups.google.com/a/chromium.org/forum/#!searchin/chromium-dev/tclib%7Csort:relevance/chr ...

  8. 通过重写.htaccess文件添加404

    如果说是用linux服务器的系统 想要给自己的网站设置404怎么弄?如果你不会给自己的Ecs服务器添加服务器管理系统,或是你购买的云虚拟主机没有304.404设置,那么就要通过自己重写文件来设置404 ...

  9. 如何给现有的PDF文件添加页码

    如何给现有的PDF文件添加页码 之前我写了如何打印PDF文件,有人qq问我怎样在打印时给PDF文件添加页码,的确,给PDF文件添加页码,可以帮助我们区分纸质档的PDF文件页面的先后顺序,方便我们对它的 ...

随机推荐

  1. android shape.xml 属性详解

    转载源:http://blog.csdn.net/harvic880925/article/details/41850723 一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标 ...

  2. IIS/asp.net管道

    http://referencesource.microsoft.com/ 理解ASP.NET的前提是对ASP.NET管道式设计的深刻认识.而ASP.NET Web应用大都是寄宿于IIS上的. IIS ...

  3. eclipse启动的时候报错An internal error occurred during: "Initializing Java Tooling"

    eclipse ->windows ->Perspactive -> Reset perspactive 重置视图可以解决

  4. 案例52-crm练习新增客户中加入文件上传功能(struts2文件上传)

    1 jsp/customer/add.jsp 完整代码: <%@ page language="java" contentType="text/html; char ...

  5. Web.Config详细说明

    (一).Web.Config是以XML文件规范存储,配置文件分为以下格式 1.配置节处理程序声明    特点:位于配置文件的顶部,包含在<configSections>标志中. 2.特定应 ...

  6. fetch技术

    Snandy If you cannot hear the sound of the genuine in you, you will all of your life spend your days ...

  7. vue将数据绑定到属性中

    *必须使用[] <tr v-for="(p,index) in prodects"> @*v-bind:class="styleType(index)&quo ...

  8. JNA简单使用

    近期使用Java开发有关于摄像机接收到数据的上传,因为摄像机处理图像是用C语言实现的,所以开发需要用到JNA,实现JAVA对C语言的回调,因为具体的开发方式官方文档里面有示例,所以本文只是简单的把需要 ...

  9. Swift UI开发初探 (转)

    原文地址:http://www.tairan.com/archives/6600 关于Swift语法,可以参考<Apple Swift编程语言入门教程> 效果如下: 开发环境 Xcode6 ...

  10. fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤)(转)

    fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤) Fiddler 有一个filters可以很好的帮助我们只显示我们关系的请求或 ...