ZwQueryVirtualMemory枚举进程模块

ZwQueryVirtualMemory枚举进程模块

  ZwQueryVirtualMemory算是枚举进程方法中的黑科技吧,主要是该方法可以检测出隐藏的模块(类似IceSword)

  代码VS2015测试通过

  再次奉上源码链接:https://github.com/Arsense/WindowsCode/tree/master/ZwQueryVirtualMemory

好的下面我们进入正题 这个没有深入研究 就是简单测试读了下代码 很久了 忘记差不多了 所以只是整理献上一个比较好的其他博友的

 

 

1常见的枚举进程模块的方法有

CreateToolhelp32Snaphot,Module32First,Module32Next.这几种 也是最通用的方法

但ntdll.dll导出的未文档化接口ZwQueryVirtualMemory,。相比前面所介绍的方法,该方法可以检测出隐藏的模块(类似IceSword)。

函数的原型:

 

     NTSTATUS
NTAPI
ZwQueryVirtualMemory(
            IN HANDLE ProcessHandle,
            IN PVOID BaseAddress,
            IN MEMORY_INFORMATION_CLASS MemoryInformationClass,
            OUT PVOID MemoryInformation,
            IN ULONG MemoryInformationLength,
            OUT PULONG ReturnLength OPTIONAL );

typedef enum _MEMORY_INFORMATION_CLASS {
            MemoryBasicInformation,
            MemoryWorkingSetList,
            MemorySectionName,
            MemoryBasicVlmInformation
} MEMORY_INFORMATION_CLASS;

 



参数说明:
           ProcessHandle - 目标进程句柄
           BaseAddress    - 要查询的虚拟内存基址
           MemoryInformationClass - 要查询的内存信息类
           MemoryInformation - 用户提供的缓冲区,返回内存相关信息
           MemoryInformationLength - 缓冲区长度(字节为单位)
           ReturnLength - 实际返回的内存信息长度(字节为单位)
返回值:
           NTSTATUS - 返回STATUS_SUCCESS或一个错误状态码

我们要枚举进程模块信息, 需要用到两类内存信息MemoryBasicInformation和MemorySectionName,
前者返回内存的基本信息, 比如: 内存区的基址,大小以及页面的各种属性等等, 而后者则返回内存段的名字,
也就是我们所要找的模块名. 利用前者我们可以过滤出类型为MEM_IMAGE的内存段并得到内存段的基址和属性, 利用后者我们可以得到模块名.

另外,需要注意的是该方法找出来的设备名是诸如\Device\HarddiskVolume1之类的名称,所以我们需要把它转换为我们习惯的DOS设备名,如C:\,D:\等。不能自以为是的认为\Device\HarddiskVolume1对应C盘\Device\HarddiskVolume2对应D盘。该转换是通过调用QueryDosDevice来实现的。

 

大致就这么一些 感兴趣的朋友可以去我的github上下载自己运行调试就懂了 

posted @ 2017-02-20 00:00 Clay- 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值