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

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

2007-8-20 22:13
20541
用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 下载得到.

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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,不错...终于看到有人用这个写驱动了
2007-8-20 22:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
PASCAL的阿
改成C的多好
2007-8-21 08:23
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
建议加入精华
2007-8-21 08:48
0
雪    币: 707
活跃值: (1301)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
高手

测试还行,呵呵,以后又可做坏事了
2007-8-21 09:56
0
雪    币: 1946
活跃值: (243)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
6
不错,大家都被大师兄的文体风格感染了 。。。
2007-8-21 10:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样也可以啊
2007-8-21 10:42
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
DDDK 呵  真不错的玩意儿
2007-8-21 12:56
0
雪    币: 1990
活跃值: (1059)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
DDDK?....
研究下
2007-8-21 15:59
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
10
......................no words...
WDM MS不是申请了专利的?怎么Delphi 可以编译?????
2007-8-21 21:17
0
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
11

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


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