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

原创 2011年05月23日 21:26:00

 菜鸟习作,老鸟勿笑~~

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

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

一句话:内核如沼泽。

首先是找到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,明天干~~大笑

Windows内核编程 文件监控(ssdt hook)

本文主要针为进行内核编程的一些初学者提供一些错误,如有错误,希望大家能够指出。         这里先简单介绍一下概念。说到SSDT HOOK,可以从MEP技术说起,MEP(即执行路径修改)主旨就是拦...
  • u013032601
  • u013032601
  • 2016年06月23日 15:46
  • 962

Win64 驱动内核编程-19.HOOK-SSDT

HOOK SSDT     在 WIN64 上 HOOK SSDT 和 UNHOOK SSDT 在原理上跟 WIN32 没什么不同,甚至说 HOOK 和 UNHOOK 在本质上也没有不同,都是在指定...
  • u013761036
  • u013761036
  • 2017年03月19日 15:16
  • 740

SSDT详解

本文对于SSDT的原理和作用进行细致入微的解释和说明,并且配以大量实例,相信您定会有所收获!什么是SSDT?什么是SSDT?自然,这个是我必须回答的问题。不过在此之前,请你打开命令行(cmd.exe)...
  • yxyhack
  • yxyhack
  • 2010年03月18日 10:30
  • 2220

Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现

上篇文章知道了寻找SSDT表的方法,这篇记录一下如何实现SSDT表的Hook。
  • zfdyq0
  • zfdyq0
  • 2014年05月23日 22:48
  • 5772

SSDTHook实例--编写稳定的Hook过滤函数

讲解如何写Hook过滤函数,比如NewZwOpenProcess。打开进程。很多游戏保护都会对这个函数进行Hook。由于我们没有游戏保护的代码,无法得知游戏公司是如何编写这个过滤函数。   我看到很多...
  • QQ1084283172
  • QQ1084283172
  • 2015年07月04日 13:45
  • 1684

查看SSDTHOOK其修改

#define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_funct...
  • trents
  • trents
  • 2012年02月29日 18:44
  • 1106

SSDT Hook的两种方式

#ifndef _SSDT_H_ #define _SSDT_H_ #include typedef struct _SERVICE_DESCRIPTOR_TABLE { PULONG Ser...
  • l0g1n
  • l0g1n
  • 2013年11月28日 23:54
  • 1898

ShadowSSDT Hook

ShadowSSDT表的获取 这里的ShadowSSDT表的获取是通过函数KeAddSystemServiceTable来获取的。 使用这个函数的原因: 1、这个函数是已经导出的,可以在代码...
  • l0g1n
  • l0g1n
  • 2013年12月26日 00:49
  • 2655

内核编程之SSDTHook(1)原理

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: 说驱动开发这么长时间了,也玩玩内核钩子,钩子(Hook)技术是一种截获对某一对象访问的技...
  • zuishikonghuan
  • zuishikonghuan
  • 2016年03月11日 14:19
  • 4132

SSDT Hook

看看大概的调用情况 左边是2000有的,右边是xp后走的 Ntdll.dll 中的 API 是一个简单的包装函数。 当 Kernel32.dll 中的 A...
  • zhuhuibeishadiao
  • zhuhuibeishadiao
  • 2016年04月10日 18:01
  • 1320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:成功实现通过SSDT HOOK拒绝指定文件的访问
举报原因:
原因补充:

(最多只允许输入30个字)