首页
社区
课程
招聘
[旧帖] [原创]为PE文件添加stub 0.00雪花
发表于: 2009-7-23 19:38 5430

[旧帖] [原创]为PE文件添加stub 0.00雪花

2009-7-23 19:38
5430

来个简单一点的,以系统自带的计算器程序为例,给它添加一个简单的启动消息框,在这里通过插入stub的形式来实现。所谓stub,就是一段字节型数据,是汇编代码的数据形式,在插入目标进程后可以被执行。
1.增加一个区块
用LordPE可以非常方便地为PE文件增加一个区块,但Windows自带的计算器程序在区块表后面仅跟着着是绑定输入表的数据,直接增加区块会破坏这些数据,这样可能会导致程序不能正常运行,要解决这个问题,我们可以将这些数据移到别处,再修改绑定输入表的偏移地址就可以了,但更简单的方法是直接将绑定输入表的偏移地址和大小全部清零,因为绑定输入表对PE来说并不是必须的。我们用LordPE先将calc.exe的绑定输入表清零,再添加一个区块,区块的虚拟大小和物理大小均设为1000h(都随便啦).

名称   虚拟地址   虚拟大小  物理偏移  物理大小  标志
.text   00001000  000126B0  00000400  00012800  60000020
.data   00014000  0000101C  00012C00  00000A00  C0000040
.rsrc   00016000  00008960  00013600  00008A00  40000040
.NewSec 0001F000  00001000  0001C000  00001000  E00000E0

其中.NewSec是新增的区块,增加区块之前,要注意LordPE选项设置的自动修正镜像大小的对勾要打上,不然就要自己修改这个值了。由于LordPE简单的增加区块只是修改了PE文件头,并不增加相应的数据段,要增加相应的数据段可以使用WinHex,在物理偏移0001C000处(即文件末)增加4096字节(即1000h).

2.插入stub。
由于我们要实现的功能是增加一个消息框,会用到user32.dll中的MessageBoxA函数,我们用LordPE在calc.exe的导入表中增加这个函数,并记下该导入函数的ThunkRVA,如我测试时为00020019,加上calc.exe的基地址01000000,那么其虚拟地址为01020019。用OllyDbg载入添加区块后的calc.exe,先准备2个字符串以供MessageBoxA函数调用。如:

0101F100  B2 E5 C8 EB 73 74 75 62 00 00 00 00 00 00 00 00  插入stub........
0101F110  D5 E2 CA C7 D2 BB B8 F6 BC F2 B5 A5 B5 C4 C0 FD  这是一个简单的例
0101F120  D7 D3 00                                         子..

接着开始插入汇编代码了,从0101F000开始插入汇编代码。

0101F000    60              pushad
0101F001    6A 00           push    0
0101F003    68 00F10101     push    0101F100
0101F008    68 10F10101     push    0101F110
0101F00D    6A 00           push    0
0101F00F    FF15 19000201   call    [01020019]  //调用MessageBoxA
0101F015    61              popad
0101F016  - E9 5A34FFFF     jmp     01012475  //原入口地址

把修改后的程序保存下来。保存时要注意:先在CPU窗口中转到0101F000,才可以复制到可执行文件。

3.修改入口地址
用LordPE打开修改后的文件,把入口地址从00012475改为0001F000,就完成了这个简单的实验,现在只要运行这个修改后的calc.exe就会先启动一个消息框,点击确定按钮会回到原始程序。整个过程很简单哦。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 68
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
真是长江后浪推前浪啊,新手都这么厉害
2009-7-23 20:13
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习了,正在学习PE格式...
2009-7-23 20:16
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了,顶了
2009-7-29 23:47
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
正好在学PE,,受教了,,,顶
2009-8-31 14:46
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
天哪,都是高手。我何时才行啊
2009-8-31 15:19
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错,正好在学习PE
2009-9-1 06:27
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错不错,学习了!
2009-9-2 10:12
0
雪    币: 148
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
有人带,就是学到很快!
2009-9-3 11:50
0
雪    币: 148
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
汗 还是没完全看明白。。
2009-9-4 23:59
0
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
努力成为高手...
2009-9-5 00:27
0
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
用LordPE在calc.exe的导入表中增加这个函数

楼主,这步怎么操作的?

讲一下啊
2009-9-5 01:06
0
雪    币: 97
活跃值: (30)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
13
汗,何时被顶起来了,居然没发现.

依次单击"目录"->"输入表",右键单击->添加导入表,输入:
DLL:user32.dll
API:MessageBoxA
点"+"->"确定",然后关闭并保存就可以了.
2009-9-13 22:00
0
雪    币: 12
活跃值: (696)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
2022-10-31 17:44
0
游客
登录 | 注册 方可回帖
返回
//