Win7 x64 Vad遍历模块
先看下NtQueryVirtualMenmory代码
刚开始只是判断下buff是否符合要求
然后去GS寄存器获取东西,但发现偏移过去是context,这就无从而知了.
然后去得到EPROCESS 这里判断是不是系统进程和buff是否符合要求
如果是查询MemoryBasicInformation信息就填充一些信息,本篇文章主要是看 MemorySectionName功能(2)
如果是查询MemoryWorkingSetList和1号功能就调用MiGetWorkingSetInfo或者MiGetWorkingSetInfoList
如果都不是1 4 那就是2好功能MemorySectionName
先判断是不是系统进程 如果不是就KeStackAttachProcess上去
然后获取锁锁住进程
然后判断如果进程flags是否包含0x20 (VmDeleted ),是就取消附加 解锁 返回0xC000010A
如果进程flags(VmDeleted )是1就去遍历平衡二叉树
VadRoot +5 是u成员,不知道是东西,应该跟初始化状态有关,因为如果是新创建的进程,这个u+5是0,然后过一会就会有值.
期间判断偏移是否超过正在枚举的模块的大小
得到节点后就去获取FILE_OBJECT 上面标签写错了
可以看到是路径是MMVAD->Subsection->ControlArea->FilePointer.Value 去除后3位
然后调用下面2个其中一个函数去锁住这个对象
如果获取到FileObject 且不是3号功能
就调用ObpQueryNameString查询文件名
由此 看了之后Windbg看来下
随便选择一个进程
1: kd> dt _eprocess 0xfffffa801b104b30
nt!_EPROCESS+0x000 Pcb : _KPROCESS+0x160 ProcessLock : _EX_PUSH_LOCK+0x168 CreateTime : _LARGE_INTEGER 0x01d24a6b`f7e332ad+0x170 ExitTime : _LARGE_INTEGER 0x0+0x178 RundownProtect : _EX_RUNDOWN_REF+0x180 UniqueProcessId : 0x00000000`00000168 Void+0x188 ActiveProcessLinks : _LIST_ENTRY [ 0xfffffa80`1ab5dcb8 - 0xfffffa80`1b0adcb8 ]+0x198 ProcessQuotaUsage : [2] 0x3858+0x1a8 ProcessQuotaPeak : [2] 0x13068+0x1b8 CommitCharge : 0x49d+0x1c0 QuotaBlock : 0xfffffa80`1aa2e840 _EPROCESS_QUOTA_BLOCK+0x1c8 CpuQuotaBlock : (null) +0x1d0 PeakVirtualSize : 0x5fc5000+0x1d8 VirtualSize : 0x3fa2000+0x1e0 SessionProcessLinks : _LIST_ENTRY [ 0xfffffa80`1ab84d10 - 0xfffffa80`1b0add10 ]+0x1f0 DebugPort : (null) +0x1f8 ExceptionPortData : 0xfffffa80`1a524e60 Void+0x1f8 ExceptionPortValue : 0xfffffa80`1a524e60+0x1f8 ExceptionPortState : 0y000+0x200 ObjectTable : 0xfffff8a0`01b11ab0 _HANDLE_TABLE+0x208 Token : _EX_FAST_REF+0x210 WorkingSetPage : 0x784c2+0x218 AddressCreationLock : _EX_PUSH_LOCK+0x220 RotateInProgress : (null) +0x228 ForkInProgress : (null) +0x230 HardwareTrigger : 0+0x238 PhysicalVadRoot : (null) +0x240 CloneRoot : (null) +0x248 NumberOfPrivatePages : 0x35d+0x250 NumberOfLockedPages : 0+0x258 Win32Process : 0xfffff900`c1e42ce0 Void+0x260 Job : (null) +0x268 SectionObject : 0xfffff8a0`01b1fab0 Void+0x270 SectionBaseAddress : 0x00000000`ff830000 Void+0x278 Cookie : 0x87a6caf0+0x27c UmsScheduledThreads : 0+0x280 WorkingSetWatch : (null) +0x288 Win32WindowStation : 0x00000000`00000134 Void+0x290 InheritedFromUniqueProcessId : 0x00000000`0000022c Void+0x298 LdtInformation : (null) +0x2a0 Spare : (null) +0x2a8 ConsoleHostProcess : 0+0x2b0 DeviceMap : 0xfffff8a0`00d8ca10 Void+0x2b8 EtwDataSource : 0xfffffa80`1ad8e290 Void+0x2c0 FreeTebHint : 0x000007ff`fffdc000 Void+0x2c8 FreeUmsTebHint : 0x00000001`00000000 Void+0x2d0 PageDirectoryPte : _HARDWARE_PTE+0x2d0 Filler : 0+0x2d8 Session : 0xfffff880`04630000 Void+0x2e0 ImageFileName : [15] "svchost.exe"+0x2ef PriorityClass : 0x2 ''+0x2f0 JobLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]+0x300 LockedPagesList : (null) +0x308 ThreadListHead : _LIST_ENTRY [ 0xfffffa80`1b158a60 - 0xfffffa80`19704480 ]+0x318 SecurityPort : (null) +0x320 Wow64Process : (null) +0x328 ActiveThreads : 4+0x32c ImagePathHash : 0xf5dbefc5+0x330 DefaultHardErrorProcessing : 0+0x334 LastThreadExitStatus : 0n0+0x338 Peb : 0x000007ff`fffd7000 _PEB+0x340 PrefetchTrace : _EX_FAST_REF+0x348 ReadOperationCount : _LARGE_INTEGER 0x23+0x350 WriteOperationCount : _LARGE_INTEGER 0x44+0x358 OtherOperationCount : _LARGE_INTEGER 0x1fd4+0x360 ReadTransferCount : _LARGE_INTEGER 0xa6d6a+0x368 WriteTransferCount : _LARGE_INTEGER 0x381e4+0x370 OtherTransferCount : _LARGE_INTEGER 0x45269+0x378 CommitChargeLimit : 0+0x380 CommitChargePeak : 0x918+0x388 AweInfo : (null) +0x390 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO+0x398 Vm : _MMSUPPORT+0x420 MmProcessLinks : _LIST_ENTRY [ 0xfffffa80`1ab5df50 - 0xfffffa80`1b0adf50 ]+0x430 HighestUserAddress : 0x000007ff`ffff0000 Void+0x438 ModifiedPageCount : 0xbf+0x43c Flags2 : 0xd000+0x43c JobNotReallyActive : 0y0+0x43c AccountingFolded : 0y0+0x43c NewProcessReported : 0y0+0x43c ExitProcessReported : 0y0+0x43c ReportCommitChanges : 0y0+0x43c LastReportMemory : 0y0+0x43c ReportPhysicalPageChanges : 0y0+0x43c HandleTableRundown : 0y0+0x43c NeedsHandleRundown : 0y0+0x43c RefTraceEnabled : 0y0+0x43c NumaAware : 0y0+0x43c ProtectedProcess : 0y0+0x43c DefaultPagePriority : 0y101+0x43c PrimaryTokenFrozen : 0y1+0x43c ProcessVerifierTarget : 0y0+0x43c StackRandomizationDisabled : 0y0+0x43c AffinityPermanent : 0y0+0x43c AffinityUpdateEnable : 0y0+0x43c PropagateNode : 0y0+0x43c ExplicitAffinity : 0y0+0x440 Flags : 0x144d0801+0x440 CreateReported : 0y1+0x440 NoDebugInherit : 0y0+0x440 ProcessExiting : 0y0+0x440 ProcessDelete : 0y0+0x440 Wow64SplitPages : 0y0+0x440 VmDeleted : 0y0+0x440 OutswapEnabled : 0y0+0x440 Outswapped : 0y0+0x440 ForkFailed : 0y0+0x440 Wow64VaSpace4Gb : 0y0+0x440 AddressSpaceInitialized : 0y10+0x440 SetTimerResolution : 0y0+0x440 BreakOnTermination : 0y0+0x440 DeprioritizeViews : 0y0+0x440 WriteWatch : 0y0+0x440 ProcessInSession : 0y1+0x440 OverrideAddressSpace : 0y0+0x440 HasAddressSpace : 0y1+0x440 LaunchPrefetched : 0y1+0x440 InjectInpageErrors : 0y0+0x440 VmTopDown : 0y0+0x440 ImageNotifyDone : 0y1+0x440 PdeUpdateNeeded : 0y0+0x440 VdmAllowed : 0y0+0x440 CrossSessionCreate : 0y0+0x440 ProcessInserted : 0y1+0x440 DefaultIoPriority : 0y010+0x440 ProcessSelfDelete : 0y0+0x440 SetTimerResolutionLink : 0y0+0x444 ExitStatus : 0n259+0x448 VadRoot : _MM_AVL_TABLE+0x488 AlpcContext : _ALPC_PROCESS_CONTEXT+0x4a8 TimerResolutionLink : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]+0x4b8 RequestedTimerResolution : 0+0x4bc ActiveThreadsHighWatermark : 0xc+0x4c0 SmallestTimerResolution : 0+0x4c8 TimerResolutionStackRecord : (null)
eprocess+0x448 VadRoot
1: kd> dt _MM_AVL_TABLE 0xfffffa801b104b30+0x448
nt!_MM_AVL_TABLE+0x000 BalancedRoot : _MMADDRESS_NODE+0x028 DepthOfTree : 0y01000 (0x8)+0x028 Unused : 0y000+0x028 NumberGenericTableElements : 0y00000000000000000000000000000000000000000000000001110000 (0x70)+0x030 NodeHint : 0xfffffa80`1b158e20 Void+0x038 NodeFreeHint : (null)
eprocess->VadRoot->BlanceRoot 有一个右节点
1: kd> dt _MMADDRESS_NODE 0xfffffa801b104b30+0x448
nt!_MMADDRESS_NODE+0x000 u1 : <unnamed-tag>+0x008 LeftChild : (null) +0x010 RightChild : 0xfffffa80`1b158e20 _MMADDRESS_NODE+0x018 StartingVpn : 0+0x020 EndingVpn : 0看下这个节点
1: kd> dt _MMVAD 0xfffffa80`1b158e20
nt!_MMVAD+0x000 u1 : <unnamed-tag>+0x008 LeftChild : 0xfffffa80`1b167680 _MMVAD+0x010 RightChild : 0xfffffa80`1b157da0 _MMVAD+0x018 StartingVpn : 0x7ffe0+0x020 EndingVpn : 0x7ffef+0x028 u : <unnamed-tag>+0x030 PushLock : _EX_PUSH_LOCK+0x038 u5 : <unnamed-tag>+0x040 u2 : <unnamed-tag>+0x048 Subsection : (null) +0x048 MappedSubsection : (null) +0x050 FirstPrototypePte : (null) +0x058 LastContiguousPte : (null) +0x060 ViewLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]+0x070 VadsProcess : (null)
VadsProcess 是空的 说明这个不是正确的 继续看下一个右节点 VadsProcess是一个有效值 说明是一个模块
1: kd> dt 0xfffffa80`1b157da0 _MMVAD
nt!_MMVAD+0x000 u1 : <unnamed-tag>+0x008 LeftChild : 0xfffffa80`1b15ada0 _MMVAD+0x010 RightChild : 0xfffffa80`1b163ad0 _MMVAD+0x018 StartingVpn : 0x7fefdac0+0x020 EndingVpn : 0x7fefdb2a+0x028 u : <unnamed-tag>+0x030 PushLock : _EX_PUSH_LOCK+0x038 u5 : <unnamed-tag>+0x040 u2 : <unnamed-tag>+0x048 Subsection : 0xfffffa80`19c1e330 _SUBSECTION+0x048 MappedSubsection : 0xfffffa80`19c1e330 _MSUBSECTION+0x050 FirstPrototypePte : 0xfffff8a0`004b9948 _MMPTE+0x058 LastContiguousPte : 0xffffffff`fffffffc _MMPTE+0x060 ViewLinks : _LIST_ENTRY [ 0xfffffa80`1b0db920 - 0xfffffa80`1b2dd450 ]+0x070 VadsProcess : 0xfffffa80`1b104b31 _EPROCESS
看一下Subsection
1: kd> dt 0xfffffa80`19c1e330 _SUBSECTION
nt!_SUBSECTION+0x000 ControlArea : 0xfffffa80`19c1e2b0 _CONTROL_AREA+0x008 SubsectionBase : 0xfffff8a0`004b9948 _MMPTE+0x010 NextSubsection : 0xfffffa80`19c1e368 _SUBSECTION+0x018 PtesInSubsection : 1+0x020 UnusedPtes : 0+0x020 GlobalPerSessionHead : (null) +0x028 u : <unnamed-tag>+0x02c StartingSector : 0+0x030 NumberOfFullSectors : 2
再看下ControlArea
1: kd> dt 0xfffffa80`19c1e2b0 _CONTROL_AREA
nt!_CONTROL_AREA+0x000 Segment : 0xfffff8a0`004b9900 _SEGMENT+0x008 DereferenceList : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]+0x018 NumberOfSectionReferences : 1+0x020 NumberOfPfnReferences : 0x69+0x028 NumberOfMappedViews : 0x23+0x030 NumberOfUserReferences : 0x24+0x038 u : <unnamed-tag>+0x03c FlushInProgressCount : 0+0x040 FilePointer : _EX_FAST_REF+0x048 ControlAreaLock : 0n0+0x04c ModifiedWriteCount : 0+0x04c StartingFrame : 0+0x050 WaitingForDeletion : (null) +0x058 u2 : <unnamed-tag>+0x068 LockedPages : 0n1+0x070 ViewList : _LIST_ENTRY [ 0xfffffa80`1a93e420 - 0xfffffa80`1a31f5f0 ]
再看FilePointer
1: kd> dt _EX_FAST_REF 0xfffffa80`19c1e2b0+0x40
nt!_EX_FAST_REF+0x000 Object : 0xfffffa80`19c1df27 Void+0x000 RefCnt : 0y0111+0x000 Value : 0xfffffa80`19c1df27
去除低4位就是真正的FileObject,这里就可以看到模块名了
1: kd> dt _file_object 0xfffffa80`19c1df20
nt!_FILE_OBJECT+0x000 Type : 0n5+0x002 Size : 0n216+0x008 DeviceObject : 0xfffffa80`192df480 _DEVICE_OBJECT+0x010 Vpb : 0xfffffa80`192dd2b0 _VPB+0x018 FsContext : 0xfffff8a0`04008890 Void+0x020 FsContext2 : 0xfffff8a0`04008a80 Void+0x028 SectionObjectPointer : 0xfffffa80`19c1de18 _SECTION_OBJECT_POINTERS+0x030 PrivateCacheMap : (null) +0x038 FinalStatus : 0n0+0x040 RelatedFileObject : 0xfffffa80`193fc930 _FILE_OBJECT+0x048 LockOperation : 0 ''+0x049 DeletePending : 0 ''+0x04a ReadAccess : 0x1 ''+0x04b WriteAccess : 0 ''+0x04c DeleteAccess : 0 ''+0x04d SharedRead : 0x1 ''+0x04e SharedWrite : 0 ''+0x04f SharedDelete : 0x1 ''+0x050 Flags : 0x44042+0x058 FileName : _UNICODE_STRING "\Windows\System32\KernelBase.dll"+0x068 CurrentByteOffset : _LARGE_INTEGER 0x0+0x070 Waiters : 0+0x074 Busy : 0+0x078 LastLock : (null) +0x080 Lock : _KEVENT+0x098 Event : _KEVENT+0x0b0 CompletionContext : (null) +0x0b8 IrpListLock : 0+0x0c0 IrpList : _LIST_ENTRY [ 0xfffffa80`19c1dfe0 - 0xfffffa80`19c1dfe0 ]+0x0d0 FileObjectExtension : (null)
在下Segment,有基址 如果要隐藏的话这个地方要置0
1: kd> dt 0xfffff8a0`004b9900 _SEGMENT
nt!_SEGMENT+0x000 ControlArea : 0xfffffa80`19c1e2b0 _CONTROL_AREA+0x008 TotalNumberOfPtes : 0x6b+0x00c SegmentFlags : _SEGMENT_FLAGS+0x010 NumberOfCommittedPages : 0+0x018 SizeOfSegment : 0x6b000+0x020 ExtendInfo : 0x000007fe`fdac0000 _MMEXTEND_INFO+0x020 BasedAddress : 0x000007fe`fdac0000 Void+0x028 SegmentLock : _EX_PUSH_LOCK+0x030 u1 : <unnamed-tag>+0x038 u2 : <unnamed-tag>+0x040 PrototypePte : 0xfffff8a0`004b9948 _MMPTE+0x048 ThePtes : [1] _MMPTE
代码就很简单了 ,就是遍历二叉树.自己写去吧
Win7 x64 Vad遍历模块相关推荐
- [转载] 关于Win7 x64下过TP保护的一些思路,内核层过保护,驱动过保护
首先特别感谢梦老大,本人一直没搞懂异常处理机制,看了他的教程之后终于明白了. 在他的教程里我学到了不少东西. 第一次在论坛发帖,就说说Win7 x64位下怎么过TP保护.如果有讲错的地方,还望指出. ...
- ios遍历模块的方式
方式一: 通过mach_vm_region系统API 参考代码:https://github.com/davidrhodus/misc/blob/master/iOS-internals/vmmap. ...
- emacs python ide_Emacs Python IDE win7 x64
安装平台 win7 x64 ,emacs 23.3.1 snippet工具,可自定义一些模板: .emacs 配置如下 (add-to-list 'load-path "~/.emacs.d ...
- VC6 Win7 x64 提示 Remote Executable path And File Name
在win7 x64 位操作系统安装 VC6++ 编译程序提示 Remote Executable path And File Name对话框,且build 下 Debug Remote Connect ...
- Dell Latitude 3490 使用 UEFI+GPT 安装 Win7 x64
转载请注明出处!转载请注明出处!转载请注明出处! 公司近期采购了一批笔记本,由于刚好赶上Dell升级换代,原来的3480升级到了3490. 由于部分同事用不惯Win10系统,再加上有些软件不兼容,于是 ...
- VMware win7 x64虚拟机安装
材料: - VMware WorkStation Pro(百度一搜就能下载) - win7 x64镜像(.iso后缀文件,官网下的4G多点在VMware上cd安装会遇到问题) - 迎难而上的? 遇到的 ...
- EFI引导-硬盘(U盘)安装win7 x64
原文地址为: EFI引导-硬盘(U盘)安装win7 x64 关于EFI的介绍,就不赘述了. 大家可以看看维基百科的介绍 http://zh.wikipedia.org/wiki/UEFI 在网上找了E ...
- 解決一例Win7 X64 SP1系統0x00000124藍屏的故障
有一Win7 X64的電腦,升級到SP1之後,打遊戲出現藍屏,代碼0x00000124. 經過反复判斷,確定不是驅動程序的問題,也不是SP1安裝得不好. 最終發現是對CPU降壓造成的,將CPU電壓稍微 ...
- 服务器磁盘阵列做win7系统,win7 X64 中RIAD0的磁盘阵列怎么组建
win7 X64 中RIAD0的磁盘阵列怎么组建? 安装好SATA硬盘之后,就要进入BIOS中打开南桥芯片的RAID功能.具体方法是:进入BIOS设置程序的"OnChip IDE Devic ...
最新文章
- Linux C编程--进程间通信(IPC)5--System V IPC 机制1--消息队列
- 内核中的HZ 及延迟等
- php group by 求和,GROUP BY 求合计、平均值、最大最小值、数据件数
- knn k的选取_KNN - 初窥K近邻算法
- Sublime Text 3 无法输入中文解决方案
- win10推送_Win10推送更新升级Edge浏览器:用户发现电脑速度因此变慢
- 算法题存档20200505
- sed命令 linux下的超强查找和替换命令
- SQLi Labs Less-1 联合注入+报错注入
- web developer tips (71): 关于FastCGI 1.5beta几个新配置设置
- Struts2 简单的上传文件并且显示图片
- 超强、超详细Redis入门教程
- windows 中获取字体文件名
- 通过路由器管理界面刷openwrt
- 无线城市--WiMax,WiFi-Mesh和3G/4G/5g网络
- 基于Node.js的ORM框架 Prisma的上手使用
- Ignite Beijing 2019你参加了吗?多图,慎点!
- 流程发现算法第1讲| Alpha算法
- Ubuntu18.04下安装Nvidia驱动和CUDA10.1+CUDNN7.6.5
- ak09918c磁力计参数文档