找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4030|回复: 2

[开源]WS的“禁止进线程创建” - TaForbidCreateThreadProcess

[复制链接]

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-5-3 18:03:41 | 显示全部楼层 |阅读模式
通过Hook ObReferenceObjectByHandle达到目的。
之所以说WS,是因为估计有副作用,但是目前还不知道副作用在何处。
在XP/WIN7下测试通过。

  1. NTSTATUS DetourMyObReferenceObjectByHandle(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)
  2. {
  3. NTSTATUS status;
  4. if ( (ObjectType != *PsProcessType)&&(ObjectType != *PsThreadType) )//如果句柄类型不是进程或者线程,则放行
  5. {
  6.   status=OriginalObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,Object,HandleInformation);
  7. }
  8. else
  9. { //如果是进程或线程类型
  10.   if( (PsGetCurrentProcessId() != (HANDLE)processID) )//如果操作者不是CSRSS(变量processID保存着CSRSS进程的PID),则放行
  11.   {
  12.    status=OriginalObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,Object,HandleInformation);
  13.   }
  14.   else
  15.   { //先执行一次,如果得到的目标是它自己,则放行
  16.    status=OriginalObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,Object,HandleInformation);
  17.    if ( NT_SUCCESS(status) )
  18.    {
  19.     if( ((ULONG)(*Object)==(ULONG)PsGetCurrentProcess())||((ULONG)IoThreadToProcess((PETHREAD)(*Object))==(ULONG)PsGetCurrentProcess()) )
  20.     {
  21.      //Did Nothing
  22.     }
  23.     else
  24.     {
  25.      ObfDereferenceObject(*Object);
  26.      status=STATUS_UNSUCCESSFUL;
  27.     }
  28.    }
  29.   }
  30. }
  31. return status;
  32. }
复制代码

280

主题

203

回帖

0

精华

版主

积分
1808
发表于 2010-5-4 15:01:29 | 显示全部楼层
看不明白……
本网站最菜的人 该用户已被删除
发表于 2010-5-29 22:34:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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