【PE】手动给PE文件添加一段代码MessageBoxA
源程序是这个样子:

思路:
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的更多相关文章
- PE格式第五讲,手工添加节表
PE格式第五讲,手工添加节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 首先我们要用汇编编写一段汇编代码,用来生成 ...
- (免量产,免格式化)手动将PE安装到移动硬盘/U盘或无系统硬盘!
在一台没有装系统的电脑上,只要把XP系统启动文件,及引导菜单文件(ntldr,boot.ini,”bootfont.bin这个可有可无,主要作用是显示中文菜单”)和GRUB引导文件和PE系统文件复制到 ...
- [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
[系统安全] 十六.PE文件逆向基础知识(PE解析.PE编辑工具和PE修改) 文章来源:https://masterxsec.github.io/2017/05/02/PE%E6%96%87%E4%B ...
- 手动编译Jsp文件
手动模拟Tomcat编译jsp文件 Tomcat编译jsp文件的配置路径是在%tomcat_home%/conf/web.xml中,有这样一段代码 <servlet> <servle ...
- Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交
今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点 ...
- 如何在hosts文件添加自己想要解析的网站?及修改hosts的作用
http://union.zhuna.cn/help/144.asp 在Windows2003/XP系统中位于C:\Winnt\System32\Drivers\Etc 目录中,找到host文件. 首 ...
- Chromium添加一段新字符串
参考:https://groups.google.com/a/chromium.org/forum/#!searchin/chromium-dev/tclib%7Csort:relevance/chr ...
- 通过重写.htaccess文件添加404
如果说是用linux服务器的系统 想要给自己的网站设置404怎么弄?如果你不会给自己的Ecs服务器添加服务器管理系统,或是你购买的云虚拟主机没有304.404设置,那么就要通过自己重写文件来设置404 ...
- 如何给现有的PDF文件添加页码
如何给现有的PDF文件添加页码 之前我写了如何打印PDF文件,有人qq问我怎样在打印时给PDF文件添加页码,的确,给PDF文件添加页码,可以帮助我们区分纸质档的PDF文件页面的先后顺序,方便我们对它的 ...
随机推荐
- jQuery源码解读 --- 整体架构
最近学习比较忙,感觉想要提高还是要读源码,所以准备考试这个考试结束就开始读jquery源码啦,加油~
- vue学习笔记 vue安装
一.安装步骤:(用cmd命令用管理身份安装比较顺利) 1.安装node,安装后可以输入npm -v 查看版本,升级npm可用 cnpm install npm -g 2.安装vue 输入cnpm in ...
- intellijidea课程 intellijidea神器使用技巧 3-2 livetemplate
创建livetemplate分组: ctrl shift a ==> live templates ==> + ==> templates group 创建livetemplate模 ...
- 冒泡排序,冒泡性能优化--java实现
冒泡排序说明: 一次比较两个元素,如果他们的顺序错误就把他们交换过来. 重复地进行直到没有再需要交换,也就是说已经排序完成. 越小的元素会经由交换慢慢“浮”到数列的顶端. 冒泡排序算法的运作如下: 比 ...
- Django auth组件拓展 关联外部信息---------------------------- Profile 模式
https://docs.djangoproject.com/en/2.1/topics/auth/customizing/ 官方文档. 网上的get_profile 方法不好用太假了 可能我没用明白 ...
- #include stdio.h(6)
#include <stdio.h> int main() { //**************3.字符数组************** ] = {'i','P','\0','o','n' ...
- 【转】【MATLAB】模拟和数字低通滤波器的MATLAB实现
原文地址:http://blog.sina.com.cn/s/blog_79ecf6980100vcrf.html 低通滤波器参数:Fs=8000,fp=2500,fs=3500,Rp=1dB,As= ...
- 如何查询mysql中date类型的时间范围记录?
java date类型 会不会自动转换 mysql date类型? 抹除掉后面 时间 ? 时间不是查询条件?
- kk录像机怎么剪辑视频 kk录像机视频剪辑教程
很多朋友录制视频都是用KK录像机,录制视频过后我们需要对视频进行修改和调整,下面小编就教大家怎么来剪辑KK录像机录制的视频 1.首先我们打开软件点[添加一个视频],添加需要剪切的视频 2.将播放指针移 ...
- Vim中修改列模式的文字为ABCD或1234的递增序号
vimrc里添加 vnoremap <F3> :<C-u>call <SID>AddCharOfCursor()<CR> "递增列模式下的字符 ...