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

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

ID:23972952

大小:93.50 KB

页数:4页

时间:2018-11-12

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

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

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

2、ESS结构。 在此首先需要确定EPROCESS在当前系统的表示。可以使用WinDbg的如下命令获取: kd>dt_eprocess下面摘录winXP环境中EPROCESS的定义片断1: t!_EPROCESS+0x000Pcb:_KPROCESS+0x06cProcessLock:_EX_PUSH_LOCK+0x070CreateTime:_LARGE_INTEGER+0x078ExitTime:_LARGE_INTEGER+0x080RundownProtect:_EX_RUNDOWN_REF+0x084UniqueProcessId:Ptr32Void+0x0

3、88ActiveProcessLinks:_LIST_ENTRY+0x090QuotaUsage:[3]Uint4B+0x09cQuotaPeak:[3]Uint4B/…结构片断:EPROCESS的定义 这个结构在WinXP中的大小是0x25C,可以从上面的代码片断中看出,许多信息,比如创建等都可以直接在这个结构体中获取。 为了验证一个EPROCESS是否合法,需要考虑下面几个字段的数据: 0x078ExitTime:_LARGE_INTEGER0x1b0Peb:Ptr32_PEB  中,ExitTime记录了该进程的退出时间。对于正在运行的进程,该项属性将永远为

4、0。peb指向进程环境块的指针,在所有EPROCESS中,该数据区的高16位应该相同。 除了这2项判断依据外,还可以根据包装EPROCESS的OBJECT_HEADER结构来作出判断。OBJECT_HEADER结构的定义如下: t!_OBJECT_HEADER+0x000PointerCount:Int4B+0x004HandleCount:Int4B+0x004NextToFree:Ptr32Void+0x008Type:Ptr32_OBJECT_TYPE+0x00cNameInfoOffset:UChar+0x00dHandleInfoOffset:UChar

5、+0x00eQuotaInfoOffset:UChar+0x00fFlags:UChar+0x010ObjectCreateInfo:Ptr32_OBJECT_CREATE_INFORMATION+0x010QuotaBlockCharged:Ptr32Void+0x014SecurityDescriptor:Ptr32Void+0x018Body:_QUAD结构定义:OBJECT_HEADER  这个结构表示了一个内核对象,他出现于任何内核对象结构的头部,也包括了EPROCESS头部。其中我们感兴趣的数据域是: +0x008Type:Ptr32_OBJECT_T

6、YPE   该指针指向了一个标示对象类别的结构体,所有EPROCESS结构外层的OBJECT_HEADER结构中,这项属性值应该相同。   通过上述分析,通过搜索内存枚举进程的流程如下: 1)从MmSystemRangeStart至SYSTEM进程EPROCESS地址依次搜索 2)将当前地址赋值给一个EPROCESS对象,将其中相关的数据域加以验证 3)如果是合法EPROCESS,则将其地址填入结果,同时控制搜索从当前位置+sizeof(EPROCESS)开始 4)继续下一次循环   以上方法还需要做的处理是: z获取一个标准的PEB指针,作为对照 z获取一个标准

7、的OBJECT_TYPE指针,作为对照 z由于MmSystemRangeStart开始的内存并非连续的未分页内存,也就是说其地址空间并不是连续的,因而直接循环扫描将出现缺页错误,导致系统蓝屏崩溃。   由于目前system的eprocess地址是已知的,很自然的想法便是通过system eprocess中的数据作为对照数据。其中,OBJECT_TYPE指针的确可以如此获取,然后对于PEB指针,在system eprocess中却为空值。  解决办法是通过eprocess中的ActiveProcessLinks数据域得到由system eprocess指向的第一个e

8、proce

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

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

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