首页
社区
课程
招聘
[求助]morphine壳中VirtualAlloc分配内存 地址问题
发表于: 2007-10-16 17:56 7455

[求助]morphine壳中VirtualAlloc分配内存 地址问题

2007-10-16 17:56
7455
morphine壳及其它的后续者(CI Crypt等)加壳的时候,都会变换程序基址,对一些exe文件,很多都是没有重定位表的,比如有个基地址是0x00400000的exe程序加壳后,在脱壳的时候,脱壳代码会调用VirtualAlloc函数去申请0x00400000这片内存,一般情况是可以申请到这个地址的内存的,这样程序也能正常运行

但是有些时候,是申请不到这个地址,这个时候,如果原来程序没有重定位表的话,程序就运行不起来了

我想问的问题是,像morphine这类壳是怎么保证,大多数情况下可以申请到0x00400000这个地址内存的

现在在写虚拟机调试器,以前没有把虚拟机注入到"被调试程序"时候,申请内存机制应该跟直接用OD没区别,可以申请到0x00400000这片内存,程序能正常运行

但是把虚拟机注入到"被调试进程"后,虽然没有任何模块占用0x00400000这个地址,但是在它不多远处的地址被用了(非模块占用,也非堆栈占用,不知道这片内存用来干嘛了),导致申请0x00400000这个地址的内存不成功,后面出现一些异常情况

各位大侠,有没有办法,让这片内存能申请成功啊?谢谢!

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费
支持
分享
最新回复 (4)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
2
这个问题我也遇到过.
我的处理不太好 不过你可以参考一下:
在进程刚刚创建的时候,这个时候一般是可以申请成功的.我注入一段代码进去 把这段地址保留起来.
当然也可以利用系统加载DLL的原理, 自己构造一个DLL 把0x400000占用起来.反正就是想办法提前申请
然后把VirtualAlloc HOOK起来,当有0x400000范围内的动作的时候 就直接返回给他就是了.

当然壳要反HOOK 之类的就是另外一回事情了.

不过如果如果确定0x400000这个地址没有被模块之类的东西占用. 可以考虑用VirtualFree强行释放.没有测试过,楼主可以试试~
2007-10-16 19:03
0
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
0x00400000之类的地址被占用的情况是非常少见的吧,我一般都是直接分配
2007-10-16 19:15
0
雪    币: 1746
活跃值: (287)
能力值: (RANK:450 )
在线值:
发帖
回帖
粉丝
4
从OD的Alt+M中看 好象0x00400000后面即使有足够分配的空间,也申请不成功

用VirtualFree强行释放那片内存,也申请不成功

看来只能试一试提前申请这片内存了,不过这种方法很不方便,还是期待有更好的办法......
2007-10-16 19:43
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
看加载器的那几个Native API,也许会有线索。
2007-10-16 21:17
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册