能力值:
( LV12,RANK:400 )
|
-
-
2 楼
占位学习下。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
PG,PG。好东西,坏东西
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
学习学习@
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
学习学习
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
来留个mark
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
留个mark
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
看楼主帖子清晰易懂
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
值得学习啊
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
留个mark
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
DAY DAY UP
|
能力值:
( LV2,RANK:15 )
|
-
-
12 楼
不错的思路,学习了
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
不用注册一个假钩子,你可以直接找到PsProcessType,
kd> dt _OBJECT_TYPE
nt!_OBJECT_TYPE
+0x000 TypeList : _LIST_ENTRY
+0x008 Name : _UNICODE_STRING
+0x010 DefaultObject : Ptr32 Void
+0x014 Index : UChar
+0x018 TotalNumberOfObjects : Uint4B
+0x01c TotalNumberOfHandles : Uint4B
+0x020 HighWaterNumberOfObjects : Uint4B
+0x024 HighWaterNumberOfHandles : Uint4B
+0x028 TypeInfo : _OBJECT_TYPE_INITIALIZER
+0x078 TypeLock : _EX_PUSH_LOCK
+0x07c Key : Uint4B
+0x080 CallbackList : _LIST_ENTRY
然后遍历CallbackList就行了~
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
|
能力值:
( LV9,RANK:260 )
|
-
-
15 楼
内容差不多,CALLBACK_NODE描述的就是OB_CALLBACK_REGISTRATION,CALLBACK_BODY 描述的就是OB_OPERATION_REGISTRATION,只不过个别域的顺序不太一样,另外多了几个域,比如链表、ulXXX_000X000X 和 ulRefCount。
FC大牛睡得真晚……
|
能力值:
( LV9,RANK:260 )
|
-
-
16 楼
这个不错,改天试试!学习了!
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
综合 这里的信息,那个相邻的 ULONG 和 PWCHAR 应该确实是 OB_CALLBACK_REGISTRATION 里的那个 UNICODE_STRING,BODY 中间那个是个开关,结尾是个 EX_RUNDOWN_REF。
typedef struct _CALLBACK_BODY {
LIST_ENTRY CallbackList;
OB_OPERATION Operations;
ULONG Active;
OB_HANDLE Handle;
POBJECT_TYPE ObjectType;
POB_PRE_OPERATION_CALLBACK PreOperation;
POB_POST_OPERATION_CALLBACK PostOperation;
EX_RUNDOWN_REF RundownProtection;
} CALLBACK_BODY, *PCALLBACK_BODY;
typedef struct _CALLBACK_NODE {
USHORT Version;
USHORT OperationRegistrationCount;
PVOID RegistrationContext;
UNICODE_STRING Altitude;
CALLBACK_BODY Entries[1];
} CALLBACK_NODE, *PCALLBACK_NODE;
|
能力值:
( LV9,RANK:260 )
|
-
-
18 楼
是的,这下就完整了
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
国标 到此一游
|
|
|