首页
社区
课程
招聘
[求助]如何让指定内存地址不被占用,可以申请,比如0x400000
2019-1-15 10:30 9859

[求助]如何让指定内存地址不被占用,可以申请,比如0x400000

2019-1-15 10:30
9859
我的exe是运行在高空,比如0x2000000,试图在0x400000这个地方放一入一个exe。
但是VirtualAlloc(0x400000, nSize, MEM_RESERVE, PAGE_READWRITE);的时候有时成功,有时失败,返回错误码487试图访问无效的地址。
 失败时分析发现这个地址已经被占用了,但是我的exe并没有申请内存的操作,可能是因为其他的dll申请了内存,占用了0x400000这个地址。
请教各位大牛如何才能让0x400000不被其他dll占用,我自己每次 VirtualAlloc(0x400000)都能成功呢?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞1
打赏
分享
最新回复 (22)
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2019-1-15 10:38
2
0
生成环境下申请内存的人千奇百怪 你没法阻止别人向这个地方钦点内存

如果你只是在纯净虚拟机里面玩儿,那你直接在进程创建的时候就占坑 就OK了
最后于 2019-1-15 10:39 被hzqst编辑 ,原因:
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 10:45
3
0
hzqst 生成环境下申请内存的人千奇百怪 你没法阻止别人向这个地方钦点内存如果你只是在纯净虚拟机里面玩儿,那你直接在进程创建的时候就占坑 就OK了
进程创建时占坑是什么意思呢?占坑的话,肯定要先进入到exe的入口才能操作吧,除非用另外一个进程来远程占坑,但是exe进入到入口点的时候,exe需要的系统DLL就已经加载了,这些个DLL里面可能就已经申请了0x400000这个地址了。
雪    币: 914
活跃值: (2188)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
万剑归宗 1 2019-1-15 11:24
4
0
麻烦你查一下MSDN VirtualAlloc的参数
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 11:27
5
0
万剑归宗 麻烦你查一下MSDN VirtualAlloc的参数[em_16]
第一个参数可以指定内存地址啊,只要是前面预留过的内存地址
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 11:29
6
0
你的意思是,第一个参数不为空,第3个参数就不能是MEM_RESERVE,所以不能用VirtualAlloc来申请指定内存地址?
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2019-1-15 11:32
7
0
xxyiyi 进程创建时占坑是什么意思呢?占坑的话,肯定要先进入到exe的入口才能操作吧,除非用另外一个进程来远程占坑,但是exe进入到入口点的时候,exe需要的系统DLL就已经加载了,这些个DLL里面可能就已经申 ...
我说的就是远程占坑,暂停方式拉起
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 11:40
8
0
hzqst 我说的就是远程占坑,暂停方式拉起
一些壳程序肯定是没有用远程占坑的方法的,不知道他们是如何实现的
雪    币: 288
活跃值: (64)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
MCYMYC 2019-1-15 12:55
9
0
xxyiyi 一些壳程序肯定是没有用远程占坑的方法的,不知道他们是如何实现的[em_16]
人家都说了...暂停方式拉起,然后申请地址....不关有没有壳的事....除非他入口点就已经把地址占了(易语言软件)....但你说了是其他DLL申请的,那就不存在这个问题了
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 14:08
10
0
MCYMYC 人家都说了...暂停方式拉起,然后申请地址....不关有没有壳的事....除非他入口点就已经把地址占了(易语言软件)....但你说了是其他DLL申请的,那就不存在这个问题了
这个是不关有没有壳的事,我是说加壳软件就是用我说的方法来实现的,将自己的代码放高空间运行,将需要加壳的exe放到0x400000这个地址,而且加完壳之后就一个exe,他肯定是实现了在0x400000这个地址申请空间每次都成功的,就是不知道是如何实现的
雪    币: 248
活跃值: (3784)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luskyc 2019-1-15 14:16
11
0
哈哈,ls几位都在欺负你呢,lz
我敢打赌,他们都有办法,而且不止一种
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 14:40
12
0
yy虫子yy 哈哈,ls几位都在欺负你呢,lz 我敢打赌,他们都有办法,而且不止一种
不至于吧
雪    币: 47
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
frdGo 2019-1-15 16:46
13
0
应该很简单, 就是你的exe要尽量少的依赖dll, 如果依赖也尽量选择 静态链接编译, 最好是只依赖那几个核心windows dll, 它们肯定不会加载到400000, 这样的你的exe跑起来时40000地址就是空的, 这样你就可以申请那块地址了
好像加过壳的程序通常不会有显式的dll依赖, 运行之后它会自己去枚举系统dll, 然后找到loadlibrary  和 getprocadd, 再修复导入表, 释放目标exe到400000然后运行
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-15 18:14
14
0
frdGo 应该很简单, 就是你的exe要尽量少的依赖dll, 如果依赖也尽量选择 静态链接编译, 最好是只依赖那几个核心windows dll, 它们肯定不会加载到400000, 这样的你的exe跑起来时400 ...
像你说的那样做也是可以的,可以写一个只导入ntdll.dll的exe,应该就没有问题。但是我这要做的目的就是为了方便,如果每用一个API就需要去get下地址的话,那还不如换一个方式去做了
雪    币: 248
活跃值: (3784)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luskyc 2019-1-15 23:23
15
0
xxyiyi 像你说的那样做也是可以的,可以写一个只导入ntdll.dll的exe,应该就没有问题。但是我这要做的目的就是为了方便,如果每用一个API就需要去get下地址的话,那还不如换一个方式去做了[em_27]
人家13楼都已经提醒LZ了,自己想去吧,领悟不了就怨不得别人
最后于 2019-1-15 23:24 被luskyc编辑 ,原因:
雪    币: 242
活跃值: (89)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pull 1 2019-1-18 08:44
16
0
不是直接加一个section对应的VirtualAddress在0x400000就可以了吗?
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2019-1-21 17:08
17
0
pull 不是直接加一个section对应的VirtualAddress在0x400000就可以了吗?
没有听懂你说的什么意思呢,0x400000地址已经被占用了,我没有办法去操作这个地址
雪    币: 305
活跃值: (403)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
清风qfccc 2020-4-5 21:31
18
0
楼主解决没 同遇到这个问题了
雪    币: 43
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
肱桡鸡 2021-7-26 18:20
19
0
我的解决思路:https://bbs.pediy.com/thread-268594.htm
雪    币: 337
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxyiyi 2021-8-11 16:04
20
0
清风qfccc 楼主解决没 同遇到这个问题了
解决了,就是先将400000这个位置占住
雪    币: 187
活跃值: (2406)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
杰克王 2021-8-11 17:24
21
0
在弄一个空的exe(占坑 0x400000),导入表注入你的dll,运行exe即可占坑这个位置
雪    币: 160
活跃值: (341)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
气旋 2022-4-12 10:35
22
0
xxyiyi 解决了,就是先将400000这个位置占住
请问楼主用什么方式占住的呢?是创建一个空壳进程占住,然后替换他是吗?
雪    币: 848
活跃值: (3525)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
逆向爱好者 2023-3-25 14:05
23
0
就不能想过不一定要申请这个地址吗
游客
登录 | 注册 方可回帖
返回