Как я могу получить другой адрес базы процесса в Windows, используя C #? - PullRequest
0 голосов
/ 01 февраля 2019

Я просматривал exploitdb, когда обнаружил, один из старых драйверов Asus уязвим для чтения / записи физической памяти.Есть полностью работающий PoC, показывающий, как читать из оперативной памяти.Проблема в том, что у меня есть смещение (скажем, 0x31E4), которое указывает относительное положение значения, которое мне нужно в памяти программ, но драйвер возвращает информацию об абсолютном адресе окна.Как я могу получить адрес базового процесса в физической памяти (предпочтительно в 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

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы хотите найти начальный блок памяти и конечный блок, этот код должен сделать это:

  Process p = Process.GetCurrentProcess();
  IntPtr startMemory= p.MainModule.BaseAddress; 
  IntPtr endMemory= IntPtr.Add(startMemory,p.MainModule.ModuleMemorySize);

Конечно, вместо текущего процесса, вы можете получить любой другой процесс, например:

Process.GetProcessById(processId)
...