欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Hook ExMapHandleToPointer,防止打开被保护进程和线程句柄

Hook ExMapHandleToPointer,防止打开被保护进程和线程句柄

【文章标题】: 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源码:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功