关于C#:如何获取另一个进程的基地址? (ASLR)

How do I get the base address of another process? (ASLR)

我需要获取一个 .exe 的基地址地址,它每次启动时都有一个随机基地址。我试过这个,但它似乎不起作用:

1
int Base = (DWORD)GetModuleHandle("Test.exe");

怎么了?


您似乎正在尝试获取另一个进程的基地址。可悲的是, GetModuleHandle 仅适用于当前进程中的模块。为了实现您的目标,您需要使用 PSAPI 或 CreateToolhelp32Snapshot 来提取另一个进程的模块列表。并且基地址在列表中。


I need to get the base address/entry point address of a .exe which has a random base address everytime its started. The program uses ASLR.

...

I will use it to edit certain chunks of memory inside the correct process

为了将数据写入另一个进程,您需要使用WriteProcessMemory(),这需要您为正在写入的进程打开一个HANDLE

您使用 OpenProcess() 获得 HANDLE,请求 PROCESS_VM_OPERATIONPROCESS_VM_WRITE 权限。 OpenProcess() 将进程 ID 作为输入,您可以从以下位置获取:

  • CreateToolhelp32Snapshot()/Process32First()/Process32Next()
  • EnumProcesses()
  • WTSEnumerateProcesses()

请参阅进程枚举和枚举所有进程。

您在任何时候都不需要确定正在写入的进程的基地址。让系统为您跟踪该信息。您所需要的只是对进程打开 HANDLE