看流星社区

 找回密码
 注册账号
查看: 1770|回复: 0

Win7 x64 Vad遍历模块

[复制链接]

该用户从未签到

发表于 2017-6-1 12:17:25 | 显示全部楼层 |阅读模式

先看下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. 1: kd> dt _eprocess 0xfffffa801b104b30
  2. nt!_EPROCESS
  3.    +0x000 Pcb              : _KPROCESS
  4.    +0x160 ProcessLock      : _EX_PUSH_LOCK
  5.    +0x168 CreateTime       : _LARGE_INTEGER 0x01d24a6b`f7e332ad
  6.    +0x170 ExitTime         : _LARGE_INTEGER 0x0
  7.    +0x178 RundownProtect   : _EX_RUNDOWN_REF
  8.    +0x180 UniqueProcessId  : 0x00000000`00000168 Void
  9.    +0x188 ActiveProcessLinks : _LIST_ENTRY [ 0xfffffa80`1ab5dcb8 - 0xfffffa80`1b0adcb8 ]
  10.    +0x198 ProcessQuotaUsage : [2] 0x3858
  11.    +0x1a8 ProcessQuotaPeak : [2] 0x13068
  12.    +0x1b8 CommitCharge     : 0x49d
  13.    +0x1c0 QuotaBlock       : 0xfffffa80`1aa2e840 _EPROCESS_QUOTA_BLOCK
  14.    +0x1c8 CpuQuotaBlock    : (null)
  15.    +0x1d0 PeakVirtualSize  : 0x5fc5000
  16.    +0x1d8 VirtualSize      : 0x3fa2000
  17.    +0x1e0 SessionProcessLinks : _LIST_ENTRY [ 0xfffffa80`1ab84d10 - 0xfffffa80`1b0add10 ]
  18.    +0x1f0 DebugPort        : (null)
  19.    +0x1f8 ExceptionPortData : 0xfffffa80`1a524e60 Void
  20.    +0x1f8 ExceptionPortValue : 0xfffffa80`1a524e60
  21.    +0x1f8 ExceptionPortState : 0y000
  22.    +0x200 ObjectTable      : 0xfffff8a0`01b11ab0 _HANDLE_TABLE
  23.    +0x208 Token            : _EX_FAST_REF
  24.    +0x210 WorkingSetPage   : 0x784c2
  25.    +0x218 AddressCreationLock : _EX_PUSH_LOCK
  26.    +0x220 RotateInProgress : (null)
  27.    +0x228 ForkInProgress   : (null)
  28.    +0x230 HardwareTrigger  : 0
  29.    +0x238 PhysicalVadRoot  : (null)
  30.    +0x240 CloneRoot        : (null)
  31.    +0x248 NumberOfPrivatePages : 0x35d
  32.    +0x250 NumberOfLockedPages : 0
  33.    +0x258 Win32Process     : 0xfffff900`c1e42ce0 Void
  34.    +0x260 Job              : (null)
  35.    +0x268 SectionObject    : 0xfffff8a0`01b1fab0 Void
  36.    +0x270 SectionBaseAddress : 0x00000000`ff830000 Void
  37.    +0x278 Cookie           : 0x87a6caf0
  38.    +0x27c UmsScheduledThreads : 0
  39.    +0x280 WorkingSetWatch  : (null)
  40.    +0x288 Win32WindowStation : 0x00000000`00000134 Void
  41.    +0x290 InheritedFromUniqueProcessId : 0x00000000`0000022c Void
  42.    +0x298 LdtInformation   : (null)
  43.    +0x2a0 Spare            : (null)
  44.    +0x2a8 ConsoleHostProcess : 0
  45.    +0x2b0 DeviceMap        : 0xfffff8a0`00d8ca10 Void
  46.    +0x2b8 EtwDataSource    : 0xfffffa80`1ad8e290 Void
  47.    +0x2c0 FreeTebHint      : 0x000007ff`fffdc000 Void
  48.    +0x2c8 FreeUmsTebHint   : 0x00000001`00000000 Void
  49.    +0x2d0 PageDirectoryPte : _HARDWARE_PTE
  50.    +0x2d0 Filler           : 0
  51.    +0x2d8 Session          : 0xfffff880`04630000 Void
  52.    +0x2e0 ImageFileName    : [15]  "svchost.exe"
  53.    +0x2ef PriorityClass    : 0x2 ''
  54.    +0x2f0 JobLinks         : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
  55.    +0x300 LockedPagesList  : (null)
  56.    +0x308 ThreadListHead   : _LIST_ENTRY [ 0xfffffa80`1b158a60 - 0xfffffa80`19704480 ]
  57.    +0x318 SecurityPort     : (null)
  58.    +0x320 Wow64Process     : (null)
  59.    +0x328 ActiveThreads    : 4
  60.    +0x32c ImagePathHash    : 0xf5dbefc5
  61.    +0x330 DefaultHardErrorProcessing : 0
  62.    +0x334 LastThreadExitStatus : 0n0
  63.    +0x338 Peb              : 0x000007ff`fffd7000 _PEB
  64.    +0x340 PrefetchTrace    : _EX_FAST_REF
  65.    +0x348 ReadOperationCount : _LARGE_INTEGER 0x23
  66.    +0x350 WriteOperationCount : _LARGE_INTEGER 0x44
  67.    +0x358 OtherOperationCount : _LARGE_INTEGER 0x1fd4
  68.    +0x360 ReadTransferCount : _LARGE_INTEGER 0xa6d6a
  69.    +0x368 WriteTransferCount : _LARGE_INTEGER 0x381e4
  70.    +0x370 OtherTransferCount : _LARGE_INTEGER 0x45269
  71.    +0x378 CommitChargeLimit : 0
  72.    +0x380 CommitChargePeak : 0x918
  73.    +0x388 AweInfo          : (null)
  74.    +0x390 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
  75.    +0x398 Vm               : _MMSUPPORT
  76.    +0x420 MmProcessLinks   : _LIST_ENTRY [ 0xfffffa80`1ab5df50 - 0xfffffa80`1b0adf50 ]
  77.    +0x430 HighestUserAddress : 0x000007ff`ffff0000 Void
  78.    +0x438 ModifiedPageCount : 0xbf
  79.    +0x43c Flags2           : 0xd000
  80.    +0x43c JobNotReallyActive : 0y0
  81.    +0x43c AccountingFolded : 0y0
  82.    +0x43c NewProcessReported : 0y0
  83.    +0x43c ExitProcessReported : 0y0
  84.    +0x43c ReportCommitChanges : 0y0
  85.    +0x43c LastReportMemory : 0y0
  86.    +0x43c ReportPhysicalPageChanges : 0y0
  87.    +0x43c HandleTableRundown : 0y0
  88.    +0x43c NeedsHandleRundown : 0y0
  89.    +0x43c RefTraceEnabled  : 0y0
  90.    +0x43c NumaAware        : 0y0
  91.    +0x43c ProtectedProcess : 0y0
  92.    +0x43c DefaultPagePriority : 0y101
  93.    +0x43c PrimaryTokenFrozen : 0y1
  94.    +0x43c ProcessVerifierTarget : 0y0
  95.    +0x43c StackRandomizationDisabled : 0y0
  96.    +0x43c AffinityPermanent : 0y0
  97.    +0x43c AffinityUpdateEnable : 0y0
  98.    +0x43c PropagateNode    : 0y0
  99.    +0x43c ExplicitAffinity : 0y0
  100.    +0x440 Flags            : 0x144d0801
  101.    +0x440 CreateReported   : 0y1
  102.    +0x440 NoDebugInherit   : 0y0
  103.    +0x440 ProcessExiting   : 0y0
  104.    +0x440 ProcessDelete    : 0y0
  105.    +0x440 Wow64SplitPages  : 0y0
  106.    +0x440 VmDeleted        : 0y0
  107.    +0x440 OutswapEnabled   : 0y0
  108.    +0x440 Outswapped       : 0y0
  109.    +0x440 ForkFailed       : 0y0
  110.    +0x440 Wow64VaSpace4Gb  : 0y0
  111.    +0x440 AddressSpaceInitialized : 0y10
  112.    +0x440 SetTimerResolution : 0y0
  113.    +0x440 BreakOnTermination : 0y0
  114.    +0x440 DeprioritizeViews : 0y0
  115.    +0x440 WriteWatch       : 0y0
  116.    +0x440 ProcessInSession : 0y1
  117.    +0x440 OverrideAddressSpace : 0y0
  118.    +0x440 HasAddressSpace  : 0y1
  119.    +0x440 LaunchPrefetched : 0y1
  120.    +0x440 InjectInpageErrors : 0y0
  121.    +0x440 VmTopDown        : 0y0
  122.    +0x440 ImageNotifyDone  : 0y1
  123.    +0x440 PdeUpdateNeeded  : 0y0
  124.    +0x440 VdmAllowed       : 0y0
  125.    +0x440 CrossSessionCreate : 0y0
  126.    +0x440 ProcessInserted  : 0y1
  127.    +0x440 DefaultIoPriority : 0y010
  128.    +0x440 ProcessSelfDelete : 0y0
  129.    +0x440 SetTimerResolutionLink : 0y0
  130.    +0x444 ExitStatus       : 0n259
  131.    +0x448 VadRoot          : _MM_AVL_TABLE
  132.    +0x488 AlpcContext      : _ALPC_PROCESS_CONTEXT
  133.    +0x4a8 TimerResolutionLink : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
  134.    +0x4b8 RequestedTimerResolution : 0
  135.    +0x4bc ActiveThreadsHighWatermark : 0xc
  136.    +0x4c0 SmallestTimerResolution : 0
  137.    +0x4c8 TimerResolutionStackRecord : (null)
  138. eprocess+0x448 VadRoot
  139. 1: kd> dt _MM_AVL_TABLE 0xfffffa801b104b30+0x448
  140. nt!_MM_AVL_TABLE
  141.    +0x000 BalancedRoot     : _MMADDRESS_NODE
  142.    +0x028 DepthOfTree      : 0y01000 (0x8)
  143.    +0x028 Unused           : 0y000
  144.    +0x028 NumberGenericTableElements : 0y00000000000000000000000000000000000000000000000001110000 (0x70)
  145.    +0x030 NodeHint         : 0xfffffa80`1b158e20 Void
  146.    +0x038 NodeFreeHint     : (null)
  147. eprocess->VadRoot->BlanceRoot 有一个右节点
  148. 1: kd> dt _MMADDRESS_NODE 0xfffffa801b104b30+0x448
  149. nt!_MMADDRESS_NODE
  150.    +0x000 u1               : <unnamed-tag>
  151.    +0x008 LeftChild        : (null)
  152.    +0x010 RightChild       : 0xfffffa80`1b158e20 _MMADDRESS_NODE
  153.    +0x018 StartingVpn      : 0
  154.    +0x020 EndingVpn        : 0

  155. 看下这个节点
  156. 1: kd> dt _MMVAD 0xfffffa80`1b158e20
  157. nt!_MMVAD
  158.    +0x000 u1               : <unnamed-tag>
  159.    +0x008 LeftChild        : 0xfffffa80`1b167680 _MMVAD
  160.    +0x010 RightChild       : 0xfffffa80`1b157da0 _MMVAD
  161.    +0x018 StartingVpn      : 0x7ffe0
  162.    +0x020 EndingVpn        : 0x7ffef
  163.    +0x028 u                : <unnamed-tag>
  164.    +0x030 PushLock         : _EX_PUSH_LOCK
  165.    +0x038 u5               : <unnamed-tag>
  166.    +0x040 u2               : <unnamed-tag>
  167.    +0x048 Subsection       : (null)
  168.    +0x048 MappedSubsection : (null)
  169.    +0x050 FirstPrototypePte : (null)
  170.    +0x058 LastContiguousPte : (null)
  171.    +0x060 ViewLinks        : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
  172.    +0x070 VadsProcess      : (null)
  173. VadsProcess 是空的 说明这个不是正确的 继续看下一个右节点 VadsProcess是一个有效值 说明是一个模块
  174. 1: kd> dt 0xfffffa80`1b157da0 _MMVAD
  175. nt!_MMVAD
  176.    +0x000 u1               : <unnamed-tag>
  177.    +0x008 LeftChild        : 0xfffffa80`1b15ada0 _MMVAD
  178.    +0x010 RightChild       : 0xfffffa80`1b163ad0 _MMVAD
  179.    +0x018 StartingVpn      : 0x7fefdac0
  180.    +0x020 EndingVpn        : 0x7fefdb2a
  181.    +0x028 u                : <unnamed-tag>
  182.    +0x030 PushLock         : _EX_PUSH_LOCK
  183.    +0x038 u5               : <unnamed-tag>
  184.    +0x040 u2               : <unnamed-tag>
  185.    +0x048 Subsection       : 0xfffffa80`19c1e330 _SUBSECTION
  186.    +0x048 MappedSubsection : 0xfffffa80`19c1e330 _MSUBSECTION
  187.    +0x050 FirstPrototypePte : 0xfffff8a0`004b9948 _MMPTE
  188.    +0x058 LastContiguousPte : 0xffffffff`fffffffc _MMPTE
  189.    +0x060 ViewLinks        : _LIST_ENTRY [ 0xfffffa80`1b0db920 - 0xfffffa80`1b2dd450 ]
  190.    +0x070 VadsProcess      : 0xfffffa80`1b104b31 _EPROCESS
  191. 看一下Subsection
  192. 1: kd> dt 0xfffffa80`19c1e330 _SUBSECTION
  193. nt!_SUBSECTION
  194.    +0x000 ControlArea      : 0xfffffa80`19c1e2b0 _CONTROL_AREA
  195.    +0x008 SubsectionBase   : 0xfffff8a0`004b9948 _MMPTE
  196.    +0x010 NextSubsection   : 0xfffffa80`19c1e368 _SUBSECTION
  197.    +0x018 PtesInSubsection : 1
  198.    +0x020 UnusedPtes       : 0
  199.    +0x020 GlobalPerSessionHead : (null)
  200.    +0x028 u                : <unnamed-tag>
  201.    +0x02c StartingSector   : 0
  202.    +0x030 NumberOfFullSectors : 2
  203. 再看下ControlArea
  204. 1: kd> dt 0xfffffa80`19c1e2b0 _CONTROL_AREA
  205. nt!_CONTROL_AREA
  206.    +0x000 Segment          : 0xfffff8a0`004b9900 _SEGMENT
  207.    +0x008 DereferenceList  : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
  208.    +0x018 NumberOfSectionReferences : 1
  209.    +0x020 NumberOfPfnReferences : 0x69
  210.    +0x028 NumberOfMappedViews : 0x23
  211.    +0x030 NumberOfUserReferences : 0x24
  212.    +0x038 u                : <unnamed-tag>
  213.    +0x03c FlushInProgressCount : 0
  214.    +0x040 FilePointer      : _EX_FAST_REF
  215.    +0x048 ControlAreaLock  : 0n0
  216.    +0x04c ModifiedWriteCount : 0
  217.    +0x04c StartingFrame    : 0
  218.    +0x050 WaitingForDeletion : (null)
  219.    +0x058 u2               : <unnamed-tag>
  220.    +0x068 LockedPages      : 0n1
  221.    +0x070 ViewList         : _LIST_ENTRY [ 0xfffffa80`1a93e420 - 0xfffffa80`1a31f5f0 ]
  222. 再看FilePointer
  223. 1: kd> dt _EX_FAST_REF 0xfffffa80`19c1e2b0+0x40
  224. nt!_EX_FAST_REF
  225.    +0x000 Object           : 0xfffffa80`19c1df27 Void
  226.    +0x000 RefCnt           : 0y0111
  227.    +0x000 Value            : 0xfffffa80`19c1df27
  228. 去除低4位就是真正的FileObject,这里就可以看到模块名了
  229. 1: kd> dt _file_object 0xfffffa80`19c1df20
  230. nt!_FILE_OBJECT
  231.    +0x000 Type             : 0n5
  232.    +0x002 Size             : 0n216
  233.    +0x008 DeviceObject     : 0xfffffa80`192df480 _DEVICE_OBJECT
  234.    +0x010 Vpb              : 0xfffffa80`192dd2b0 _VPB
  235.    +0x018 FsContext        : 0xfffff8a0`04008890 Void
  236.    +0x020 FsContext2       : 0xfffff8a0`04008a80 Void
  237.    +0x028 SectionObjectPointer : 0xfffffa80`19c1de18 _SECTION_OBJECT_POINTERS
  238.    +0x030 PrivateCacheMap  : (null)
  239.    +0x038 FinalStatus      : 0n0
  240.    +0x040 RelatedFileObject : 0xfffffa80`193fc930 _FILE_OBJECT
  241.    +0x048 LockOperation    : 0 ''
  242.    +0x049 DeletePending    : 0 ''
  243.    +0x04a ReadAccess       : 0x1 ''
  244.    +0x04b WriteAccess      : 0 ''
  245.    +0x04c DeleteAccess     : 0 ''
  246.    +0x04d SharedRead       : 0x1 ''
  247.    +0x04e SharedWrite      : 0 ''
  248.    +0x04f SharedDelete     : 0x1 ''
  249.    +0x050 Flags            : 0x44042
  250.    +0x058 FileName         : _UNICODE_STRING "\Windows\System32\KernelBase.dll"
  251.    +0x068 CurrentByteOffset : _LARGE_INTEGER 0x0
  252.    +0x070 Waiters          : 0
  253.    +0x074 Busy             : 0
  254.    +0x078 LastLock         : (null)
  255.    +0x080 Lock             : _KEVENT
  256.    +0x098 Event            : _KEVENT
  257.    +0x0b0 CompletionContext : (null)
  258.    +0x0b8 IrpListLock      : 0
  259.    +0x0c0 IrpList          : _LIST_ENTRY [ 0xfffffa80`19c1dfe0 - 0xfffffa80`19c1dfe0 ]
  260.    +0x0d0 FileObjectExtension : (null)
  261. 在下Segment,有基址 如果要隐藏的话这个地方要置0
  262. 1: kd> dt 0xfffff8a0`004b9900 _SEGMENT
  263. nt!_SEGMENT
  264.    +0x000 ControlArea      : 0xfffffa80`19c1e2b0 _CONTROL_AREA
  265.    +0x008 TotalNumberOfPtes : 0x6b
  266.    +0x00c SegmentFlags     : _SEGMENT_FLAGS
  267.    +0x010 NumberOfCommittedPages : 0
  268.    +0x018 SizeOfSegment    : 0x6b000
  269.    +0x020 ExtendInfo       : 0x000007fe`fdac0000 _MMEXTEND_INFO
  270.    +0x020 BasedAddress     : 0x000007fe`fdac0000 Void
  271.    +0x028 SegmentLock      : _EX_PUSH_LOCK
  272.    +0x030 u1               : <unnamed-tag>
  273.    +0x038 u2               : <unnamed-tag>
  274.    +0x040 PrototypePte     : 0xfffff8a0`004b9948 _MMPTE
  275.    +0x048 ThePtes          : [1] _MMPTE
复制代码


代码就很简单了 ,就是遍历二叉树.自己写去吧




点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-19 19:48

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表