ObInsertObject函数分析报告.PDFVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ObInsertObject函数分析报告

ObInsertObject 函数分析报告函数分析报告 函数分析报告函数分析报告 ObInsertObject 它的作用是将所创建的对象插入对象目录和本进程句柄表(或内 核句柄表) ,并返回句柄。插入对象目录的目的是使得以后可以按对象名及期路径找 到对象,而句柄表的插入则使当前进程在创建之余同时打开了这个对象。 我们先来了解一下ObInsertObject 的大概流程大概流程: 大概流程大概流程 首先是一些常规检查,如果对象名没有指定的话,创建一个无名对象句柄,同时将 ObpCreateUnnamedHandle 的返回值返回。 然后再判断一个访问状态(AccessState) 是否为空,如果为空的话就调用 SeCreateAccessState 创建一个,如果创建出错了,返回错误码。 接着再判断对象名是否为空,如果不为空的话,调用ObpLookupObjectName 查找 一下目录下面是否有同名的存在, 如果就通过指针返回对象,否则就返回 STATUS_OBJECT_NAME_NOT_FOUND,如果没有找到就把这个对象挂入给定的目 录,并通过指针返回这个对象的指针。 接着再判断是不是要创建符号连接,是的话通过ObpCreateSymbolicLinkName 创 建。 下面再判断是不是成功插入对象目录,再根据所在目录修正目标对象的访问控制 描述。 最后就是句柄表中创建一个新的句柄。 第 1 页 (共 13 页) ObInsertObject 函数分析报告函数分析报告 函数分析报告函数分析报告 现在我们开始分析ObInsertObject 函数。 首先函数完成对一些局部变量的赋值,比如取得ObjectType 等操作。 接着先判断一下是不是要创建无名对象句柄。 cmp [ecx+OBJECT_TYPE.TypeInfo.SecurityRequired], 0 jnz loc_527F99 cmp [ebp+var_ObjectName], eax ; 判断一下对象名有没有指定 jnz loc_527F99 如果这二个值都为空的话,调用ObpCreateUnnamedHandle()函数创建一个无名对 象句柄。 之后再检查一下_OBJECT_CREATE_INFORMATION.SecurityDescriptor 这个域是 否有值,有值的话调用SeReleaseSecurityDescriptor()将安全描述描给释放。 接着再判断是否有_OBJECT_HEADER_NAME_INF 可选头,有的话也将空间释 放,这里有一个检测,检测是从哪里申请到的空间,是LookasideList 还是在堆里,然 后调后相应的函数释放空间。 接着再判断_OBJECT_HEADER_NAME_INFO.Directory 是否有值。 mov eax, [edi+_OBJECT_HEADER_NAME_INFO.Directory] cmp eax, ebx 有值的话调用ObDereferenceObjectDeferDelete 。 接着再调用ObfDereferenceObject 函数。 基本上后面都是一些善后操作。 最后返回ObpCreateUnnamedHandle()函数的返回值,结束整个函数的调用。 如果不是创建无名对象,函数接着往下走。 如果名字指定了,或者需要完整的安全检查,是需要访问状态的,所以首先判断 AccessState 是否有值,这个参数是ObInsertObject 函数的参数之一。 cmp [ebp+arg_AccessState], eax ; eax 为零值,前面进行了xor eax,eax jnz short NoCreateAccessState 如果没有值的话再调用SeCreateAccessState()生成一个访问状态

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档