- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
先看下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看来下
随便选择一个进程
代码就很简单了 ,就是遍历二叉树.自己写去吧
|
|