首页
论坛
课程
招聘
[原创]用DDDK编写驱动,修改SSDT表HOOK NTDebugActiveProcess函数
2007-8-20 22:13 18467

[原创]用DDDK编写驱动,修改SSDT表HOOK NTDebugActiveProcess函数

2007-8-20 22:13
18467
用DDDK编写驱动,修改SSDT表HOOK NTDebugActiveProcess函数

代码如下
unit driver;

interface

uses DDDK;

function _DriverEntry(DriverObject: PDriverObject; RegistryPath:
  PUnicodeString): NTSTATUS; stdcall;

var
  POldDebugActiveProcess: PLong;  //保存NTDebugActiveProcess函数在SSDT表中的指针。
  OldDebugActiveProcessAdd : PLong; //保存原来的NTDebugActiveProcess函数的地址。
implementation

function MyDebugActiveProcess(PID:ULong):Boolean;stdcall; //Hook函数
begin
        Result := False; 
end;

procedure DriverUnload(DriverObject: PDriverObject); stdcall;
begin
  asm   //关中断
                cli
                mov eax,cr0
                and eax,not $10000
                mov cr0,eax
  end;

  POldDebugActiveProcess^ := ULong(OldDebugActiveProcessAdd); //恢复SSDT

  asm   //开中断
    mov  eax,cr0
    or   eax,$10000
    mov  cr0,eax
    sti
  end;
  //DbgPrint('DriverUnload(DriverObject:0x%.8X)',[DriverObject]);
  //DbgPrint('DriverUnload(-)',[]);
end;

function _DriverEntry(DriverObject: PDriverObject; RegistryPath:
  PUnicodeString): NTSTATUS; stdcall;
begin

  DriverObject^.DriverUnload := @DriverUnload;
  POldDebugActiveProcess := Pointer(ULONG(KeServiceDescriptorTable.ServiceTableBase) + $39
    * 4); //$39为NTDebugActiveProcess在XP SP2中的服务号,可由IceSword查出。
  OldDebugActiveProcessAdd := Pointer(POldDebugActiveProcess^);//保存原来的NTDebugActiveProcess函数地址,以备驱动卸载时候恢复。

  asm  //关中断
                cli
                mov eax,cr0
                and eax,not $10000
                mov cr0,eax
  end;
  POldDebugActiveProcess^ := ULong(@MyDebugActiveProcess);//修改SSDT表,将服务号为$39的函数改为自己的钩子函数地址,以实现HOOK。

  asm   //开中断
    mov  eax,cr0
    or   eax,$10000
    mov  cr0,eax
    sti
  end;
  Result := STATUS_SUCCESS;


end;

end.



钩子函数中可以判断PID号,决定是否放行,放行则在钩子函数中调用原来的NTDebugActiveProcess函数.否则直接返回False.HOOK成功后所有调用DebugActiveProcess的程序将会失效.当然可以按照你的需要HOOK更多的系统服务函数.同一服务函数的服务号在每个操作系统版本中是不同的.下面附件中编译完成的驱动请在WinXP SP2的环境下测试.否则可能会导致直接重启.开个NotePad用OD附加你的NotePad即能看到效果.
DDDK可以在盒子 http://www.2ccc.com/article.asp?articleid=3681 下载得到.

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
太虚伟了 活跃值 2007-8-20 22:47
2
0
呵呵,不错...终于看到有人用这个写驱动了
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
山中古琴 活跃值 2007-8-21 08:23
3
0
PASCAL的阿
改成C的多好
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
大师兄 活跃值 2007-8-21 08:48
4
0
建议加入精华
雪    币: 661
活跃值: 活跃值 (619)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
qyc 活跃值 4 2007-8-21 09:56
5
0
高手

测试还行,呵呵,以后又可做坏事了
雪    币: 1835
活跃值: 活跃值 (100)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 活跃值 8 2007-8-21 10:25
6
0
不错,大家都被大师兄的文体风格感染了 。。。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sheeee 活跃值 2007-8-21 10:42
7
0
这样也可以啊
雪    币: 38
活跃值: 活跃值 (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
炉子 活跃值 3 2007-8-21 12:56
8
0
DDDK 呵  真不错的玩意儿
雪    币: 351
活跃值: 活跃值 (336)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
执着我一生 活跃值 2007-8-21 15:59
9
0
DDDK?....
研究下
雪    币: 217
活跃值: 活跃值 (18)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 活跃值 13 2007-8-21 21:17
10
0
......................no words...
WDM MS不是申请了专利的?怎么Delphi 可以编译?????
雪    币: 370
活跃值: 活跃值 (121)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
bzhkl 活跃值 5 2007-8-22 14:12
11
0

雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mbaighttt 活跃值 2007-8-24 08:35
12
0
真是长见识了,原来DELHPI还可以用来写sys啊
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hcong 活跃值 2007-8-28 22:46
13
0
我没有学过驱动,有教学吗??
雪    币: 200
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
jelly 活跃值 1 2007-8-31 13:41
14
0


特地来仰慕一下高手
雪    币: 116
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
boainfall 活跃值 2007-10-22 14:25
15
0
这是否表示着,任何函数都可以用这种方法进行hook
游客
登录 | 注册 方可回帖
返回