找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 8223|回复: 4

[疑惑]X64 hook NtOpenProcess

  [复制链接]

17

主题

89

回帖

0

精华

铜牌会员

积分
250
发表于 2012-3-1 11:53:54 | 显示全部楼层 |阅读模式
首先感谢TA大大公开源码~
下面是我代码


  1. ULONG64   ullSSDTBaseAddress;
  2. ULONG64   ullSSDTNtOpAddress;
  3. ULONG64          RealSSDTNtOpAddress;

  4. typedef NTSTATUS (__stdcall *NTOPENPROCESS)(
  5.         __out PHANDLE  ProcessHandle,
  6.         __in ACCESS_MASK  DesiredAccess,
  7.         __in POBJECT_ATTRIBUTES  ObjectAttributes,
  8.         __in_opt PCLIENT_ID  ClientId
  9.         );

  10. NTOPENPROCESS  RealNtOpenProcess;

  11. NTSTATUS __stdcall MyNtOpenProcess(
  12.                                                                    PHANDLE  ProcessHandle,
  13.                                                                    ACCESS_MASK  DesiredAccess,
  14.                                                                    POBJECT_ATTRIBUTES  ObjectAttributes,
  15.                                                                    PCLIENT_ID  ClientId
  16.                                                                    )
  17. {
  18.         NTSTATUS rc;
  19.         //ULONG PID;
  20.         DbgPrint( "NtOpenProcess() called.\n" );
  21.         KdPrint(( "NtOpenProcess() called.\n" ));
  22.         rc = (NTSTATUS)(NTOPENPROCESS)RealNtOpenProcess(
  23.                         ProcessHandle,
  24.                         DesiredAccess,
  25.                         ObjectAttributes,
  26.                         ClientId
  27.                         );
  28.         return rc;
  29. }

  30. KIRQL WPOFFx64()
  31. {
  32.         KIRQL irql=KeRaiseIrqlToDpcLevel();
  33.         ULONG64 Cr0=0;
  34.         Cr0=__readcr0();
  35.         Cr0 &=0xFFFFFFFFFFFEFFFF;
  36.         __writecr0(Cr0);
  37.         _disable();
  38.         return irql;
  39. }

  40. VOID WPONx64(KIRQL irql)
  41. {
  42.         ULONG64 Cr0=0;
  43.         Cr0=__readcr0();
  44.         Cr0 |=0x10000;
  45.         _enable();
  46.         __writecr0(Cr0);
  47.         KeLowerIrql(irql);
  48. }

  49. VOID HookNtOpenProcess()
  50. {
  51.         KIRQL irql;
  52.         ULONG64 Address;
  53.         ULONG64 ulSSDTValue;
  54.         ulSSDTValue=*(ULONG64*)ullSSDTBaseAddress;  //0xfffff800`03c7fb00  
  55.         Address=(ULONG64)(ulSSDTValue + 0x23*4);    //0xfffff800`03c7fb8c
  56.         RealSSDTNtOpAddress=ulSSDTValue+(((DWORD)(*(ULONG64*)Address))>> 4); //
  57.         RealNtOpenProcess=(NTOPENPROCESS)RealSSDTNtOpAddress;
  58.         irql=WPOFFx64();

  59.         *(ULONG64*)Address= (ULONG64)MyNtOpenProcess;    ×××××××这句代码怎么写?

  60.         WPONx64(irql);
  61. }

复制代码
因为计算的方法变化了,我反而不会写了。经过蓝屏多次查看之后无果,只好出来献丑了。请大侠们指点,谢谢!

说白了hook 地方的代码应该怎么写?

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2012-3-1 15:45:16 | 显示全部楼层
呵呵,这个就不解释了。。。你自己慢慢研究吧,研究通了发代码我给你加精华。。。

17

主题

89

回帖

0

精华

铜牌会员

积分
250
 楼主| 发表于 2012-3-1 18:39:18 | 显示全部楼层
老大真心的没有搞懂,给点提示好吗?
按照道理说没有错啊。可是总是蓝屏的

0

主题

126

回帖

0

精华

铜牌会员

积分
226
发表于 2012-3-8 01:15:09 | 显示全部楼层
給力阿~{:soso_e116:}

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-12 11:11:35 | 显示全部楼层
Tesla.Angela 发表于 2012-3-1 15:45
呵呵,这个就不解释了。。。你自己慢慢研究吧,研究通了发代码我给你加精华。。。 ...

努力學習中
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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