相关疑难解决方法(0)

如何从extern进程获取进程环境块(PEB)?

所以...我需要从"notepad.exe"进程中获取peb,有人知道如何制作它吗?

我正在尝试使用"GetModuleHandle"API,但是...不会返回指针(每次都返回零),因为我必须是该模块的调用者进程.

出于这个原因,我想知道如何使用"EnumProcessModules"或"CreateToolhelp32Snapshot"来获取它.

如果有人知道请告诉我如何,提前谢谢!

delphi api winapi

4
推荐指数
1
解决办法
5343
查看次数

WOW64 程序如何覆盖其命令行参数,如 WMI 所示?

我正在尝试编写一个程序,该程序可以在读取命令行参数后屏蔽它们。我知道它存储在 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}\n
Run Code Online (Sandbox Code Playgroud)\n

我将其编译为 32 位和 64 位,并在 32 位和 64 位版本的 Windows 上进行了测试。我使用Process Explorer查找命令行,并使用此 PowerShell 命令通过 WMI 获取它:

\n
Get-WmiObject Win32_Process -Filter "name = \'overwrite.exe\'" | Select-Object CommandLine\n
Run Code Online (Sandbox Code Playgroud)\n

我发现这在我测试过的每个组合中都有效,除了在 WOW64 …

c++ wmi winapi wow64 command-line-arguments

2
推荐指数
1
解决办法
381
查看次数

标签 统计

winapi ×2

api ×1

c++ ×1

command-line-arguments ×1

delphi ×1

wmi ×1

wow64 ×1