找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2522|回复: 2

分析进程、线程创建过程

[复制链接]
发表于 2015-7-23 11:15:06 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
由WRK源码可以得到如下结论:
PspCreateThread
        检测是否为PsInitialSystemProcess
        创建ETHREAD对象,并初始化
        创建TEB
        KeInitThread
        将线程加入进程链表结构
        若是创建首个线程,处理创建进程APC回调
        处理进程job
        处理创建线程回调
        设CreateSuspended则挂起
        创建访问状态对象并构造线程句柄
       
PspCreateProcess
        创建PEPROCESS对象
        获取SectionObject
        检查DebugPort ExceptionPort
        创建进程地址空间
        KeInitializeProcess
        设置进程对象安全属性
        复制父进程句柄表
        创建进程id,设置句柄表
        处理父进程job
        创建PEB
        创建访问状态对象并构造进程句柄

RtlCreateUserThread
        创建线程栈
        初始化线程上下文context
        PspCreateThread

RtlCreateUserProcess
        打开文件
        创建文件内存映射
        PspCreateProcess
        获取pe头信息
        分配环境变量和参数空间
        RtlCreateUserThread
回复

使用道具 举报

发表于 2015-7-23 13:09:43 | 显示全部楼层
顶chao哥
回复

使用道具 举报

 楼主| 发表于 2015-7-23 15:47:44 | 显示全部楼层
关于获取objecttype的一点技巧
  1. ObReferenceObjectByHandle(
  2.   _In_      HANDLE                     Handle,
  3.   _In_      ACCESS_MASK                DesiredAccess,
  4.   _In_opt_  POBJECT_TYPE               ObjectType,
  5.   _In_      KPROCESSOR_MODE            AccessMode,
  6.   _Out_     PVOID                      *Object,
  7.   _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
  8. );

  9. typedef struct _OBJECT_HEADER {
  10.     LONG_PTR PointerCount;
  11.     union {
  12.         LONG_PTR HandleCount;
  13.         PVOID NextToFree;
  14.     };
  15.     POBJECT_TYPE Type;
  16.     UCHAR NameInfoOffset;
  17.     UCHAR HandleInfoOffset;
  18.     UCHAR QuotaInfoOffset;
  19.     UCHAR Flags;

  20.     union {
  21.         POBJECT_CREATE_INFORMATION ObjectCreateInfo;
  22.         PVOID QuotaBlockCharged;
  23.     };

  24.     PSECURITY_DESCRIPTOR SecurityDescriptor;
  25.     QUAD Body;
  26. } OBJECT_HEADER, *POBJECT_HEADER;

  27. typedef struct _OBJECT_TYPE {
  28.     ERESOURCE Mutex;
  29.     LIST_ENTRY TypeList;
  30.     UNICODE_STRING Name;            // Copy from object header for convenience
  31.     PVOID DefaultObject;
  32.     ULONG Index;
  33.     ULONG TotalNumberOfObjects;
  34.     ULONG TotalNumberOfHandles;
  35.     ULONG HighWaterNumberOfObjects;
  36.     ULONG HighWaterNumberOfHandles;
  37.     OBJECT_TYPE_INITIALIZER TypeInfo;
  38. #ifdef POOL_TAGGING
  39.     ULONG Key;
  40. #endif //POOL_TAGGING
  41.     ERESOURCE ObjectLocks[ OBJECT_LOCK_COUNT ];
  42. } OBJECT_TYPE, *POBJECT_TYPE;

  43. POBJECT_HEADER pObjectHeader = OBJECT_TO_OBJECT_HEADER(Object);
  44. POBJECT_TYPE ObjectType = ReadForWriteAccess(&ObjectHeader->Type);

  45. POBJECT_TYPE ObjectType = ObGetObjectType(Object);

  46. 实现:
  47. int __stdcall ObGetObjectType(int a1)
  48. {
  49.   return *(&ObTypeIndexTable + *(_BYTE *)(a1 - 0xC));
  50. }

  51. ObjectType can be *ExEventObjectType, *ExSemaphoreObjectType, *IoFileObjectType, *PsProcessType, *PsThreadType, *SeTokenObjectType, *TmEnlistmentObjectType, *TmResourceManagerObjectType, *TmTransactionManagerObjectType, or *TmTransactionObjectType
复制代码
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 01:31 , Processed in 0.032777 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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