首页
社区
课程
招聘
[原创]Hook Shadow SSDT
发表于: 2008-6-2 23:21 96961

[原创]Hook Shadow SSDT

2008-6-2 23:21
96961

网上很多文章都有关于SSDT的完整的实现,但是没有关于Shadow SSDT的完整实现,目前最好的文章是《shadow ssdt学习笔记 by zhuwg》,我这里的程序也很多参考了他的文章,在这里谢谢了。我这里给出一个hook shadow ssdt的完整实现的驱动和3层的代码。

这里主要是hook 了NtUserFindWindowEx,NtUserBuildHwndList,NtUserQueryWindow,NtUserGetForegroundWindow,NtUserWindowFromPoint来防止其他应用程序通过FindWindow,EnumWindow,WindowFromPoint,GetForegroundWindow这些函数来枚举我们的窗口,不过这个程序对于GetWindowText这个东西无法防护,如果有朋友在驱动层实现了对该函数的保护,是否能一起交流呢。

关于hook的流程,看了上面zhuwg的文章,大家应该很好的了解了。下面的代码也很简单。大家随便看看吧,通信方面,随便使用了METHOD_NEITHER方法,这个方法不好,有问题,不过懒得改了,懂驱动的应该很容易改为BUFFERED模式吧。

在这里谢谢给了很多帮助的各位牛人,特别是NetRoc,很细心的帮我测试。。


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

上传的附件:
收藏
免费 8
支持
分享
最新回复 (70)
雪    币: 354
活跃值: (10)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
nice。。。
2008-6-2 23:43
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
3
gooooooooooooooooooood
2008-6-3 08:50
0
雪    币: 564
活跃值: (42)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
4
VERY NICE
2008-6-3 09:24
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
5
if(memcmp((PVOID)dwordatbyte, &KeServiceDescriptorTable, 16) == 0)
这个处理的好,充分利用两者的特点。

还有找csrss.exe的句柄用的办法都很不错。

好文,学习。
2008-6-3 10:20
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
6
目前qq三国游戏中,也采用了类似的手法,hook shadow ssdt。保护常规的API函数。
他们是:
    GetDC
    GetDCEx
    WindowFromPoint
    GetForegroundWindow
    FindWindowEx
    EnumWindows
    EnumChildWindows

此文已被编入rootkit专题中。
2008-6-3 10:29
0
雪    币: 266
活跃值: (60)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
恩,其实这也是外挂的保护技术,但是有一个没办法解决,就是GetWindowText这个函数,这个函数在03和xp下的表现是不同的,据《window编程启示录》那里写的,在如果是本进程,则为发送WM_GETTEXT消息,如果为其他进程,则是其他的做法。

具体这部分内容,在csdn的读书频道上有。
地址如下:http://book.csdn.net/bookfiles/472/10047216533.shtml
2008-6-3 12:53
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
8
只能说学习,帮顶了。。。
2008-6-4 12:31
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
9
METHOD_NEITHER方法,这个方法不好

不用这么说,,其实只要按照规范使用,一样很好
建议参考那篇详细的4种io通信解说  搜索1下论坛即可
2008-6-7 22:25
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
问一个初级问题,我装了Visual 2005与ddk开发工具包,怎样设置环境可以成功编译,期待中......
2008-6-8 00:53
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
11
楼上的
直接进入ddk环境 执行build就可以了
2008-6-8 06:27
0
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
12
搜藏了。
拿回电脑后慢慢看。
2008-6-8 20:36
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
NICE JOB
2008-6-9 13:18
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
非常感谢“11楼”
2008-6-14 11:23
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
好强大,没的说了。正好有用。
2008-6-15 02:51
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好文章,学习~
2008-6-15 10:04
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好   好文  学习了
2008-6-20 17:35
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
多谢LZ了。
2008-6-24 11:08
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
谢谢楼主, 但在我机子上测试了一下,运行都正常,只是ring3程序关闭时候会蓝屏.
2008-8-15 13:21
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
找到原因了,是我把驱动部分误操作后再编译,因此安装后的驱动有错.
重新编译正确的版本 就好了.
2008-8-15 14:00
0
雪    币: 147
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Handles->Information[r].ObjectTypeNumber == 21

21是XP下的,2K和2K3下这个值是多少?
2008-9-9 22:16
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MCY
22
很高深啊,学习了。
2008-9-10 11:48
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
非常感谢,太THANKS了
2008-9-27 23:04
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
卡巴2009的主动怎么过啊 ?这个貌似过不了卡巴2009
2008-9-28 14:46
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
是哦,卡巴2009的过不了,
2008-9-29 11:21
0
游客
登录 | 注册 方可回帖
返回
//