对程序"加料"
我们如果想对已有的程序做手脚,就要在原有的结构中添加自己的代码,这样当用户在打开这个做过手脚的程序时就会自动运行其中我们加进去的代码,至于这些代码能做什么,你懂得。这个实验的目的是在一个EXE可执行文件中手动修改其中的一些地方,使它在被运行时先运行一个MessageBox的提示框再运行程序的主页面。
写一个MessageBox显示的小程序。将其在OD中运行。
在编辑框中输入bp MessageBoxA,回车下断点,在断点查看对话框就能看到刚才下的断点。


找到MessageBox的函数地址,按运行也就是那个小三角符号。找到MessageBox的地址75E5FD1E

这里会用到三个硬编码:E8,E9,6A,E8对应汇编CALL指令,E9对应汇编JMP指令,6A对应汇编PUSH指令。
E8 X
这里的X并不是真正要跳转的地址,真正要跳转的地址还要经过计算可得。
真正要跳转的地址=E8的地址+5+X;
X=真正要跳转的地址 - E8的地址-5;
计算出X后注意大小端排列。如果得到的值为123456时,指令应该写成E8 563412
E9 X的计算类似
看代码区的节能不能容纳18个字节
使用PEtools查看目标exe文件
2400h-221Ch>18够用
文件中的偏移是400,说明2400到之后的400字节都是空的字节,我们可以在里面添加我们想加的代码。
使用PEtool查看目标exe文件,这里我们查看的是PEtool.exe(也就是查看它自己 ^ ^)

从对齐后长度1c000h位置开始找空白的区间。添加6A006A006A006A00E800000000E90000

E8的地址为1CAA8,E9的地址为1CAAD;
由于这个exe文件的imageBase为400000h,所以它们加载到内存后的实际地址分别为41CAA8,41CAAD;

MessageBox的地址是75E5FD1E
E8后面跟的值X=75E5FD1E-41CAA8-5=75A43271
所以E8后面跟的值为75A43271,在ultraEdit中要注意排列:7132A475
而E9要跳到OEP,程序真正的入口地址。

真正要跳转的地址=400000+193BE = X+E9的地址+5
E9后面跟的值 X=4193BE-E9的地址-5=4193BE-41CAAD-5=FFFFC90C
所以E9后面跟的值为FFFFC90C,在ultraEdit中的排列:0CC9FFFF
然后修改程序入口OEP的地址,由PEtool可以看到当前为193BE 改成E8的相对偏移地址1CAA0



保存即可
双击刚刚生成的文件,就会发现先弹出一个MessageBox的提示框

点击确定之后才进入到程序的正常页面。
这样我们对这个程序“加料”就完成了。
对程序"加料"的更多相关文章
- 微信小程序实战篇:商品属性联动选择(案例)
本期的微信小程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点奶茶. 效果演示: 商品属性联动.gif 代码示例 1.commodity.xml <!-- < ...
- 如何将已经安装从chrome扩展程序导出备份为.CRX文件?
之前介绍过CRX Extractor可以从chrome应用商店下载备份扩展程序,有读者朋友问说:如果 Google Chrome扩展程序已经从 Chrome应用商店下架,还有没有方法下载呢?通常网路上 ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 微信应用号(小程序)开发IDE配置(第一篇)
2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- 【探索】在 JavaScript 中使用 C 程序
JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...
随机推荐
- 8.代理ip使用
我日常常用的两个代理: 一.风讯代理 http://www.gzkangyun.com/ 操作界面: 二.智连代理 综合感觉吧,还是智连好用一点,ip质量相对好一点,价格也便宜,不过一个ip基本上的存 ...
- EditText被键盘遮得住
如果在Activity中的布局的下方有EditText,获取焦点弹出软键盘的时候,如果不做处理,软键盘可能会遮挡输入框,用户提现不好,网上也有很多人提出结局方案,这里就分析一下解决的效果. 需要用到E ...
- zabbix使用ICMP Ping模版实现对客户端网络状态的监控,监控丢包率、响应时间
参考网站: https://www.cnblogs.com/saneri/p/6706578.html 使用fping报错注意事项: https://blog.csdn.net/oqqssh/arti ...
- postgresql----COPY之表与文件之间的拷贝
postgresql提供了COPY命令用于表与文件(和标准输出,标准输入)之间的相互拷贝,copy to由表至文件,copy from由文件至表. 示例1.将整张表拷贝至标准输出 test=# cop ...
- webstorm上svn的安装使用
1.首先要下载SlikSvn网址为:https://sliksvn.com/download/ 进入该网站可以根据需要下载32位的或者64位的svn.下图为要下载的图标样式 点击下载即可. 2.在w ...
- day26-保护属性
如果有一个对象,当需要对其进行修改属性时,有2种方法 1.对象名.属性名 = 数据 --->直接修改 2.对象名.方法名() --->间接修改 为了更好的保护属性安全,即不能随意修改,一般 ...
- day02-格式化输出
python格式化字符串有%和{}两种 字符串格式控制符. 字符串输入数据格式类型(%格式操作符号) %%百分号标记%c字符及其ASCII码%s字符串%d有符号整数(十进制)%u无符号整数(十进制)% ...
- Spring boot 错误处理机制
请求方式时,若不存在 浏览器出现White label Error Page 错误页面 其他客户端出现响应一个JSON格式文本包含错误码等信息 浏览器发送请求的请求头: 客户端请求头 这样就能区分来自 ...
- jsfl 常用自定义方法
//创建文件夹 function creatFile(fileURl) { if (FLfile.createFolder(fileURl)) { //alert("创建成功 "+ ...
- Redis脚本
8.启动 /usr/local/bin/redis-server /etc/redis/redis.conf ./redis-server /home/work/redis/redis.conf &a ...