Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在外部运行进程中更改PEB的命令行_C#_Windows_Readprocessmemory - Fatal编程技术网

C# 如何在外部运行进程中更改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

基本上,我希望能够更改命令行的PEB,我相信它位于偏移量
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的结构的指针

此结构包含一个命名的。在这个结构中有一个指向包含命令行参数的缓冲区的指针

要从外部覆盖这些参数,必须:

  • 调用以获取ProcessBasicInformation 因此,PEB地址

  • 并获得写入权限

  • 欧洲议会

  • ReadProcessMemory PEB.ProcessParameters

  • ReadProcessMemory PEB.ProcessParameters.CommandLine

  • 带有 从UNICODE_字符串中提取的正确大小。长度


  • -发生了什么?这个位
    Marshal.SizeOf(typeof(UNICODE_STRING))
    在我看来真的很奇怪-你能解释一下吗?你的信念似乎没有根据。为什么你认为它在那里?为什么你认为它在那里是一个好主意,当位置是一个实现细节时,内核可以在它喜欢的时候自由地背叛它?最终,这到底应该实现什么?此外,我所熟悉的大多数应用程序在启动后立即读取/解析它们的命令行,并且只有在启动后才读取/解析它们的命令行。因此,基本上,这是一个“遗留”应用程序,我们没有代码基础。命令行包含敏感信息,我们希望在启动后“屏蔽”它。我重申这并不理想,但只是一个暂时的解决办法。