您的位置:首页 > 移动开发 > Objective-C

HOOK Object XXProcedure 保护进程

2016-07-12 19:59 507 查看


HOOK Object XXProcedure 保护进程

lkd> !process 
PROCESS 87cec960  SessionId: 0  Cid: 0bf8    Peb: 7ffd6000  ParentCid: 0c7c

    DirBase: 0ab405e0  ObjectTable: e2a94618  HandleCount: 353.

    Image: windbg.exe

lkd> !object 87cec960  
Object: 87cec960  Type: (8a5f8e70) Process

    ObjectHeader: 87cec948 (old version)

    HandleCount: 3  PointerCount: 55

 lkd> dt _object_header 87cec948 
nt!_OBJECT_HEADER

   +0x000 PointerCount     : 55

   +0x004 HandleCount      : 3

   +0x004 NextToFree       : 0x00000003 

   +0x008 Type             : 0x8a5f8e70 _OBJECT_TYPE

   +0x00c NameInfoOffset   : 0 ''

   +0x00d HandleInfoOffset : 0 ''

   +0x00e QuotaInfoOffset  : 0 ''

   +0x00f Flags            : 0x20 ' '

   +0x010 ObjectCreateInfo : 0x899c2b40 _OBJECT_CREATE_INFORMATION

   +0x010 QuotaBlockCharged : 0x899c2b40 

   +0x014 SecurityDescriptor : 0xe2bcc349 

   +0x018 Body             : _QUAD

lkd> dt 0x8a5f8e70 _OBJECT_TYPE

nt!_OBJECT_TYPE

   +0x000 Mutex            : _ERESOURCE

   +0x038 TypeList         : _LIST_ENTRY [ 0x8a5f8ea8 - 0x8a5f8ea8 ]

   +0x040 Name             : _UNICODE_STRING "Process"

   +0x048 DefaultObject    : (null) 

   +0x04c Index            : 5

   +0x050 TotalNumberOfObjects : 0x4b

   +0x054 TotalNumberOfHandles : 0xca

   +0x058 HighWaterNumberOfObjects : 0x51

   +0x05c HighWaterNumberOfHandles : 0xd3

   +0x060 TypeInfo         : _OBJECT_TYPE_INITIALIZER

   +0x0ac Key              : 0x636f7250

   +0x0b0 ObjectLocks      : [4] _ERESOURCE

lkd> dt _OBJECT_TYPE_INITIALIZER 0x8a5f8e70 +60
nt!_OBJECT_TYPE_INITIALIZER

   +0x000 Length           : 0x4c

   +0x002 UseDefaultObject : 0 ''

   +0x003 CaseInsensitive  : 0 ''

   +0x004 InvalidAttributes : 0xb0

   +0x008 GenericMapping   : _GENERIC_MAPPING

   +0x018 ValidAccessMask  : 0x1f0fff

   +0x01c SecurityRequired : 0x1 ''

   +0x01d MaintainHandleCount : 0 ''

   +0x01e MaintainTypeList : 0 ''

   +0x020 PoolType         : 0 ( NonPagedPool )

   +0x024 DefaultPagedPoolCharge : 0x1000

   +0x028 DefaultNonPagedPoolCharge : 0x290
   +0x02c DumpProcedure    : (null) 

   +0x030 OpenProcedure    : (null) 

   +0x034 CloseProcedure   : (null) 

   +0x038 DeleteProcedure  : 0x805d2cdc     void  nt!PspProcessDelete+0

   +0x03c ParseProcedure   : (null) 

   +0x040 SecurityProcedure : 0x805f9150     long  nt!SeDefaultObjectMethod+0

   +0x044 QueryNameProcedure : (null) 

   +0x048 OkayToCloseProcedure : (null) 


 

 看到最后几个XXXXProcedure了吧,在操作EPROCESS的时候会调用相应的函数,具体是哪个函数由操作的种类决定,调用的时候先检查是否为null,不为空就call,为null就算了。

有些函数的返回值不会对操作产生影响,而有些则会直接影响操作是否成功,而且Win2000和XP Vista系统还不一样。

 在Win2000和XP Vista系统下各个函数的参数有可能不一样,比如OpenProcedure 在2000下是8个参数,XP和Vista下是9个参数。

通过Hook这些可以实现许多猥琐的事,不仅仅进程的EPROCESS了,每一个object都有这样函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: