当我发现one of Asus old drivers容易受到物理内存读/写的攻击时,我正在浏览exploitdb。有展示如何从RAM中读取一个完全工作的PoC。问题是我有一个偏移量(比方说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
答案 0 :(得分:1)
如果要查找内存的起始块和结束块,此代码应执行以下操作:
Process p = Process.GetCurrentProcess();
IntPtr startMemory= p.MainModule.BaseAddress;
IntPtr endMemory= IntPtr.Add(startMemory,p.MainModule.ModuleMemorySize);
当然可以代替当前进程,而可以使用任何其他进程,例如:
Process.GetProcessById(processId)