找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 921|回复: 1

用DDDK编写驱动,修改SSDT表HOOK NTDebugActiveProcess函数

[复制链接]

35

主题

102

回帖

204

牛毛

一级牛人

积分
204
QQ
发表于 2009-4-29 16:34:54 | 显示全部楼层 |阅读模式 来自 四川省遂宁市
作者:pathletboy
日期:2007-8-20 21:26
代码如下:
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 $10***00
                mov cr0,eax
  end;
  POldDebugActiveProcess^ := ULong(OldDebugActiveProcessAdd); //恢复SSDT
  asm   //开中断
    mov  eax,cr0
    or   eax,$10***00
    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 $10***00
                mov cr0,eax
  end;
  POldDebugActiveProcess^ := ULong(@MyDebugActiveProcess);//修改SSDT表,将服务号为$39的函数改为自己的钩子函数地址,以实现HOOK。
  asm   //开中断
    mov  eax,cr0
    or   eax,$10***00
    mov  cr0,eax
    sti
  end;
  Result := STATUS_SUCCESS;

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

8

主题

87

回帖

102

牛毛

一级牛人

积分
102
QQ
发表于 2009-4-29 21:19:49 | 显示全部楼层 来自 广东省广州市
ding LZ辛苦了
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-30 09:44 , Processed in 0.156539 second(s), 39 queries .

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表