HOOK Object XXProcedure 保护进程

 

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都有这样函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值