请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

梦织未来

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 111|回复: 0

[求助] WIN10 16299 32位使用IrpCreateFile后ObOpenObjectByPointer失败

[复制链接]

升级   18%

1

主题

0

精华

9

积分
发表于 2018-2-12 15:53:14 | 显示全部楼层 |阅读模式
本帖最后由 Alif 于 2018-2-12 16:13 编辑

代码使用A盾代码 https://bbs.pediy.com/thread-161126.htm
需要修改的地方是IrpCreate中FileObjectSize 为0x80,通过IDA查看SepCreateAccessStateFromSubjectContext中两个成员的长度accessState 为0x74,auxData为0xC4,其他不需要改动,可以直接IrpCreate成功

IrpCreateFile成功之后直接使用ObOpenObjectByPointer会返回0xC000000D
  1. status=ObOpenObjectByPointer(
  2.     FileObject,
  3.     OBJ_KERNEL_HANDLE,    //verifier下测试要指定OBJ_KERNEL_HANDLE
  4.     0,
  5.     DesiredAccess|0x100000,
  6.     *IoFileObjectType,
  7.     0,
  8.     FileHandle);
  9. if(NT_SUCCESS(status))
  10.     ObfDereferenceObject(FileObject);
复制代码
查看IDA中ObOpenObjectByPointer函数,发现是在 *(_BYTE*)(FileObject-9)&1 这里有值失败的
  1. if ( a2 & v8->TypeInfo.InvalidAttributes || *(_BYTE *)(FileObject - 9) & 1 && *(_DWORD *)(FileObject - 8) )
  2. {
  3.     ++ObpInvalidOpenByPointer;
  4.     ObfDereferenceObjectWithTag(FileObject);
  5.     result = 0xC000000D;
  6. }
复制代码
而FileObject - 0x18是_OBJECT_HEADER结构,FileObject - 9 是Flags字段
  1. kd> dt _OBJECT_HEADER
  2. nt!_OBJECT_HEADER
  3.    +0x000 PointerCount     : Int4B
  4.    +0x004 HandleCount      : Int4B
  5.    +0x004 NextToFree       : Ptr32 Void
  6.    +0x008 Lock             : _EX_PUSH_LOCK
  7.    +0x00c TypeIndex        : UChar
  8.    +0x00d TraceFlags       : UChar
  9.    +0x00d DbgRefTrace      : Pos 0, 1 Bit
  10.    +0x00d DbgTracePermanent : Pos 1, 1 Bit
  11.    +0x00e InfoMask         : UChar
  12.    +0x00f Flags            : UChar
  13.    +0x00f NewObject        : Pos 0, 1 Bit
  14.    +0x00f KernelObject     : Pos 1, 1 Bit
  15.    +0x00f KernelOnlyAccess : Pos 2, 1 Bit
  16.    +0x00f ExclusiveObject  : Pos 3, 1 Bit
  17.    +0x00f PermanentObject  : Pos 4, 1 Bit
  18.    +0x00f DefaultSecurityQuota : Pos 5, 1 Bit
  19.    +0x00f SingleHandleEntry : Pos 6, 1 Bit
  20.    +0x00f DeletedInline    : Pos 7, 1 Bit
  21.    +0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION
  22.    +0x010 QuotaBlockCharged : Ptr32 Void
  23.    +0x014 SecurityDescriptor : Ptr32 Void
  24.    +0x018 Body             : _QUAD
复制代码
于是在IrpCreateFile中将Flags抹去
  1. POBJECT_HEADER ObjHeader = (ULONG)fileObject - 0x18;
  2. ObjHeader->Flags = 0;
复制代码
这个地方的校验过了,后面ObpCreateHandle会返回0xC0000001

下次继续看。。。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|mengwuji ( 粤ICP备13060035号-1 )  

GMT+8, 2018-2-23 08:30 , Processed in 0.288122 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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