C# 如何在外部运行进程中更改PEB的命令行
基本上,我希望能够更改命令行的PEB,我相信它位于偏移量C# 如何在外部运行进程中更改PEB的命令行,c#,windows,readprocessmemory,C#,Windows,Readprocessmemory,基本上,我希望能够更改命令行的PEB,我相信它位于偏移量0x70。我正试图使用WriteProcessMemory来实现这一点,它是Kernel32.dll的一部分 Current_ImageBase.buffer=pNewAddr; 如果(!WriteProcessMemory(hproces,rtlUserProcParamsAddress+0x70,(IntPtr)(&Current_ImageBase),Marshal.SizeOf(typeof(UNICODE_STRING)),out
0x70
。我正试图使用WriteProcessMemory
来实现这一点,它是Kernel32.dll
的一部分
Current_ImageBase.buffer=pNewAddr;
如果(!WriteProcessMemory(hproces,rtlUserProcParamsAddress+0x70,(IntPtr)(&Current_ImageBase),Marshal.SizeOf(typeof(UNICODE_STRING)),out intPtrOutput))
{
Console.WriteLine(“错误:未能将更改反映回PEB。\n”);
返回false;
}
这将更改PEB的命令行。不能保证每个版本的Windows上的命令行都相同 包含指向名为ProcessParameters的结构的指针 此结构包含一个命名的。在这个结构中有一个指向包含命令行参数的缓冲区的指针 要从外部覆盖这些参数,必须:
-发生了什么?这个位
Marshal.SizeOf(typeof(UNICODE_STRING))
在我看来真的很奇怪-你能解释一下吗?你的信念似乎没有根据。为什么你认为它在那里?为什么你认为它在那里是一个好主意,当位置是一个实现细节时,内核可以在它喜欢的时候自由地背叛它?最终,这到底应该实现什么?此外,我所熟悉的大多数应用程序在启动后立即读取/解析它们的命令行,并且只有在启动后才读取/解析它们的命令行。因此,基本上,这是一个“遗留”应用程序,我们没有代码基础。命令行包含敏感信息,我们希望在启动后“屏蔽”它。我重申这并不理想,但只是一个暂时的解决办法。