77范文网 - 专业文章范例文档资料分享平台

内核学习笔记

来源:网络收集 时间:2019-03-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

2016.5.18 windows内存管理

1. 通过VAD树枚举进程DLL(通过processID)

VAD(Virtual address descriptor) 是一棵平衡二叉搜索树。管理着一个进程的虚拟内存。当然其中也包含着一个进程的dll模块信息。首先通过windbg查看各个对象的数据结构: (1) dt !process 0 0 //查看所有进程

PROCESS 822d7508 SessionId: 0 Cid: 063c Peb: 7ffd4000 ParentCid: 061c DirBase: 048001e0 ObjectTable: e14c2190 HandleCount: 345. Image: explorer.exe

(2) dt _eprocess 822d7508 //查看该进程信息

+0x118 HardwareTrigger : 0 +0x11c VadRoot : 0x8248f8f0 Void +0x120 VadHint : 0x8248f8f0 Void (3) dt _MMVAD 0x8248f8f0 //查看VAD结构

+0x000 StartingVpn : 0x1ed0 +0x004 EndingVpn : 0x1ef4 +0x008 Parent : (null) +0x00c LeftChild : 0x82418340 _MMVAD +0x010 RightChild : 0x82196f00 _MMVAD +0x014 u : __unnamed +0x018 ControlArea : (null) +0x01c FirstPrototypePte : (null) +0x020 LastContiguousPte : (null) (4) dt _MMVAD 0x82418340 //查看左节点

+0x000 StartingVpn : 0x1d90 +0x004 EndingVpn : 0x1d9f +0x008 Parent : 0x8248f8f0 _MMVAD +0x00c LeftChild : 0x824184d0 _MMVAD +0x010 RightChild : 0x8241fab8 _MMVAD +0x014 u : __unnamed +0x018 ControlArea : 0x0a040004 _CONTROL_AREA ControlArea地址为0x0a040004,说明节点为空,使用命令查看也为空

(5) dt _MMVAD 0x824184d0 //查看右节点

+0x000 StartingVpn : 0x1d10 +0x004 EndingVpn : 0x1d1f +0x008 Parent : 0x82418340 _MMVAD +0x00c LeftChild : 0x824fe1e8 _MMVAD +0x010 RightChild : 0x82418450 _MMVAD +0x014 u : __unnamed +0x018 ControlArea : 0x0a040004 _CONTROL_AREA +0x01c FirstPrototypePte : 0x53646156 _MMPTE +0x020 LastContiguousPte : 0x00001d00 _MMPTE +0x024 u2 : __unnamed (6) dt _MMVAD 0x82196f00 //继续查看右节点

+0x000 StartingVpn : 0x16790 +0x004 EndingVpn : 0x167b2 +0x008 Parent : 0x8248f8f0 _MMVAD +0x00c LeftChild : 0x822b1d78 _MMVAD +0x010 RightChild : 0x823b61c0 _MMVAD +0x014 u : __unnamed +0x018 ControlArea : 0x8248d538 _CONTROL_AREA +0x01c FirstPrototypePte : 0xe1a4f948 _MMPTE +0x020 LastContiguousPte : 0xfffffffc _MMPTE

(7) dt _control_area 0x8248d538 //查看控制区域内信息

+0x000 Segment : 0xe1a4f908 _SEGMENT +0x004 DereferenceList : _LIST_ENTRY [ 0x0 - 0x0 ] +0x00c NumberOfSectionReferences : 0 +0x010 NumberOfPfnReferences : 0x1d +0x014 NumberOfMappedViews : 1 +0x018 NumberOfSubsections : 5 +0x01a FlushInProgressCount : 0 +0x01c NumberOfUserReferences : 1 +0x020 u : __unnamed +0x024 FilePointer : 0x8241b628 _FILE_OBJECT +0x028 WaitingForDeletion : (null) +0x02c ModifiedWriteCount : 0 +0x02e NumberOfSystemCacheViews : 0 (8) dt _FILE_OBJECT 0x8241b628 //查看调用dll

+0x030 FileName: _UNICODE_STRING \ (9) dt _SEGMENT 0xe1a4f908

//查看调用dll的基本信息

+0x010 SizeOfSegment : 0x41000 +0x018 SegmentPteTemplate : _MMPTE +0x020 NumberOfCommittedPages : 0 +0x024 ExtendInfo : (null) +0x028 SystemImageBase : (null) +0x02c BasedAddress : 0x10930000 Void

从Windbg可以看出要找某个进程的dll要通过 Eprocess->vadroot(+0x11c)

->MMVAD

->LeftChild(+0x00c) ->RightChild(+0x010)

->Segment(+0x000)->SizeOfSegment(+0x010)

->BasedAddress(+0x02c) ->ControlArea(+0x018)->FilePointer(+0x024)->FileName(+0x030)

源码如下(基于http://blog.sina.com.cn/s/blog_6a03b6ef0101jea8.html修改): 一、通过进程ID获取进程的所有dll #include #include #include //通过VAD枚举进程DLL #define VADOFFSET 0x11c //_EPROCESS->VadRoot #define LEFTCHILDOFFSET 0x00c //_MMVAD->LefCchild #define RIGHTCHILDOFFSET 0x010 //_MMVAD->RightChild #define CONTROLAREAOFFSET 0x018 //_MMVAD->ControlArea #define FILEPOINTEROFFSET 0x024 //_CONTROL_AREA->FilePointer //segment #define SIZEOFFSET 0x010 //_SEGMENT->SizeOfSegment #define BASEOFFSET 0x02c //_SEGMENT->BasedAddress //FILEname #define FILENAMEOFFSET 0x030 //_FILE_OBJECT->FileName #define ENUM_DEVICENAME L\#define ENUM_LINKNAME L\NTKERNELAPI NTSTATUS PsLookupProcessByProcessId( __in HANDLE ProcessId, __deref_out PEPROCESS *Process ); VOID SearchDLLByVAD(ULONG vad) { ULONG leftChild; ULONG rightChild; ULONG controlarea; ULONG segment; ULONG FilePointer; PUNICODE_STRING FileName; ULONG size; ULONG base; leftChild = *(PULONG)((ULONG)vad+LEFTCHILDOFFSET); if(!MmIsAddressValid((PVOID)leftChild)){ return; } else { SearchDLLByVAD(leftChild); } rightChild=*(PULONG)((ULONG)vad+RIGHTCHILDOFFSET); if(!MmIsAddressValid((PVOID)rightChild)){ return; } else { SearchDLLByVAD(rightChild); } controlarea = *(PULONG)((ULONG)vad+CONTROLAREAOFFSET); if(!MmIsAddressValid((PVOID)controlarea)){ return; } segment = *(PULONG)((ULONG)controlarea); if(!MmIsAddressValid((PVOID)segment)){ return; } //获取模块的信息 size = *(PULONG)((ULONG)segment+SIZEOFFSET); base = *(PULONG)((ULONG)segment+BASEOFFSET); FilePointer = *(PULONG)((ULONG)controlarea+FILEPOINTEROFFSET); FileName = (PUNICODE_STRING)(FilePointer+FILENAMEOFFSET); DbgPrint(\模块基地址为xX,大小为xX,模块名称为%wZ\\n\,size,base,FileName); } VOID EnumDllByProcess(PEPROCESS pProcess) { ULONG vad; DbgPrint(\,pProcess); if(!MmIsAddressValid((PVOID)pProcess)){ } vad = *(PULONG)((ULONG)pProcess+VADOFFSET); DbgPrint(\,vad); if(!MmIsAddressValid((PVOID)vad)){ return; } SearchDLLByVAD(vad); } VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject) { UNICODE_STRING LinkName; RtlInitUnicodeString(&LinkName,ENUM_LINKNAME); IoDeleteSymbolicLink(&LinkName); IoDeleteDevice(pDriverObject->DeviceObject); DbgPrint(\); } NTSTATUS GeneralDispatch(IN PDEVICE_OBJECT pDeviceObject,IN PIRP pIrp) { NTSTATUS status = STATUS_SUCCESS; IoCompleteRequest(pIrp,IO_NO_INCREMENT); return status; } NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING registryPath) { NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING DeviceName; UNICODE_STRING LinkName; PDEVICE_OBJECT pDeviceObject; PEPROCESS pProcess; DbgPrint(\); RtlInitUnicodeString(&DeviceName,ENUM_DEVICENAME); IoCreateDevice(pDriverObject,0,&DeviceName,FILE_DEVICE_UNKNOWN,0,FALSE,&pDeviceObject); DbgPrint(\); return;

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库内核学习笔记在线全文阅读。

内核学习笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/528597.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: