欢迎来到 嗅灵易学

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

[原创]暑假浅谈系列第二帖——win7 object hook

[原创]暑假浅谈系列第二帖——win7 object hook

要知道,在win7以前object 是需要自定义宏来 hook的,还需要硬编码.但是到了win7以后发生了很大的变化
有一个小错误导致蓝屏现在我改一下;

NTKERNELAPI

PVOID

NTAPI

ObGetObjectType(

				IN PVOID pObject

				);

①.我们先看 xp 的  Object_header;
kd> dt _object_header

nt!_OBJECT_HEADER

   +0x000 PointerCount     : Int4B

   +0x004 HandleCount      : Int4B

   +0x004 NextToFree       : Ptr32 Void

   +0x008 Type             : Ptr32 _OBJECT_TYPE 这个:

   +0x00c NameInfoOffset   : UChar

   +0x00d HandleInfoOffset : UChar

   +0x00e QuotaInfoOffset  : UChar

   +0x00f Flags            : UChar

   +0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION

   +0x010 QuotaBlockCharged : Ptr32 Void

   +0x014 SecurityDescriptor : Ptr32 Void

   +0x018 Body             : _QUAD

接着在看win7下的
kd> dt _object_header

nt!_OBJECT_HEADER

   +0x000 PointerCount     : Int4B

   +0x004 HandleCount      : Int4B

   +0x004 NextToFree       : Ptr32 Void

   +0x008 Lock             : _EX_PUSH_LOCK 这个没了变成这个了

   +0x00c TypeIndex        : UChar

   +0x00d TraceFlags       : UChar

   +0x00e InfoMask         : UChar

   +0x00f Flags            : UChar

   +0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION

   +0x010 QuotaBlockCharged : Ptr32 Void

   +0x014 SecurityDescriptor : Ptr32 Void

   +0x018 Body             : _QUAD

那win7的 对象去哪里了?
带着这个问题,我们先看微软给的这个函数 ObGetObjectType
kd> u ObGetObjectType

nt!ObGetObjectType:

8406987b 8bff            mov     edi,edi

8406987d 55              push    ebp

8406987e 8bec            mov     ebp,esp

84069880 8b4508          mov     eax,dword ptr [ebp+8]

84069883 0fb640f4        movzx   eax,byte ptr [eax-0Ch][COLOR="red"]②[/COLOR]

84069887 8b04858045f583  mov     eax,dword ptr nt!ObTypeIndexTable (83f54580)[eax*4]

8406988e 5d              pop     ebp

8406988f c20400          ret     4

可以看到movzx   eax,byte ptr [eax-0Ch]②你懂得.
然后我们可以试验一下.
在 xp 下的 结构
typedef struct _OBJECT_TYPE { 

	ERESOURCE Mutex; 

	LIST_ENTRY TypeList; 

	UNICODE_STRING Name; 

	PVOID DefaultObject; 

	ULONG Index; 

	ULONG TotalNumberOfObjects; 

	ULONG TotalNumberOfHandles; 

	ULONG HighWaterNumberOfObjects; 

	ULONG HighWaterNumberOfHandles; 

	OBJECT_TYPE_INITIALIZER TypeInfo; 

在win7下的
typedef struct _OBJECT_TYPE { 

	LIST_ENTRY TypeList; 

	UNICODE_STRING Name; 

	PVOID DefaultObject; 

	ULONG Index; 

	ULONG TotalNumberOfObjects; 

	ULONG TotalNumberOfHandles; 

	ULONG HighWaterNumberOfObjects; 

	ULONG HighWaterNumberOfHandles; 

	OBJECT_TYPE_INITIALIZER TypeInfo;

	ULONG  TypeLock;

	ULONG   Key;

	LIST_ENTRY   CallbackList; 

} OBJECT_TYPE, *POBJECT_TYPE; 

很明显多了一些东西先卖一个关子,以后在说.

接着 OBJECT_TYPE_INITIALIZER  也是发生了不同 win7.
typedef struct _OBJECT_TYPE_INITIALIZER {

	    USHORT Length  ;

		ULONG ObjectTypeFlags ;

		ULONG CaseInsensitive  ;

		ULONG UnnamedObjectsOnly ;

		ULONG  UseDefaultObject ;

		BOOLEAN  SecurityRequired ;

		BOOLEAN MaintainHandleCount ;

		BOOLEAN MaintainTypeList ; 

		ULONG SupportsObjectCallbacks ;

		ULONG CacheAligned     ;

		ULONG ObjectTypeCode   ;

		ULONG InvalidAttributes ;

		GENERIC_MAPPING GenericMapping   ; 

		ULONG   ValidAccessMask  ;

		ULONG   RetainAccess    ;

		POOL_TYPE PoolType        ; 

		ULONG DefaultPagedPoolCharge ;

		ULONG DefaultNonPagedPoolCharge ;

		PVOID DumpProcedure   ;

		PVOID OpenProcedure    ;

		PVOID CloseProcedure  ;

		PVOID DeleteProcedure ;

		PVOID ParseProcedure  ;

		PVOID SecurityProcedure;

		PVOID QueryNameProcedure;

		PVOID OkayToCloseProcedure ;

} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;

明显比xp多了很多.
群:Super-Rootkis 121157016 欢迎大家来玩,进来主要公告.

本人14号有事要去杭州,呆一个月:
1. 想找一份实习工作,没多少钱都没关系.
2.打杂端菜都可以,希望有一份兼职

                                没公司吗?
另外接上一篇 通信篇

上传的附件 QQ截图20140706014019.jpg
QQ截图20140706121835.jpg
win7 object hook.zip

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

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

0 0 0 举报
复制成功