首页
社区
课程
招聘
[求助]已知一个进程的句柄,怎么获得这个进程的基地址?
发表于: 2011-6-26 22:08 18258

[求助]已知一个进程的句柄,怎么获得这个进程的基地址?

2011-6-26 22:08
18258
CreateProcess后想获得新进程的基地址,有什么简单那方法吗?

多谢了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (31)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
PEB+0x8处读一下吧~
2011-6-26 22:45
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
3
EnumProcessModule  后 用GetModuleFileNameEx  尝试性获取 各个基址 ,如果获取成功 就是主模块基址...
2011-6-26 22:47
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
4
直接读原始PE文件不行吗?
2011-6-26 23:50
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
win7下用od加载 发现 基地址是动态的
2011-6-27 08:37
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
6
看来lz调试的程序自带重定位节的。能否上传二进制文件看看?我还没见过这样的程序,有点好奇。
2011-6-27 10:27
0
雪    币: 305
活跃值: (36)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
7
GetModuleFileNameEx
GetModuleHandleEx

之类API
2011-6-27 10:58
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
8
这样做应该可以了吧。
1,EnumProcessModules
2,GetModuleInformation,遍历上边得到目标进程的模块列表,找到你要的模块(GetModuleFileNameEx).
2011-6-27 12:05
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
fs->peb。achillis说的很清楚了
2011-6-27 13:04
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
汇编  fs:[30]  已经获得了 fs的值,怎么转化成  地址,为高级语言访问?
地址 fs+30  ?? fs*0xffffffff+30 ?
2011-6-27 14:43
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
有API不用  要自己去硬编码 真是蛋疼
2011-6-27 15:23
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
如果是当前进程,GetModuleHandle( NULL )返回的是什么?

如果有其它进程的handle,

HMODULE hMod;
DWORD cbNeeded;

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded);

hMod应该就是。
2011-6-27 16:31
0
雪    币: 334
活跃值: (78)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
EXE一般没有重定位信息, 就在PE头里找吧
2011-6-27 16:43
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
返回的是程序本身的,
想获得程序通过CreateProcess 启动后的程序的 基地址
2011-6-27 16:45
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
HMODULE hMod;
DWORD cbNeeded;

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded);

hMod应该就是。
2011-6-27 17:41
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
16
也可以写一段shellcode,远线程注入目标进程执行读取peb,将想要的数据存放在shellcode设置的变量里。最后用ReadProcessMemory读出来。
2011-6-27 17:59
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
17
MSDN:

http://msdn.microsoft.com/en-us/library/ms682621(v=vs.85).aspx
2011-6-27 18:33
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
ring3 下能实现吗?
2011-6-28 08:55
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
19
我告诉你吧~但这个方法在某些情况下不一定准确:
先用
        CONTEXT ThreadCxt;
        ThreadCxt.ContextFlags = CONTEXT_FULL;
        GetThreadContext(pi.hThread,&ThreadCxt);
取出EIP,然后用

invoke VirtualQuery,lpControlFunc,addr mbi,sizeof MEMORY_BASIC_INFORMATION 不过这里你明显需要用VirtualQueryEX了

之后要用mbi.BaseAddress还是mbi.AllocationBase你自己决定喽! 上面说了某些情况下会不准确,什么情况下呢?就是如果当前EIP正运行在一个动态申请的内存上,一般高级语言写的程序不会这么做,壳才这么做.

上面achillis说的PEB我只知道在进程创建的时候可以获取到,不知道进程运行后怎么获取,如果能获取的话,建议还是用这个方法方便点!

AZMC的方法也行,如:

invoke GetModuleHandleExA,GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,@EIP,addr hModule

但可惜的是,好像只能用在自己身上...
2011-6-28 09:13
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
20
额,刚没仔细看你内容,你是想获取自己创建的进程基地址?那获取PEB的方法告诉你:(需要是暂停或者调试方式创建的进程才可以)
        CONTEXT ThreadCxt;
        ThreadCxt.ContextFlags = CONTEXT_FULL;
        GetThreadContext(pi.hThread,&ThreadCxt);
        printf("Target PEB Addr : 0x%08X.\n",ThreadCxt.Ebx);

还有,这时候EAX的地址是程序入口点!

可以参考类似的文章:http://hi.baidu.com/viruswizard/blog/item/466279123106db8a6538db9c.html
2011-6-28 09:30
1
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
21
可以啊,而且随时可以读……
2011-6-28 10:22
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
多谢按照这种方法实现了,
但是还是有点想不通,
在win7下写一个内存注册机,发现每次需要补丁的地址不一样,通过上面的方法 获得 基地址还是400000,
反正相对入口地址的偏移量是固定的 就直接用入口地址+偏移量作补丁地址了。
疑惑是win7加载应用程序为什么 peb中基地址命名是400000,但是每次程序的入口的地址还是动态的?
2011-6-28 16:39
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
23
有这么神奇的事?你确定是入口地址?
2011-6-28 19:55
0
雪    币: 156
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
通过peb 获得的 基地址 是 400000

但是win7不是按照这个基础地址 加载的,不知道为什么?
2011-6-28 20:01
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
25
如果不是入口地址,则有可能是后面动态申请的内存~
2011-6-28 20:03
0
游客
登录 | 注册 方可回帖
返回
//