AntiMonitor psapi EnumProcess 进程遍历

机器人
摘要
Mxchild
生成中...

0x00 基础知识

在 Windows 系统编程中,获取当前运行的所有进程列表是一项常见需求。EnumProcesses 这个 Windows API 函数就用于此目的,它能够获取系统中所有进程的标识符(PID)。

🎯 函数概述

EnumProcesses 函数的基本原理是向系统请求当前活动进程的PID列表。它的函数原型如下:

BOOL EnumProcesses(
  DWORD *lpidProcess, // 接收进程ID数组的指针
  DWORD cb,           // 数组的大小,以字节为单位
  DWORD *cbNeeded     // 接收实际返回数据大小的指针
);

📝 如何使用它

使用 EnumProcesses 通常包含以下几个步骤:

调用 EnumProcesses 获取PID数组:你需要准备一个足够大的 DWORD 数组,并调用 EnumProcesses。调用成功后,cbNeeded 会告诉你系统写入了多少字节的数据,进程的数量就是这个字节数除以 sizeof(DWORD)。这里需要注意,传入的数组可能不够大。一个可靠的判断方法是,如果返回的 cbNeeded 等于你传入的 cb,那么数组可能已满,有些进程信息可能没被列出。稳健的做法是分配一个更大的数组并重试。

转换PID为进程名(可选):EnumProcesses 只返回PID。如果你需要进程名或其他详细信息,还需以下步骤:

  • 使用 OpenProcess 函数,通过PID获取进程句柄。
  • 使用 EnumProcessModules 函数获取该进程的模块句柄(通常是主执行模块)。
  • 使用 GetModuleFileNameEx 或 GetModuleBaseName 函数,结合进程句柄和模块句柄,来检索进程的可执行文件全路径或仅文件名。

💡 应用场景与特点

EnumProcesses 在以下场景中非常有用:

  • 开发系统监控工具,例如类似任务管理器的软件。
  • 生成系统运行环境快照,用于错误报告和诊断。
  • 安全软件中用于检测可疑进程。

🔄 与其他技术对比

  • 除了PSAPI中的 EnumProcesses,Windows平台枚举进程还可以使用 ToolHelp32 系列函数(如 CreateToolhelp32Snapshot, Process32First, Process32Next)。相比之下,EnumProcesses 是PSAPI库的一部分,而ToolHelp32函数则在KERNEL32.dll中。
  • 简单来说,EnumProcesses 是Windows程序员获取系统进程列表的一个实用工具。虽然它主要提供进程ID,需要借助其他API才能获取更丰富的信息,并且在不同的Windows版本中,其依赖的库和具体实现也有所差异,但它仍然是许多系统工具和诊断程序的重要组成部分。

0x01 示例代码

图片[1]-  AntiMonitor psapi EnumProcess 进程遍历-  侠者非攻社区

本站一切资源仅供学习交流使用请勿商业运营,严禁从事违法侵权等任何非法活动,否则后果自负!
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 共7条

请登录后发表评论