成功实现通过SSDT HOOK拒绝指定文件的访问

来源:互联网 发布:星图数据官网 编辑:程序博客网 时间:2024/04/27 16:49

 菜鸟习作,老鸟勿笑~~

---------------------------------------------------------------------------------------------------------------------------------

经历两天终于把这个搞出来了,作为一个菜鸟还是有点成就感滴~~嘿嘿。下面记录一下实现过程中的各种问题,作为以后的参考。

一句话:内核如沼泽。

首先是找到KeServiceDescriptorTable,这个还是比较简单的,因为NTOSKRNL已经道出了这个表的指针,所以只要extern一下就行了。之后的修改SSDT表的内容也比较顺利。下面是KeServiceDescriptorTable的结构:

保存在表中的函数地址其实就是个跳转的过程,每个地址对应的函数进去之后的第一句都是mov ID的形式,所以第二字节就是NTDLL内核接口的Service ID。

然后就是根据ObjectAttributes->ObjectName得到文件名的过程。由于菜啊,这中间出过很多问题。

最重要的一个就是UNICODE是两字节,这个在保存UNICODE_STRING 长度的时候极为重要,我就是一直忘记,所以长度总是少了一半。

然后就是字符串的复制--要把提取到的字符串放到caller提供的buffer里。字符串复制其实直接内存复制就行了。本人受C语言课的毒害,还自己写了个字符串复制函数,结果在内存访问方面有bug。直接RtlCopyMemory完事。

字符串比较也有现成的函数RtlCompareUnicodeString。我巨汗!!!

在detour函数里,如果文件名和你想要的一样就返回STATUS_ACCESS_DENIED,如果不一样就call真正的内核函数。

---------------------------------------------------------------------------------------------------------------------------------

下一步要实现和应用层的交互,主要是DeviceIoControl,明天干~~大笑

原创粉丝点击