c# - 如何在外部运行进程中更改 PEB 的命令行
问题描述
基本上我希望能够更改命令行的 PEB,我相信它位于 offset 0x70
。我正在尝试使用WriteProcessMemory
which 是Kernel32.dll
.
Current_ImageBase.buffer = pNewAddr;
if (!WriteProcessMemory(hProcess, rtlUserProcParamsAddress + 0x70, (IntPtr)(&Current_ImageBase), Marshal.SizeOf(typeof(UNICODE_STRING)), out intPtrOutput))
{
Console.WriteLine("ERROR: Failed to reflect change back to PEB.\n");
return false;
}
这应该会改变 PEB 的命令行。
解决方案
不能保证每个版本的 Windows 上的PEB都是相同的。
PEB包含一个指向名为 ProcessParameters的_RTL_USER_PROCESS_PARAMETERS结构的指针。
此结构包含一个名为CommandLine的UNICODE_STRING。在这个结构中是一个指向包含命令行参数的缓冲区的指针。
要从外部覆盖这些参数,您必须:
调用NTQueryProcessInformation以获取 ProcessBasicInformation 和 PEB 地址
OpenProcess并获得写权限
ReadProcessMemory PEB.ProcessParameters
ReadProcessMemory PEB.ProcessParameters.CommandLine
从 UNICODE_STRING.Length 中提取正确大小的WriteProcessMemory PEB.ProcessParameters.CommandLine.Buffer
推荐阅读
- css - css @font-face 的 Webpack 配置?当前设置将 url() 更改为很长的字符串
- python - Seaborn 数据可视化对密度的误解?
- python - docker log 不显示 python 打印输出
- c# - 调用 ToObject 重置阅读器的路径
- python - 循环不适用于移动文件脚本
- java - MapStruct nullValueMappingStrategy 原语到 bean 返回默认 bean 而不是空值
- c# - 对匿名类型内的值求和
- rust - 我必须将我的闭包装箱以将其保存为结构中的字段吗?
- react-native - 反应本机火种图像滑动器
- hasura - Hasura + Firebase:使用 Hasura 1.3.3 中新的“claims_map”功能设置默认角色