所以...我需要从"notepad.exe"进程中获取peb,有人知道如何制作它吗?
我正在尝试使用"GetModuleHandle"API,但是...不会返回指针(每次都返回零),因为我必须是该模块的调用者进程.
出于这个原因,我想知道如何使用"EnumProcessModules"或"CreateToolhelp32Snapshot"来获取它.
如果有人知道请告诉我如何,提前谢谢!
我正在尝试编写一个程序,该程序可以在读取命令行参数后屏蔽它们。我知道它存储在 PEB 中,因此我尝试使用“如何使用汇编程序(x64 OS)获取进程环境块(PEB)地址?”的答案。通过 Sirmabus获取并在那里进行修改。这是一个执行此操作的最小程序:
\n#include <wchar.h>\n#include <windows.h>\n#include <winnt.h>\n#include <winternl.h>\n\n// Thread Environment Block (TEB)\n#if defined(_M_X64) // x64\nPTEB tebPtr = reinterpret_cast<PTEB>(__readgsqword(reinterpret_cast<DWORD_PTR>(&static_cast<NT_TIB*>(nullptr)->Self)));\n#else // x86\nPTEB tebPtr = reinterpret_cast<PTEB>(__readfsdword(reinterpret_cast<DWORD_PTR>(&static_cast<NT_TIB*>(nullptr)->Self)));\n#endif\n\n// Process Environment Block (PEB)\nPPEB pebPtr = tebPtr->ProcessEnvironmentBlock;\n\nint main() {\n UNICODE_STRING *s = &pebPtr->ProcessParameters->CommandLine;\n wmemset(s->Buffer, \'x\', s->Length / sizeof *s->Buffer);\n getwchar();\n}\nRun Code Online (Sandbox Code Playgroud)\n我将其编译为 32 位和 64 位,并在 32 位和 64 位版本的 Windows 上进行了测试。我使用Process Explorer查找命令行,并使用此 PowerShell 命令通过 WMI 获取它:
\nGet-WmiObject Win32_Process -Filter "name = \'overwrite.exe\'" | Select-Object CommandLine\nRun Code Online (Sandbox Code Playgroud)\n我发现这在我测试过的每个组合中都有效,除了在 WOW64 …