首页
社区
课程
招聘
[旧帖] [求助]关于 SSDT Hook 0.00雪花
发表于: 2013-4-8 14:17 1486

[旧帖] [求助]关于 SSDT Hook 0.00雪花

2013-4-8 14:17
1486
各位大大们 小弟新人一枚 问的问题有点小白 请多包涵~

我在替换SSDT中 NtSetInformationFile这个函数地址的时候
首先在SSDT表中查找NtSetInformationFile这个索引的时候按如下这么做的:
        UNICODE_STRING strFuncName;
        RtlInitUnicodeString(&strFuncName, L"NtSetInformationFile");
        pFuncSDT = KeServiceDescriptorTable->ServiceTableBase + *(PULONG)((PUCHAR)MmGetSystemRoutineAddress(&strFuncName) + 1);
        DbgPrint("[Info] pFuncSDT: %X\n",pFuncSDT);

系统就蓝屏了, 但是我将RtlInitUnicodeString(&strFuncName, L"NtSetInformationFile");中的L“NtSetInformationFile“换成L“ZwSetInformationFile” 就正常了。

我又用别的方法知道了SSDT表中NtSetInformationFile的索引是0xE0(xp sp2),替换成zw后确实也是这个索引。

我想问为什么用Nt就会蓝屏,而用Zw就能正常工作且跑出来的结果也是0xE0呢?

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大大们在哪里...
2013-4-8 16:16
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
3
如果楼主懂内核下, Nt* 系列函数和 Zw*系列函数的区别,这个问题就迎刃而解了。。

PS:(PUCHAR)MmGetSystemRoutineAddress(&strFuncName)  如果得到的是NULL,必蓝。
2013-4-8 16:35
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我看了好久nt和zw函数的区别 包括内核态和用户态调用他们的时候的区别 但是还是不知道这里为什么写zw行写nt不行 求大大点拨一下下 谢谢
2013-4-8 17:15
0
雪    币: 1
活跃值: (1174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
在NTDLl里Zw和Nt是一样的,指到同一地址.

内核里不同, SSDT里是NtXxx, Zw和NTDLL的Zw差不多,  你那段代码就是取调用号, Zw才有相应的代码

Zw版本执行时,又会到KiFastCallEntry转一圈,最后执行Nt版本。这么做的目的是在栈上构造KTRAP_FRAME,
此时其PreviousMode会是KernelMode (若为UserMode时NtXxx会Probe参数)

你自己翻翻WRK好了。
2013-4-8 18:07
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢回答~好像明白了~
2013-4-9 10:12
0
游客
登录 | 注册 方可回帖
返回
//