直接内存搜索枚举内存的原理和实现.doc

直接内存搜索枚举内存的原理和实现.doc

ID:62049146

大小:78.50 KB

页数:4页

时间:2021-04-16

直接内存搜索枚举内存的原理和实现.doc_第1页
直接内存搜索枚举内存的原理和实现.doc_第2页
直接内存搜索枚举内存的原理和实现.doc_第3页
直接内存搜索枚举内存的原理和实现.doc_第4页
资源描述:

《直接内存搜索枚举内存的原理和实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、个人收集整理勿做商业用途直接内存搜索枚举内存的原理和实现在5.x的内核中,进程的EPROCESS往往存放于MmSystemRangeStart 至System所属PROCESS地址之间。 其中 MmSystemRangeStart 是一个内核导出的常量,在32位标准内存模式下,他的值为x80000000,而在PAE 模式的系统中,这个值为0xC0000000。对于System所属EPROCESS地址,可以通过驱动加载时 PsGetCurrentProcess()获取,因为驱动的加载任务是在 system进ﻩ中完成的。 在上述区间的具体取值确定下来后, 接着就是要确定是否某一块内存片断

2、是一个有效的PROCESS结构。 在此首先需要确定 EPROCESS在当前系统的表示。可以使用WinDbg 的如下命令获取: kd>dt _eprocess下面摘录winXP环境中EPROCESS 的定义片断1: t!_EPROCESS  +0x000 Pcb   :_KPROCESS +0x06c ProcessLock :_EX_PUSH_LOCK +0x070CreateTime :_LARGE_INTEGER +0x078ExitTime :_LARGE_INTEGER +0x080RundownProtect:_EX_RUNDOWN_REF +0x084UniqueProc

3、essId : Ptr32Void  +0x088ActiveProcessLinks :_LIST_ENTRY  +0x090QuotaUsage  : [3]Uint4B+0x09cQuotaPeak:[3]Uint4B/…结构片断:EPROCESS的定义 这个结构在WinXP中的大小是 0x25C,可以从上面的代码片断中看出,许多信息,比如创建等都可以直接在这个结构体中获取。 为了验证一个 EPROCESS 是否合法,需要考虑下面几个字段的数据: 0x078ExitTime  : _LARGE_INTEGER 0x1b0Peb   :Ptr32_PEB  中,ExitTime记

4、录了该进程的退出时间。对于正在运行的进程,该项属性将永远为 0。peb指向进程环境块的指针,在所有EPROCESS中,该数据区的高16 位应该相同。 除了这2项判断依据外, 还可以根据包装EPROCESS的OBJECT_HEADER结构来作出判断。OBJECT_HEADER结构的定义如下: t!_OBJECT_HEADER+0x000PointerCount : Int4B +0x004HandleCount : Int4B个人收集整理勿做商业用途 +0x004NextToFree : Ptr32 Void+0x008 Type : Ptr32_OBJECT_TYPE +0x00cN

5、ameInfoOffset :UChar +0x00dHandleInfoOffset:UChar  +0x00eQuotaInfoOffset :UChar +0x00fFlags  :UChar +0x010ObjectCreateInfo: Ptr32_OBJECT_CREATE_INFORMATION   +0x010QuotaBlockCharged:Ptr32Void +0x014SecurityDescriptor:Ptr32Void+0x018Body    :_QUAD结构定义:OBJECT_HEADER  这个结构表示了一个内核对象,他出现于任何内核对象结构的头部

6、,也包括了EPROCESS头部。其中我们感兴趣的数据域是: +0x008Type : Ptr32 _OBJECT_TYPE   该指针指向了一个标示对象类别的结构体,所有EPROCESS结构外层的 OBJECT_HEADER结构中,这项属性值应该相同。   通过上述分析,通过搜索内存枚举进程的流程如下: 1)从MmSystemRangeStart至SYSTEM进程EPROCESS地址依次搜索 2)将当前地址赋值给一个EPROCESS对象,将其中相关的数据域加以验证 3) 如果是合法EPROCESS,则将其地址填入结果,同时控制搜索从当前位置+sizeof(EPROCESS)开始 4)

7、继续下一次循环    以上方法还需要做的处理是: z获取一个标准的PEB指针,作为对照 z获取一个标准的OBJECT_TYPE指针,作为对照 z 由于 MmSystemRangeStart 开始的内存并非连续的未分页内存,也就是说其地址空间并不是连续的,因而直接循环扫描将出现缺页错误,导致系统蓝屏崩溃。   由于目前system 的eprocess地址是已知的,很自然的想法便是通过system eprocess中的数据作为对照数据。其中,OBJECT_TY

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。