如何使用 C# 在 Windows 中获取另一个进程基地址?
How can I get another process base adress in Windows using C#?
当我发现 one of Asus old drivers 容易受到物理内存 read/write 的攻击时,我正在浏览 exploitdb。有一个完整的 PoC 展示了如何从 RAM 中读取。问题是我有一个偏移量(假设为 0x31E4),它指示我在程序内存中需要的值的相对位置,但驱动程序正在返回绝对 windows 地址的信息。如何在物理内存中获取基本进程地址(最好是在 C# 中)?有可能吗?
示例伪代码:
DWORD offset = 0x31E4; // Offset
int size = sizeof(float); // Size of float
float output = Read(ProgramBase + offset, size); // Read function that read absolute value from RAM, for that I need ProgramBase
如果你想找到内存的起始块和结束块,这段代码应该做到:
Process p = Process.GetCurrentProcess();
IntPtr startMemory= p.MainModule.BaseAddress;
IntPtr endMemory= IntPtr.Add(startMemory,p.MainModule.ModuleMemorySize);
当然不是当前进程,你可以得到任何其他进程,例如:
Process.GetProcessById(processId)
当我发现 one of Asus old drivers 容易受到物理内存 read/write 的攻击时,我正在浏览 exploitdb。有一个完整的 PoC 展示了如何从 RAM 中读取。问题是我有一个偏移量(假设为 0x31E4),它指示我在程序内存中需要的值的相对位置,但驱动程序正在返回绝对 windows 地址的信息。如何在物理内存中获取基本进程地址(最好是在 C# 中)?有可能吗?
示例伪代码:
DWORD offset = 0x31E4; // Offset
int size = sizeof(float); // Size of float
float output = Read(ProgramBase + offset, size); // Read function that read absolute value from RAM, for that I need ProgramBase
如果你想找到内存的起始块和结束块,这段代码应该做到:
Process p = Process.GetCurrentProcess();
IntPtr startMemory= p.MainModule.BaseAddress;
IntPtr endMemory= IntPtr.Add(startMemory,p.MainModule.ModuleMemorySize);
当然不是当前进程,你可以得到任何其他进程,例如:
Process.GetProcessById(processId)