首页
社区
课程
招聘
[旧帖] [原创]Hook ExMapHandleToPointer,防止打开被保护进程和线程句柄 0.00雪花
发表于: 2011-11-12 18:13 4922

[旧帖] [原创]Hook ExMapHandleToPointer,防止打开被保护进程和线程句柄 0.00雪花

2011-11-12 18:13
4922

【文章标题】: Hook ExMapHandleToPointer,防止打开被保护进程和线程句柄
【文章作者】: ddlx
【作者邮箱】: DdlxStudio@163.com
【作者声明】: 失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  新发现的方法,不敢私藏特来分享。本人文学水平有限,大家就将就着看吧~

该方法在32位Xp,2003,Vista,Win7上测试通过。
  
  1. ExMapHandleToPointer
  ExMapHandleToPointer函数是通过句柄得到对应的对象地址。函数原型为:
  NTKERNELAPI PHANDLE_TABLE_ENTRY ExMapHandleToPointer ( IN PHANDLE_TABLE HandleTable,IN HANDLE Handle );
  在Vista以后的系统上,该函数的第一个参数通过edi传入。
  
  
  2. 为什么要Hook ExMapHandleToPointer?
  
  Hook ExMapHandleToPointer最大的好处是不光可以拦截上层通过NtOpenProcess打开进程句柄,也可以拦截驱动调用PsLookupProcessByProcessId得进程EPROCESS。
  比直接Hook SSDT中得NtOpenProcess或Hook PsLookupProcessByProcessId要好得多。并且虽然ExMapHandleToPointer函数是未导出的,但是定位容易。
  
  ExMapHandleToPointer函数是通过Pid或Tid得对应的EPROCESS或ETHREAD的关键函数。当然,其它句柄也是通过他得对象地址的。
  
  如PsLookupProcessByProcessId函数就先调用ExMapHandleToPointer函数从PspCidTable中得到Pid的对象地址,然后再取出EPROCESS地址。(PsLookupThreadByThreadId,PsLookupProcessThreadByCid同理)
  
  PsLookupProcessByProcessId源码:

  NTSTATUS PsLookupProcessByProcessId( IN HANDLE ProcessId, OUT PEPROCESS *Process )
  {
  
      PHANDLE_TABLE_ENTRY CidEntry;
      PEPROCESS lProcess;
      NTSTATUS Status;
  
      CidEntry = [COLOR="Red"]ExMapHandleToPointer(PspCidTable, ProcessId);[/COLOR]
      Status = STATUS_INVALID_PARAMETER;
      if (CidEntry != NULL) {
          lProcess = (PEPROCESS)CidEntry->Object;
          if (lProcess != (PEPROCESS)PSP_INVALID_ID && lProcess->Pcb.Header.Type == ProcessObject && lProcess->GrantedAccess ) {
              ObReferenceObject(lProcess);
              *Process = lProcess;
              Status = STATUS_SUCCESS;
          }
  
          ExUnlockHandleTableEntry(PspCidTable, CidEntry);
      }
  
      return Status;
  }

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

收藏
免费 6
支持
分享
最新回复 (6)
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
不错,有探索精神。
2011-11-12 20:16
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
小弟看不懂  不过还是顶下 呵呵
2011-11-12 20:20
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主一看就是技术流的,学习加支持!!
2011-11-12 20:33
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
5
这么好的文章怎么就没人顶呢
2011-11-13 08:40
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
只要是用了HOOK,其实HOOK哪都一样的
2011-11-13 14:41
0
雪    币: 227
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
lz探索精神可嘉,但不建议深究进线程终止/保护之类的内容...
2011-11-14 13:04
0
游客
登录 | 注册 方可回帖
返回
//