源程序是这个样子:

思路:

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. Murano Weekly Meeting 2015.09.22

    Meeting time: 2015.September.22th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting s ...

  2. Linux 安装 webmin

    下载webmin的rpm包 yum install webmin-rpm systemctl start webmin 即可

  3. C知识要点-个人总结

    [数据结构]()C 结构体.C 共用体.C 数组.C 指针..... 存储类.auto.register.static.extern C 函数.定义函数.返回类型.函数名称.参数.函数主体.返回语句. ...

  4. 显示器分辨率不同,部分winform控件在其他机器上显示不全

    在开发机器上效果如下: 而到其他电脑上效果如下: 解决办法: 将窗体的AutoScaleMode属性设置为None,尝试一下,应该可以了. 关于AutoScaleMode的属性,可以参考 http:/ ...

  5. 从刷票了解如何获得客户端IP

    我的个人博客,源地址:http://www.woniubi.cn/get_client_ip/ 前两个星期帮一个朋友的亲戚的孩子刷票,谁让咱们是程序员呢.这当中也遇到过重装系统,除灰尘,淘宝购物,盗Q ...

  6. OpenCV-3.4.2基于Qt-5.10.1的编译

    OpenCV-3.4.2基于Qt-5.10.1的编译 由于本人在使用CMake和MinGW编译OpenCV是遇到了很多问题,在这里记录下来.至于所需软件的安装和相应环境变量的设置,网上有很多详细的教程 ...

  7. js中字符串怎么转化为日期

    var str = "2010-08-01"; // 转换日期格式 str = str.replace(/-/g, '/'); // "2010/08/01"; ...

  8. mongoDB基础知识(一)

    mongoDB是一个基于分布式文件存储的数据库,介于关系型数据库和非关系型数据库之间,在非关系型数据库中功能最丰富, 最像关系型数据库.数据结构松散,类似于json的bson格式,可以存储比较复杂的数 ...

  9. 笨办法学Python(三十)

    习题 30: Else 和 If 前一习题中你写了一些 “if 语句(if-statements)”,并且试图猜出它们是什么,以及实现的是什么功能.在你继续学习之前,我给你解释一下上一节的加分习题的答 ...

  10. 用yum rpm 快速安装zabbix agent

    用yum 快速安装zabbix agent. wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.2-1.el7 ...