首页
社区
课程
招聘
[求助]如何在ring0下获取某个进程的句柄?
2010-5-9 22:58 7307

[求助]如何在ring0下获取某个进程的句柄?

2010-5-9 22:58
7307
前提条件是我只知道这个进程名,PID除外。我怎么在ring0下获取这个进程。开始自己想到了遍历EPROCESS.来查找这个进程的EPROCESS。问题又来了,那怎么在EPROCESS结构中获取这个进程的句柄呢?

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

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jasonzhou 2010-5-10 09:46
2
0
之前好像有人发过类似的帖,你搜搜看
雪    币: 386
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
lovesuae 1 2010-5-10 12:56
3
0
eprocess都有了......
雪    币: 75
活跃值: (438)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
skypismire 1 2010-5-10 18:22
4
0
看了下,好像还没有一个什么系统函数可以通过eprocess获得进程句柄的。虽然每个进程都有一个句柄表,但你想要的不会在里面。eprocess 也好像没有其他相关参数来保存进程句柄的。
要找句柄,估计只有去句柄表里面找。创建句柄一般是用这个函数完成的,
ExCreateHandle(IN PHANDLE_TABLE HandleTable,
               IN PHANDLE_TABLE_ENTRY HandleTableEntry)。第一个参数是内核句柄表,第二个参数HandleTableEntry-〉Object把 句柄和对应的对象关联起来了。object是对象头,应该可以根据eprocess推算出对象头,然后遍历内核句柄表,找到object指针一致的项,应该就能把此进程的句柄挖出来
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haochao 2010-5-10 23:01
5
0
看来这有这样了,由于PID是变换的。我可以通过找某进程的PID再到pspCidTAble表中去索引他的句柄,相信应该能搞定。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
曾经沧海 2010-8-11 17:36
6
0
ZwOpenProcess?不能直接获得句柄了么?
雪    币: 7533
活跃值: (2136)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
寒冰心结 2010-8-11 18:00
7
0
晕倒.

顺着 PsActiveProcessHead找到目标EPROCESS.[找的时候PsGetProcessImageFileName可能有点用]

然后 ObOpenObjectByPointer之.

记得减少引用.

完事.
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
Fypher 4 2010-8-12 09:11
8
1
PsLookupProcessByProcessId ,可以由pid获得eprocess
ZwOpenProcess,可以由pid获得handle
ObReferenceObjectByHandle,可以由handle获得eprocess
遍历进程可以搜索链表(不加锁有概率会蓝),也可以ZwQuerySystemInformation
雪    币: 132
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
jokersky 1 2010-10-28 06:20
9
0
看不懂~
努力学习~
希望有一天可以看懂~
楼主辛苦~
游客
登录 | 注册 方可回帖
返回