本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 8121|回复: 20

用 GDI Object Table 来找被 Rootkit 隐藏的进程(源码) [复制链接]

Rank: 1

发表于 2010-4-18 21:53:47 |显示全部楼层
Windows 的图形系统分为三个部分:
- 客户端的DLL GDI32.DLL
- 内核引擎Win32k.sys
- 各种图形驱动程序

Windows 把GDI Objects都储存在一个系统的句柄表里(固定)。

GDI句柄表是储存在内核模式地址的空间中,使图形驱动可以很容易地访问它。

Windows也在用户模式地址空间创建了一个只能读的GDI句柄表。

GDI句柄表的每个表项是一个16字节的结构,如下:
  1. typedef struct _GDITableCell
  2. {
  3.     void          *  pKernel;  // 内核模式对象的指针
  4.     unsigned short  _nProcess; // 进程ID
  5.     unsigned short  _nCount;   
  6.     unsigned short   nUpper;   
  7.     unsigned short   nType;   
  8.     void          *  pUser;    // 用户模式对象的指针
  9. } GDITableCell, *PGDITableCell;
复制代码

一般的Rootkit都不改内核里的GDI句柄表,而是通过hook ZwQuerySystemInformation的方式来隐藏自己的进程。

这样我们就可以利用GDI句柄表里储存的进程ID来探测系统里是否有被Rootkit隐藏的进程。

我们可以从GDI32.dll里导出的GdiQueryTable()程序来检测在用户模式的GDI句柄表。

请看我编写的程序!

请多多指教!

GdiQueryTable.zip

22 KB, 下载次数: 849

Rank: 4

发表于 2010-4-19 00:24:23 |显示全部楼层
主要是这年头大家都不用进程了。。。

Rank: 2

发表于 2010-4-19 00:25:11 |显示全部楼层
不错的源码
多谢LZ

Rank: 1

发表于 2010-4-19 00:31:09 |显示全部楼层
DLL+sys

Rank: 2

发表于 2010-4-19 00:36:53 |显示全部楼层
不错的思路啊,
支持一下

Rank: 1

发表于 2010-4-19 01:01:42 |显示全部楼层
学习了。只有PID~

Rank: 1

发表于 2010-4-19 03:19:31 |显示全部楼层
2楼命中...那啥实在是费力不讨好

Rank: 1

发表于 2010-4-19 12:17:38 |显示全部楼层
好  简单有效

Rank: 2

发表于 2010-4-19 13:26:27 |显示全部楼层
嗯,真的好久没有用进程了

Rank: 1

发表于 2010-5-17 17:42:30 |显示全部楼层
要是进程没有图形界面呢?你还能在里面找到相关的cell么?貌似不行了吧?

Rank: 1

发表于 2010-5-17 20:43:52 |显示全部楼层
进程如svchost.exe, services.exe 没有图形界面,但是在GDI句柄表里有它们的纪录。。。

Rank: 1

发表于 2010-5-17 21:09:09 |显示全部楼层
刚刚在Windows Vista 和 Windows 7 测试一下,GdiQueryTable() 没有在GDI32.dll里导出.

等有空的时候在研究...

Rank: 1

发表于 2010-5-24 15:29:20 |显示全部楼层
同问9楼的问题。。。如果没图形界面,有没有呢。。

Rank: 1

发表于 2010-5-24 18:25:24 |显示全部楼层
同问9楼的问题。。。如果没图形界面,有没有呢。。

请看10楼的解答。。。

Rank: 1

发表于 2010-5-24 20:03:04 |显示全部楼层
我也发现了,却是可以搞出来,牛人给个解释吧。

Rank: 1

发表于 2010-5-25 12:33:37 |显示全部楼层
那个ncount不是应该是句柄的计数么?在2k里面可以作为进程的pid么?

Rank: 1

发表于 2010-5-25 13:44:57 |显示全部楼层
这个 第一次见到

Rank: 1

发表于 2010-5-26 12:44:10 |显示全部楼层
dll + sys 难怪,都是APC惹的火.

Rank: 1

发表于 2010-6-9 10:18:09 |显示全部楼层
14楼 ssrs:我也发现了,却是可以搞出来,牛人给个解释吧。
这个大概也只有微软的职员才知道。。。

15楼 ssrs:那个ncount不是应该是句柄的计数么?在2k里面可以作为进程的pid么?
在2k里,ncount 的位子是pid。我也不知为何如此。。。

Rank: 1

发表于 2010-6-18 14:48:31 |显示全部楼层
奇妙啊
您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-5-26 16:08 , Processed in 0.033482 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部