科锐三阶段项目---CreateProcess流程分析之二:ObCreateObject分析报告
这个是武汉科锐 第三阶段 的分析项目,每个同学负责不同的模块。在此我将我所分析的模块发出来。
声明:由于本人能力有限,文中必然有错漏之处,恳请读者不吝赐教。
因为这个函数比较简单,都是直线下来的,所以没有画流程图!
ObCreateObject它的作用是创建指定类型(OBJECT_TYPE)的对象示例。
堆是系统数据动态申请及释放的地方,WinNT把堆叫做pool。根据是否可以换出,分为PagedPool和NonPagedPool。
如果系统频繁的申请和释放内存,开销很大.于是WinNT利用LookasideList做缓冲,内存释放时并不是直接到pool,而是放到LookasideList中,等申请内存时,先检查表中是否有合适大小的快,若有就直接使用.系统定时检查表项的数目,以保持pool有足够的可用内存。
可以将Lookaside对象想像成一个内存容器。在初始的时候,它先向Windows申请了一块比较大的内存。以后程序员每次申请内存的时候,不是直接向Windows申请内存,而是向Lookaside对象申请内存。Lookaside对象会智能地避免产生内存“空洞”。如果Lookaside对象内部的内存不够用时,它会向操作系统申请更多的内存。当Lookaside对象内部有大量的末使用的内存时,它会自动让Windows回收一部分内存。总之,Lookaside是一个自动的内存分配容器,通过对Lookaside对象申请内存,效率要高于直接向Windows申请内存。
看实现代码之前我先大概的描述一下这个函数的工作流程吧!
ObCreateObject内部通过调用 ObpAllocateObject为对象申请空间。在调用ObpAllocateObject调用之前ObCreateObject函数做一些相关信息的收集以及判断,ObpAllocateObject函数返回通过参数返回其起始地址(即&Header->Body),同时函数里面还做一些对象本身的初始化工作,申请成功后,如果要求对象成为“永久对象”,即具有OB_FLAG_PERMANENT_OBJECT标志的话,再检查是否为系统的安全机制所允许,如果不允话的话,还要把刚刚申请的空间释放掉,同时返回一个错误代码STATUS_PRIVILEGE_NOT_HELD。
整个函数就是完成一个目标对象的创建工作。
下面先来看ObCreateObject函数
这个函数有9个参数,但是有一个没有使用,所以IDA里面没有标识出来。参数如下:
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
