使用 Windows API 查找 PID 和 PPID

admin 2024年9月27日09:10:55评论11 views字数 3207阅读10分41秒阅读模式

这篇文章将介绍如何使用 Windows API 查找带有进程名称的进程 ID。这种方法可以用于几个目的。
您可以确定您正在攻击的系统是沙箱环境还是普通系统。或者你只是想将你的 shellcode 注入到指定的进程中,比如 explorer.exe。您无法手动找到 explorer.exe pid。

让我们看看我们将使用哪些 API

第一个 API 名称为 CreateToolhelp32Snapshot。此 API 将返回一个用于枚举进程的 HANDLE。

HANDLE CreateToolhelp32Snapshot(
[in] DWORD dwFlags,
[in] DWORD th32ProcessID
);

用法:

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

在使用其他 API 之前,我们必须创建一个 PROCESSENTRY32W struct 变量。

typedef struct tagPROCESSENTRY32W {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
WCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32W;
PROCESSENTRY32W pe;
pe.dwSize = sizeof(PROCESSENTRY32W);

之后,我们可以使用 Process32FirstW 和 Process32NextW API。

BOOL Process32FirstW(
[in] HANDLE hSnapshot,
[in, out] LPPROCESSENTRY32W lppe
);
BOOL Process32NextW(
[in] HANDLE hSnapshot,
[out] LPPROCESSENTRY32W lppe
);

用法:

if (Process32FirstW(hSnapshot, &pe)) {
do {
if (wcscmp(lpwProcName, pe.szExeFile) == 0) {
pid = pe.th32ProcessID;
return pid;
}
} while (Process32NextW(hSnapshot, &pe));
}

现在让我们看看完整的源代码

#include <windows.h>
#include <tlhelp32.h>
#include <dbghelp.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


DWORD FindProcW(LPCWSTR lpwProcName) {

DWORD pid = 0;

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) { return pid; }

PROCESSENTRY32W pe;
pe.dwSize = sizeof(PROCESSENTRY32W);

if (Process32FirstW(hSnapshot, &pe)) {

do {

if (wcscmp(lpwProcName, pe.szExeFile) == 0) {

pid = pe.th32ProcessID;
return pid;

}

} while (Process32NextW(hSnapshot, &pe));

}

CloseHandle(hSnapshot);

return pid;

}


int main() {

DWORD explorerPID = FindProcW(L"explorer.exe");
printf("explorerPID: %ldn", explorerPID);

return 0;

}

你可以使用 mingw64 或 cl.exe 来编译这段代码

x86_64-w64-mingw32-gcc findpid.c -o findpid.exe -ldbghelp

使用 Windows API 查找 PID 和 PPID

我们可以看到 explorer.exe 的进程 ID

现在让我们编写另一个代码,它将向我们显示任何进程的 ParentPID。我们将再次使用相同的代码,但我将键入一个新函数

这是最后一个完整的源代码

#include <windows.h>
#include <tlhelp32.h>
#include <dbghelp.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


DWORD FindProcW(LPCWSTR lpwProcName) {

DWORD pid = 0;

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) { return pid; }

PROCESSENTRY32W pe;
pe.dwSize = sizeof(PROCESSENTRY32W);

if (Process32FirstW(hSnapshot, &pe)) {

do {

if (wcscmp(lpwProcName, pe.szExeFile) == 0) {

pid = pe.th32ProcessID;
return pid;

}

} while (Process32NextW(hSnapshot, &pe));

}

CloseHandle(hSnapshot);

return pid;

}


DWORD FindPPIDW(DWORD pid) {

DWORD ppid = 0;

HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) { return ppid; }

PROCESSENTRY32W pe;
pe.dwSize = sizeof(PROCESSENTRY32W);

if (Process32FirstW(hSnapshot, &pe)) {

do {

if (pe.th32ParentProcessID == pid) {

ppid = pe.th32ProcessID;
return ppid;

}

} while (Process32NextW(hSnapshot, &pe));

}

CloseHandle(hSnapshot);

return ppid;

}


int main() {

DWORD msedgePID = FindProcW(L"msedge.exe");
printf("msedgePID: %ldn", msedgePID);

DWORD msedgePPID = FindPPIDW(msedgePID);
printf("msedgePPID: %ldn", msedgePPID);

return 0;

}

这是 last code 的结果

使用 Windows API 查找 PID 和 PPID

正如我所说,当您想将 shellcode 注入到指定的进程中时,此方法很有用。但是 shellcode 注入并不是本文的实际主题。

提供的此工具仅用于教育和信息目的!

  • 使用 Windows API 查找 PID 和 PPID

  • 使用 Windows API 查找 PID 和 PPID

其它相关教程

linux恶意软件开发对抗与进程安全管理视频教程(2024最新)

使用 Windows API 查找 PID 和 PPID

其它课程

linux文件系统存储与文件过滤安全开发视频教程(2024最新)

使用 Windows API 查找 PID 和 PPID

linux高级usb安全开发与源码分析视频教程

使用 Windows API 查找 PID 和 PPID

linux程序设计与安全开发

使用 Windows API 查找 PID 和 PPID

  • windows恶意软件开发与对抗视频教程

  • 使用 Windows API 查找 PID 和 PPID

  • 使用 Windows API 查找 PID 和 PPID

  • windows

  • 使用 Windows API 查找 PID 和 PPID

  • windows()

  • 使用 Windows API 查找 PID 和 PPID

  • USB()

  • 使用 Windows API 查找 PID 和 PPID

  • ()

  • 使用 Windows API 查找 PID 和 PPID

  • ios

  • 使用 Windows API 查找 PID 和 PPID

  • windbg

  • 使用 Windows API 查找 PID 和 PPID

  • ()

  • 使用 Windows API 查找 PID 和 PPID使用 Windows API 查找 PID 和 PPID使用 Windows API 查找 PID 和 PPID

  • 使用 Windows API 查找 PID 和 PPID

原文始发于微信公众号(安全狗的自我修养):使用 Windows API 查找 PID 和 PPID

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月27日09:10:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用 Windows API 查找 PID 和 PPIDhttp://cn-sec.com/archives/3212566.html

发表评论

匿名网友 填写信息