利用NTDLL导出函数枚举进程
来源:互联网 发布:python return 编辑:程序博客网 时间:2024/05/21 19:26
前面我们曾经介绍过使用PSAPI相关函数枚举进程的方法,但除此之外还有一种方法常用枚举进程的方法,那就是利用ZwQuerySystemInformation函数,这个函数是由NTDLL导出的,但在使用的时候需要我们动态调用,其实该函数的功能很强大,仅仅用来查询进程信息显然是屈才了。
下列代码给出了完整的演示过程:
#include <windows.h>
#include <ntsecapi.h>
#include <stdio.h>
#define SystemProcessesAndThreadsInformation 5
// 动态调用
typedef DWORD (WINAPI *ZWQUERYSYSTEMINFORMATION) (DWORD,
PVOID,
DWORD,
PDWORD);
// 结构定义
typedef struct _SYSTEM_PROCESS_INFORMATION{
DWORD NextEntryDelta;
DWORD ThreadCount;
DWORD Reserved1[6];
FILETIME ftCreateTime;
FILETIME ftUserTime;
FILETIME ftKernelTime;
UNICODE_STRING ProcessName;
DWORD BasePriority;
DWORD ProcessId;
DWORD InheritedFromProcessId;
DWORD HandleCount;
DWORD Reserved2[2];
DWORD VmCounters;
DWORD dCommitCharge;
PVOID ThreadInfos[1];
}SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
int main()
{
// 导出函数
HMODULE hNtDll = GetModuleHandle("ntdll.dll");
ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(hNtDll,"ZwQuerySystemInformation");
ULONG cbBuffer = 0x10000;
LPVOID pBuffer = NULL;
pBuffer = malloc(cbBuffer);
if(pBuffer == NULL)
return -1;
// 获取进程信息
ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,pBuffer,cbBuffer,NULL);
// 指针指向链表头部
PSYSTEM_PROCESS_INFORMATION pInfo = (PSYSTEM_PROCESS_INFORMATION)pBuffer;
// 输出结果
for(;;)
{
printf("PID:%d \t%ls\n",pInfo->ProcessId,pInfo->ProcessName.Buffer);
if(pInfo->NextEntryDelta == 0)
break;
// 读取下一个节点
pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo)+pInfo->NextEntryDelta);
}
// 释放缓冲区
free(pBuffer);
return 0;
}
- 利用NTDLL导出函数枚举进程
- 通过ntdll.dll的函数枚举进程
- NTDLL.dll5 : 导出函数表
- NTDLL.dll6 : 导出函数原型
- 通过ntdll.dll提供的API函数实现当前进程的枚举
- 在应用层使用ntdll.dll中的未导出函数
- 进程枚举相关函数
- React OS 中的 Kernel32.dll & Ntdll.dll & ntoskrnl 所导出的函数
- 利用未公开函数枚举进程及其关联的端口系列之(-)
- 利用未公开函数枚举进程及其关联的端口系列之(二)
- 用EnumProcesses函数枚举进程
- 利用peb枚举当前进程加载模块
- 利用ZwQuerySystemInformation和paspi枚举进程
- NTDLL
- NTDLL
- windows xp sp3 系统ntdll.dll所有导出的API函数列表大全(整理在此,方便查阅,学习)
- 利用进程快照枚举当前Windows运行进程的信息
- 调用PSAPI函数枚举系统进程
- ztree多树实现异步交互
- VS2008+DDK(3790.1830)+ddkwizard搭建驱动开发环境
- jQuery zTree
- DDK 中LIST_ENTRY的用法
- Windows驱动程序入门
- 利用NTDLL导出函数枚举进程
- LSP信息查看
- C#.NET强制保留两位小数
- 网络数据包捕获与发送的多重实现 (学习)
- WinDBG 技巧:设断点命令详解(bp, bu, bm, ba 以及bl, bc, bd, be)
- IRP概述
- 驱动和应用层的三种通信方式 (学习)
- 驱动开发基础资料 ( 精华总结)
- MFC----windows控件