首页
社区
课程
招聘
[求助]inline hook ObReferenceObjectByHandle为何在这两种情况下会蓝了?
发表于: 2010-2-23 19:02 5212

[求助]inline hook ObReferenceObjectByHandle为何在这两种情况下会蓝了?

2010-2-23 19:02
5212
我想简单保护一下程序,
所以inline hook了ObReferenceObjectByHandle,

现在任务管理里面已经阻止结束了,
用命令行
taskkill /f /im:XXX
taskkill /f /PID XXX
也都可以阻止强制关闭了,

可是去掉 /f 参数
直接用
taskkill /PID XXX
就会死机


还有一种情况是,
程序直接点叉关闭也会死机
不知道是什么原因造成这两种情况,会死机呢?

我hook代码是这样的:

NTSTATUS __stdcall
fake_ObReferenceObjectByHandle(
                                   IN HANDLE Handle,
                                   IN ACCESS_MASK DesiredAccess,
                                   IN POBJECT_TYPE ObjectType OPTIONAL,
                                   IN KPROCESSOR_MODE AccessMode,
                                   OUT PVOID *Object,
                                   OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL )
{  
        PVOID ProcessObject;
        PEPROCESS Process;
        NTSTATUS Status;

        char* findpointer=NULL;
        char* ProtectName = "XXX.exe";

        if(*PsProcessType==ObjectType)
        {
                Status = org_ObReferenceObjectByHandle(Handle, DesiredAccess, ObjectType,AccessMode, &Process, NULL);

                if (NT_SUCCESS(Status))
                {                       
                        if(DesiredAccess == PROCESS_TERMINATE )
                        {

                                if((findpointer=strstr((char*)((char*)Process + g_ImageFileName), ProtectName)) != NULL)
                                {

                                        return STATUS_ACCESS_DENIED;
                                }
                        }
                }
        }

        return org_ObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,Object,HandleInformation);        
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
也不知道是谁想出这么脑 残的HOOK方法,居然还有很多人跟风,哎。
2010-2-23 19:10
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
这个蓝屏是不是无法解决的?
不知道有什么好的自我保护的方法吗?
2010-2-23 22:27
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
规规矩矩SSDT HOOK就可以了
2010-2-23 22:37
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
多谢大牛的指点,
不过对ssdt hook总是不太放心。。。
2010-2-24 09:31
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
6
关键不是HOOK什么位置,关键是你如何处理~
2010-2-24 10:40
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
qihoo大牛真是字字玑珠啊,
虽然我还没什么写驱动的经验,还没什么深刻体会,
但感觉是这样的,要多了解windows底层机制,
才能更好的hook,努力学习中~~~

不过那两个错误也太奇怪了,
去掉 /f 参数 taskkill ,既然就死机了,

不过我是在win7上开发的,还没试过xp。。。
2010-2-24 11:21
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
8
NTSTATUS __stdcall
fake_ObReferenceObjectByHandle(
           IN HANDLE Handle,
           IN ACCESS_MASK DesiredAccess,
           IN POBJECT_TYPE ObjectType OPTIONAL,
           IN KPROCESSOR_MODE AccessMode,
           OUT PVOID *Object,
           OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL )
{  
  PVOID ProcessObject;
  PEPROCESS Process;
  NTSTATUS Status;

  char* findpointer=NULL;
  char* ProtectName = "XXX.exe";

  if(*PsProcessType==ObjectType)   //要检查的是*Object的type,而不是ObjectType
  {
    Status = org_ObReferenceObjectByHandle(Handle, DesiredAccess, ObjectType,AccessMode, &Process, NULL);

    if (NT_SUCCESS(Status))
    {      
      //函数虽然返回成功,但是你确定已经取到PEPROCESS了吗?不对Process检查会蓝死你

      if(DesiredAccess == PROCESS_TERMINATE )
      {

        if((findpointer=strstr((char*)((char*)Process + g_ImageFileName), ProtectName)) != NULL)
        {
          //检查IRQL了吗? strstr这个函数是无法在高级别的IRQL上跑,最好是 IRQL < APC_LEVEL
          return STATUS_ACCESS_DENIED;
        }
      }
    }
  }
  //return org_ObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,Object,HandleInformation);   
  return org_ObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,*Object,HandleInformation);   
}

单纯fake函数上看就发现存在N个问题了~~~
2010-5-4 15:21
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
请问楼上是否能给个示例看看
2010-5-4 16:02
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
http://bbs.pediy.com/archive/index.php?t-65731.html
可以参考一下
2010-5-4 16:26
0
游客
登录 | 注册 方可回帖
返回
//