首页
社区
课程
招聘
[分享]避免壳申请的区段低于镜像基址的一个方法
发表于: 2007-8-1 13:18 6951

[分享]避免壳申请的区段低于镜像基址的一个方法

2007-8-1 13:18
6951
避免壳申请的区段低于镜像基址的一个方法
有些壳申请的区域低于镜像基址,可以在运行前,先人为手动把镜像基址前的内存申请出来,这样壳就只能申请镜像基址以后的内存了。
下面是代码示例,本例中镜像基址为00400000,不同基址可修改相应数据实现。当然写一个脚本的话就比较方便了。
00409C15    9C                      pushfd
00409C16    60                      pushad                            ; 上面这两句保存现场
00409C17    6A 04                   push    4
00409C19    68 00100000             push    1000
00409C1E    68 00100000             push    1000
00409C23    6A 00                   push    0
00409C25    E8 27FE3F7C             call    kernel32.VirtualAlloc     ; 这5句是申请内存
00409C2A    3D 00003F00             cmp     eax, 3F0000               ; 比较有没有申请到程序的镜像基址处
00409C2F  ^ 75 E6                   jnz     short 00409C17            ; 没有就跳回去继续申请
00409C31    61                      popad
00409C32    9D                      popfd                             ; 恢复现场
00409C33    90                      nop                               ; 这里下个断点
00409C34    90                      nop

中断后,清除这些代码,把eip回到原来的位置,就可以了。

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

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
2
...不过换做我 我会直接上一个VirtualAlloc的钩子  把它分配到0x30000000以上去 方便补区段 Or 其他.
2007-8-1 13:21
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
3
楼上说的有道理。学习一下
2007-8-1 15:08
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
1楼的比2楼的好,把东西搞大了不好收拾。。。
2007-8-1 19:36
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
5
先把文件搞大一点,下断点VirtualAlloc,把返回值改到文件后面的空白处,一般的程序都有效果,免得补区段了
2007-8-1 19:44
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
不错的方法 可以写到脚本里面  

gmi eip,MODULEBASE
mov modbase,$RESULT
sub modbase,10000

allocloop:
alloc 1000
mov mem, $RESULT
cmp mem,modbase
jne allocloop
2007-8-2 10:55
0
雪    币: 170
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
脚本实现真方便 不用改就可以了
2007-8-2 13:13
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
8
正想找你,你自己先来了
2007-8-2 14:11
0
雪    币: 303
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
按照这样怎么把高于基址的内存都申请了?不是应该先申请低于基址的内存吗?
是不是有问题!!
2007-8-29 08:49
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
感觉lz好浪费啊....一点都不节能环保...

ls的,就是把全部低地址都申请掉了接下来才会申请高的啊...
2007-8-29 10:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
gmi eip,MODULEBASE
mov modbase,$RESULT
sub modbase,10000

allocloop:
alloc 1000
mov mem, $RESULT
cmp mem,modbase
jne allocloop
ret
2007-8-29 10:14
0
雪    币: 210
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
请问谁能帮指点一下
修改加壳的SizeOfStackReserve值为380000后,
用OD调试中出现“文件损坏!请进行病毒检测,并重新安装程序。”
有什么好解决方法吗?
2007-8-29 12:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
严重学习一下这个方法
不过大侠们讲的都很 "简洁"
2007-8-31 18:37
0
游客
登录 | 注册 方可回帖
返回
//