首页
社区
课程
招聘
[原创]R3下取伪句柄表的几种方式
发表于: 2018-4-7 12:26 7820

[原创]R3下取伪句柄表的几种方式

2018-4-7 12:26
7820

R3下取伪句柄表的几种方式

最近碰到一个简单的老游戏,看了一下它的防多开就是通过 CreateFileMapping 函数以只读 方式创建了个文件映射对象 就和互斥体一样,本来劫持个DLL hook下就完事了,但是发现只有几个陌生的DLL可劫持 重点在于这个DLL加载时候对多开的检测已经完成,这就十分尴尬了。。。只好通过远程关闭文件映射句柄来实现多开 然后发现既然DLL可以劫持,又再句柄创建完成后,何不用DLL劫持来干掉句柄,这就滋生出来了几种操作了...

好了废话不多谈,开始写了,只适合小白看的基础性文章~~

句柄(Handle)是Windows表示对象的(不是C++对象)
HWND就是其中一种,表示为窗口句柄。还有其他很多如图标句柄(hIco)、光标句柄(hCursor)、线程句柄(hThread)等等..

https://blog.csdn.net/shuyong1999/article/details/7171683
https://blog.csdn.net/ustbkuang/article/details/77862720
https://blog.csdn.net/maowei117/article/details/55254855
上面的为各大牛们对句柄的一些理解

对于句柄来说,我们只要获得了目标的句柄就可以为所欲为了,比如获得有权限的进程句柄就可以读写目标进程数据了(有保护的当我没说...),窗口句柄可以向指定窗口发送消息,线程句柄可以结束(Terminate)或是挂起Suspend指定线程(不是本地进程当我没说...)
当然对于互斥体句柄(Mutant)或是Section类型的句柄还是可以给它关闭为所欲为的。

我们知道系统层有句柄表,而用户层也能靠3环的几个函数获取:

每一个enum元素对应着查询信息,而 SystemHandleInformation(0x10) 查询的为 SYSTEM_HANDLE_INFORMATIO 结构体指针的信息:

到了这里思路就很清晰了,那么怎么才能区分句柄获得我们想要的句柄呢 ?这里就用到另外一个函数 NtQueryObject :

NtQueryObject 函数用来查询对象句柄信息,当 OBJECT_INFORMATION_CLASS参数为ObjectNameInformation(1)和ObjectTypeInformation(2)时分别查询句柄的名称和句柄类型 它们的定义和查询的结构体如下:

到了这里就明了很多了,下面写个简单的Demo实现获取目的进程的句柄:

上面写个获取自身进程句柄的整个逻辑,下面还有一种获取指定进程伪句柄表的方法

查询这个干嘛呢?我们接下来穷举目标进程句柄。没错,是穷举...刚开始是在博客里看到一位大牛写的,发现他思路很清晰,但是代码有点问题,都把逻辑给混淆了。
句柄是以4开始,以4为单位递增...:

从上图不难发现都是句柄值以4递增的,我们穷举的话判断句柄的有效性就可以用函数DuplicateHandle函数实现拷贝有效句柄,失败返回FALSE 从而就可以判断句柄的有效性了。

到这里就很简单了,上述已经获得了想到的句柄,但是关闭句柄也有两种不同的情况,本地句柄调用函数CloseHandle即可,而远程的句柄如何关闭呢 ?(就像知道目标的Patch地址而无法在本地执行操作一样),实际调用函数DuplicateHandle即可。

DUPLICATE_CLOSE_SOURCE(0x00000001) Closes the source handle. This occurs regardless of any error status returned.
DUPLICATE_SAME_ACCESS(0x00000002) Ignores the dwDesiredAccess parameter. The duplicate handle has the same access as the source handle.

对于远程和本地两种情况都有两种取的句柄的方法,从而针对不同的情况有4种方法,还有通过DuplicateHandle复制的句柄记得CloseHandle,这样才可以实现跨进程关闭句柄,本地的进程不用DuplicateHandle直接可以关闭,有点啰嗦了...

这里就不贴代码了,都打包在附件上。不然显得有点...占空间了...

Ps:

大牛们对于这种小问题都是一笔带过的,只给了我们这些小白点关键代码和思路,好让我这些 “跑龙套” 方便整理。。。
好了不瞎扯了,上面是一方面,另一方面是还是自己的代码看的习惯.....主要是在学 Markdown 哈哈哈!!

上述如有有误,还请各位指证!
如有例外,还请各位大侠补充!

 
 
 
 
 
 

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

最后于 2018-4-7 13:41 被AperOdry编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 775
活跃值: (2292)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
锚点各位怎么做的呀  ,初学Markdown请指教.
2018-4-7 12:30
0
雪    币: 775
活跃值: (2292)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
找到了  [TOC]标签就是了  还可以自动排列
2018-4-7 13:48
0
雪    币: 914
活跃值: (2458)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
4
文章整理的不错,但是打上原创,有点过分
2018-4-7 14:41
0
雪    币: 799
活跃值: (457)
能力值: ( LV12,RANK:280 )
在线值:
发帖
回帖
粉丝
5
总结不错
2018-9-4 17:19
0
游客
登录 | 注册 方可回帖
返回
//